微软要放弃Electron了???聊聊WebView2
有好几个公众号发文说“微软要放弃Electron了”,实际情况是微软旗下的Teams产品打算把Electron框架换成WebView2而已。接下来我就聊一下这个事情:
微软不会放弃Electron
第一:Electron是GitHub的产品,GitHub是微软的子公司,WebView2是Edge团队的产品(是Edge的副产物),Edge团队是微软直属的团队,所以事情就是:Teams打算切换一下自己的底层框架,而且这两个框架都是自己公司的产品,并不是放弃自己公司的框架,用了其他公司的框架。
第二:微软内部有很多软件都是基于Electron开发的,比如VSCode和GitHubDesktop,不仅仅是只有Teams这么一个产品在用它,非但微软内部,包括Facebook、MongoDB、twitch、Slack、迅雷、字节跳动、阿里、拼多多、京东等大企业都在用这个框架,这么一个好东西,微软怎么会放弃它呢?
第三:Teams之所以要把Electron换成WebView2,并不是因为Electron不好,而是因为Electron不称手,就像一个木匠换个锤子敲钉子一样普通,对于那些Electron的从业者,或者想进入Electron这个领域的开发者,没什么好担心的。
具体的技术细节
第一:开发者是没有办法只用前端技术基于WebView2开发桌面应用的。开发者要满足类似:读写文件、访问剪切板、设置托盘图标这类系统级需求,就必须自己写C++或者C#代码来实现。而这对于Electron的开发者来说,只要写JavaScript就可以了。
第二:WebView2目前是没跨平台能力的,也就是说基于WebView2开发的桌面应用仅能在Windows操作系统下运行,无法在Mac或者Linux下运行,即使将来WebView2提供了跨平台能力,那么开发者写的C++代码就要考虑如何在不同的平台下调用不同的系统API,如果开发者写的是C#代码,那么就要考虑如何把.NET框架分发给他们的用户了。显然Teams产品是一个跨平台的产品,他们财大气粗,很有可能Windows系统用WebView2实现,其他系统用原生技术实现,或者与系统API有关的C++代码写3次也没问题。我们普通开发者就很难这么做。
第三:WebView2要求开发者使用C++或者C#实现系统级需求,这就给了开发者精细化控制的能力,我想这也是Teams团队看中的东西,然而要想获得这种能力为什么不直接选Qt的QWebEngin或者cef呢?毕竟他们和WebView2一样都是对Chromium内核的封装,很显然微软的团队是不能做这种决定的,因为Qt有版权的问题,cef也不是自家的东西。相对来说我们普通开发者在这种选择上就自由很多。
第四:WebView2目前还很不成熟,我上次调研它时,它还不支持自定义Scheme(如果它不支持,开发者很难通过C++或C#代码让应用具备这方面的能力的),甚至连PrintToPdf这类API也还是几个版本前才提供出来的。
第五:WebView2的生态很不好,想想看:你如何在应用中自如的使用Sqlite(能获得类似Knex.js这样的支持吗)、如何让你的应用读取并显示一个本地大文件(大概率要自己实现流式读取的机制,要把文件数据Chunk转成ArrayBuffer再交给界面的Js,涉及到各种编解码及进程间通信的问题)
第六:WebView2是不开源的,这更加恶化了WebView2的生态;而且对于一些疑难杂症来说,开发者也很难进行源码级别的调试。有些开发者可能会认为这或许有利于保护源码,估计这些开发者不知道怎么让Electron保护自己的源码,这里说一下思路:开发者可以把Electron源码拉到本地,修改asar拆包封包的逻辑,然后再自己编译一下Electron,这样就可以保护应用的源码了。
第七:WebView2的性能提升或资源消耗削减可能并没有那么明显,我们都知道,只要使用Chromium,就难逃多进程架构,WebView2也不例外,它的进程甚至比Electron的进程还要多一个。多进程才是资源消耗高的症结所在。它的优势就是可以和其他应用共享进程。但假设用户也没开Edge,也没打开其他WebView2应用呢?这种优势还体现的出来吗?因为要自己实现系统级需求,不再需要加载Node框架,性能提升或许有一些(这取决于开发者的能力),但为了这些性能提升舍弃的东西也太多了,我们普通开发者难以承受。
第八:WebView2是Edge团队的副产物,没错,是个副产物,他们的主要职责是做好Edge,而不是做好WebView2,他们对WebView2的支持力度和支持持久性是值得担忧,尤其是:这个团队刚刚在不久前放弃了自己的浏览器引擎!
微软要放弃Electron了???聊聊WebView2的更多相关文章
- 放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序
Electron 不错,但也不是完美的. Electron 带来了很多优秀的桌面软件,但并不一定总是适合我们的需求. 多个选择总是好事! 我使用 Electron 遇到的一些麻烦 1.Electron ...
- 一键生成通用高亮代码块到剪贴板,快捷粘贴兼容 TT/WX/BJ 编辑器
有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴 HTML 格式的高亮代码块. 花了一点时间研究了一下各家的编辑器,规则却各不相同.有的要求代码块被包含于 <code> ... &l ...
- Win10微软官方最终正式版ISO镜像文件
Win10微软官方最终正式版ISO镜像文件 据说Windows 10是微软发布的最后一个Windows版本,下一代Windows将作为Update形式出现.Windows 10将发布7个发行版本,分别 ...
- Windows XP SP3 Professional 微软(MSDN)官方原版系统
Windows XP SP3 Professional 微软(MSDN)官方原版系统 Windows XP(版本号:5.1,开发代号:Whistler)是微软公司推出供个人电脑使用的操作系统,其RTM ...
- 微软的Dll管理方案及其变迁(Side-by-side assembly)
本文简要介绍Side-by-side assembly技术,探讨在插件技术中使用类似方法的可能. 什么是Side-ty-side Assembly Side-by-side assembly是Wind ...
- [转帖]为微软效力15年的微软前员工解释Windows 10为什么问题这么多
为微软效力15年的微软前员工解释Windows 10为什么问题这么多 https://www.cnbeta.com/articles/tech/892109.htm . 测试团队已经被裁撤 . 自动化 ...
- .NET混合开发解决方案13 自定义WebView2中的上下文菜单
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- [转帖]Windows 7寿终正寝 为何Windows 10屡被吐槽它却无比经典?
Windows 7寿终正寝 为何Windows 10屡被吐槽它却无比经典? https://www.cnbeta.com/articles/tech/908897.htm 是的,一代经典操作系统Win ...
- css常用hack
原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...
随机推荐
- html+css第十篇-命名
命名:根据每块元素的主题 或者功能.在页面上的位置 php 每个单词中间以"_"隔开 #main_left_box{} 驼峰命名 从第二个单词开始每个单词的首字母大写 #mainL ...
- Roslyn+T4+EnvDTE项目完全自动化 (一)
前言 以前做一个金融软件项目,软件要英文.繁体版本,开始甲方弄了好几个月,手动一条一条替换,发现很容易出错,因为有金融专业术语,字符串在不同语义要特殊处理,第三方工具没法使用.最后我用Roslyn写了 ...
- Revit二次开发之获取本机已安装的Revit版本与路径
在revit安装目录下找到 RevitAddInUtility.dll 在项目中引用 使用以下方法 using Autodesk.RevitAddIns; /// <summary> // ...
- Codeforces 1276D - Tree Elimination(树形 dp)
Codeforces 题面传送门 & 洛谷题面传送门 繁琐的简单树形 dp(大雾),要是现场肯定弃了去做 F 题 做了我一中午,写篇题解纪念下. 提供一种不太一样的思路. 首先碰到这样的题肯定 ...
- miRNA分析--比对(二)
miRNA分析--数据过滤(一) 在比对之前为了减少比对时间,将每一个样本中的reads进行合并,得到fasta格式,其命名规则如下: 样本_r数子_x数字 r 中的数字表示reads序号: x 中的 ...
- you crash I crash
今天一大早起来,zabbix报错了 我去查看了mysql的状态 MySQL is not running, but lock file (/var/lock/subsys/mysql) exists ...
- mysql—mysql查询语句提示Unknown column ‘xxx’ in ‘where clause’
运行结果中提示Unknown column 'xxx' in 'where clause'的问题.经过大神的指导,顿时明白其中缘由,如果sql中定义的类型是int型的可以不用加引号,但是如果是字符串类 ...
- FFmpeg笔记:使用MSVC工具链编译Windows版本静态库、动态库
2019年3月开始,为了将音视频编解码功能集成到Cocos2d-x中,开始接触到FFmpeg: 当时开发环境还在Mac下,编译FFmpeg相比现在用Windows平台要方便的多: 最近,公司内部有个U ...
- 04 Windows安装python运行环境
安装python运行环境 使用微信扫码关注微信公众号,并回复:"Python工具包",免费获取下载链接! 1.卸载程序(电脑未装此程序,跳过此过程) 卸载这两个程序 出现下图所示, ...
- 零基础学习java------36---------xml,MyBatis,入门程序,CURD练习(#{}和${}区别,模糊查询,添加本地约束文件) 全局配置文件中常用属性 动态Sql(掌握)
一. xml 1. 文档的声明 2. 文档的约束,规定了当前文件中有的标签(属性),并且规定了标签层级关系 其叫html文档而言,语法要求更严格,标签成对出现(不是的话会报错) 3. 作用:数据格式 ...