有好几个公众号发文说“微软要放弃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的更多相关文章

  1. 放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序

    Electron 不错,但也不是完美的. Electron 带来了很多优秀的桌面软件,但并不一定总是适合我们的需求. 多个选择总是好事! 我使用 Electron 遇到的一些麻烦 1.Electron ...

  2. 一键生成通用高亮代码块到剪贴板,快捷粘贴兼容 TT/WX/BJ 编辑器

    有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴 HTML 格式的高亮代码块. 花了一点时间研究了一下各家的编辑器,规则却各不相同.有的要求代码块被包含于 <code> ... &l ...

  3. Win10微软官方最终正式版ISO镜像文件

    Win10微软官方最终正式版ISO镜像文件 据说Windows 10是微软发布的最后一个Windows版本,下一代Windows将作为Update形式出现.Windows 10将发布7个发行版本,分别 ...

  4. Windows XP SP3 Professional 微软(MSDN)官方原版系统

    Windows XP SP3 Professional 微软(MSDN)官方原版系统 Windows XP(版本号:5.1,开发代号:Whistler)是微软公司推出供个人电脑使用的操作系统,其RTM ...

  5. 微软的Dll管理方案及其变迁(Side-by-side assembly)

    本文简要介绍Side-by-side assembly技术,探讨在插件技术中使用类似方法的可能. 什么是Side-ty-side Assembly Side-by-side assembly是Wind ...

  6. [转帖]为微软效力15年的微软前员工解释Windows 10为什么问题这么多

    为微软效力15年的微软前员工解释Windows 10为什么问题这么多 https://www.cnbeta.com/articles/tech/892109.htm . 测试团队已经被裁撤 . 自动化 ...

  7. .NET混合开发解决方案13 自定义WebView2中的上下文菜单

    系列目录     [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...

  8. [转帖]Windows 7寿终正寝 为何Windows 10屡被吐槽它却无比经典?

    Windows 7寿终正寝 为何Windows 10屡被吐槽它却无比经典? https://www.cnbeta.com/articles/tech/908897.htm 是的,一代经典操作系统Win ...

  9. css常用hack

    原文地址:css常用hack 突然想起今天早上在CNZZ看到的统计数据,使用IE6.7的用户比例还真多,看到之后我的心都碎了.微软都放弃了为毛还有这么多人不死心? 所以说,IE下的兼容还是得做的. – ...

随机推荐

  1. Codeforces 1455G - Forbidden Value(map 启发式合并+DP)

    Codeforces 题面传送门 & 洛谷题面传送门 首先这个 if 与 end 配对的结构显然形成一个树形结构,考虑把这棵树建出来,于是这个程序的结构就变为,对树进行一遍 DFS,到达某个节 ...

  2. TVB斜率限制器

    TVB斜率限制器 本文参考源程序来自Fluidity. 简介 TVB斜率限制器最早由Cockburn和Shu(1989)提出,主要特点是提出了修正minmod函数 \[\tilde{m}(a_1, a ...

  3. Rust 指定安装目录

    集群home目录被管理员限制了存储空间,rust安装要100多M,默认安装home目录下,查了一圈,没找到rust指定安装目录的办法. 这里记录下解决办法: 在想要安装的目录执行 mkdir -p c ...

  4. python—模拟生成双色球号

    双色球规则:"双色球"每注投注号码由6个红色球号码和1个蓝色球号码组成.红色球号码从1--33中不重复选择:蓝色球号码从1--16中选择. # -*- coding:UTF-8 - ...

  5. OpenSSH 密码和公钥认证原理探究

    目录 配置和保护SSH H3 - 使用SSH 访问远程命令行 H4 - 什么是OpenSSH ? H4 - 登录方式: H4 - 登录并执行临时命令: H4 - 查看登录用户 H4 - 登录原理 密码 ...

  6. Kubernetes-存储(一)

    前言 本篇是Kubernetes第十二篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kubern ...

  7. java Random()用法

    1.random.nextInt() random.nextIn()的作用是随机生成一个int类型,因为int 的取值范围是 -2147483648--2147483647 ,所以生成的数也是处于这个 ...

  8. 关于learning Spark中文版翻译

      在网上找了很久中文版,感觉都是需要支付一定金币才能下载,索性自己翻译算了.因为对Spark有一定了解,而且书籍前面写道,对Spark了解可以直接从第三章阅读,就直接从第三章开始翻译了,应该没有什么 ...

  9. Ganglia 简单介绍与安装

    文章来至于   http://sachinsharm.wordpress.com/2013/08/17/setup-and-configure-ganglia-3-6-on-centosrhel-6- ...

  10. C++构造函数和析构函数初步认识(2)

    构造函数的三个作用1.构造对象2.对象初始化3.类型转换  //Test1.h #include<iostream> using namespace std; //构造对象 //初始化对象 ...