WebAssembly
WebAssembly 是现代浏览器所能执行的一种新类型的代码,目标是为了在网络上获得更好的性能。 WebAssembly 是一种低层的二进制格式代码,体积小,因此加载和执行速度快。 WebAssembly 允许将 C ,C++ 或 Rust 代码编译成 WebAssembly 模块,可以 Web 应用中加载并通过 JavaScript 调用。 它不是 JavaScript 的替代品,它将与 JavaScript 一起共存。
从浏览器的发展历程中梳理出了三个大的进化路线, Web 应用到底能做什么,未来能适用于那些新领域
第一个是应用程序 Web 化。随着云计算的普及和 HTML5 技术的快速发展,越来越多的应用转向了浏览器 / 服务器(B/S)架构,这种改变让浏览器的重要性与日俱增,视频、音频、游戏几大核心场景也都在往 Web 的使用场景切换。
第二个是 Web 应用移动化。对于移动设备应用,Web 天生具有开放的基因,虽然在技术层面还有问题尚待解决(比如,渲染流程过于复杂且性能不及原生应用、离线时用户无法使用、无法接收消息推送、移动端没有一级入口),但 Google 推出了 PWA 方案来整合 Web 和本地程序各自的优势。顺便说一句,PWA 也是我个人非常期待的方案。
第三个是 Web 操作系统化。在我看来,Web 操作系统有两层含义:一是利用 Web 技术构建一个纯粹的操作系统,如 ChromeOS;二是浏览器的底层结构往操作系统架构方向发展,在整个架构演化的大背景下会牵涉诸多改变,下面列举一些我认为相对重要的改变。Chrome 朝着 SOA 的方向演化,未来很多模块都会以服务的形式提供给上层应用使用;在浏览器中引入多种编程语言的支持,比如新支持的 WebAssembly;简化渲染流程,使得渲染过程更加直接高效;加大对系统设备特性的支持;提供对复杂 Web 项目开发的支持。
前端技术是如何针对这些核心诉求做演进的
首先是脚本执行速度问题。比如针对 JavaScript 设计缺陷和执行效率的问题,可以从以下两个途径去解决:
1、不断修订和更新语言本身,这样你就应该知道 ES6、ES7、ES8,或者 TypeScript 出现的必要性。这种修订对目前生态环境的改动是最小的,所以推行起来会比较容易。
2、颠覆性地使用新的语言,这就是 WebAssembly 出现的原因。WebAssembly 需要经过编译器编译,所以体积小、执行速度快,使用它能大幅提升语言的执行效率,但是语言本身的完善,和生态的构建都是需要花很长时间来打造的。
其次是前端模块化开发。比如,随着 Web 应用在各个领域的深入,Web 工程的复杂程度也越来越高,这就产生了模块化开发的需求,于是相应出现了 WebComponents 标准。我们所熟悉的 React 和 Vue 都在渐进地适应 WebComponents 标准,同时各种前端框架的最佳实践也会反过来影响 WebComponents 标准的制定。
如果理解了浏览器工作原理,那么你会对 WebComponents 中涉及的 Shadow DOM、HTML Templates 等技术有更深刻的理解。
最后是渲染效率问题。同样,如果理解浏览器的渲染流程,那么你应该知道目前页面的渲染依然存在很大缺陷,然后你就清楚如何避开这些问题,从而开发出更加高效的 Web 应用。与此同时,Chrome 团队也在着手改善这些缺陷,比如正在开发的下一代布局方案 LayoutNG,还有渲染瘦身方案 Slim Paint,其目的都是让渲染变得更加简单和高效。