Web 新时代与挑战
一般来说,一项新技术是否会随着时代的推进而被快速地迭代和发展,要看这项技术所应用在的实际业务场景中是否有相应的技术需求,毕竟没有任何技术是会被凭空创造出来的。技术决定了业务需求的多样性,而业务需求的多样性又推动着技术不断向前发展,两者相辅相成最终才能推动行业整体的发展和进步。
自 1991 年 HTTP 协议和 HTML 超文本标记语言这两种核心的 Web 技术诞生以来,Web 开发技术领域便开始不断地发生着翻天覆地的变化。如下图给出的 Web 技术发展史所示,从 1991 年到 2002 年的这十年里,Web 技术的发展过程还是比较缓和和稳定的。在这十年的时间里,首先是 NetScape、Opera 和 Internet Explorer(IE)三大浏览器开始逐渐走入人们的视野。一些用于构建更丰富 Web 应用的基础性技术开始逐渐涌现,比如 Flash 技术从 1996 年开始可以被应用在浏览器端,这使得传统的Web应用中可以嵌入包含丰富多媒体信息的 Flash 应用,这一发展也使得 Web 应用的交互性和动态性大大的增强。Flash 技术的出现催生了一批以提供视频播放、视频发布和视频分享服务为主的视频服务平台的出现,另一方面同时也推动了基于 Flash 的 Web 页游行业的发展。
自 2002 年开始,Web 技术的发展便到了其整个发展历程的“下半场”。从 2003 年开始一直到2012年的这将近十年的时间里,新型 Web 技术的出现逐渐呈现出了爆炸式的增长。首先是 Chrome、Firefox 和 Safari 这三种为推动 Web 技术后来的爆炸式发展作出了巨大贡献的浏览器开始出现,各大浏览器厂商对其产品的版本更新迭代速度也开始加快。Web 技术的发展从 2008 年开始进入了一个“爆炸式”的快速发展阶段,各种各样的新型 Web 浏览器特性和新的 Web 标准以及 ECMAScript 标准如“雨后春笋”般开始涌现出来。XMLHTTPRequest2 技术为 Web 应用的数据传输提供了更方便和高效的传输方式;WebRTC 技术为 Web 应用的实时在线视频/语音直播提供了底层的基础技术解决方案;WebGL 技术为 Web 应用提供了一种可以通过 JavaScript 来操作 Web 版本 OpenGL 的特性,基于 WebGL 暴露出的 JavaScript 接口,我们可以在 Web 网页上高效地绘制3D动画和模型,为在 Web 网页上运行大型 3D 网络游戏提供了可能;IndexedDB 技术为前端应用存储结构化数据并且对数据进行高性能的数据检索提供了支持。除此之外还有很多的 Web 相关技术被实现和标准化,这些技术都无疑大大地拓宽了 Web 应用所能覆盖到的应用领域和场景。也正是自 2008 年的 HTML5 标准和2009年的 CSS3 标准出现之后,Flash 多媒体应用技术在 Web 开发领域逐渐开始走向了下坡路,直至最后被其他技术取代。由此也可见 Web 领域的技术迭代与更替速度之快。
JavaScript 作为一门用于开发 Web 端应用的编程语言从 1997 年发展至今,其所能应用的领域已经不仅仅局限在最原始的基于浏览器的 Web 端应用开发上了。包括 Node.js 在内的等一系列新出现的 JavaScript 运行时环境已经把 JavaScript 的应用场景从前端应用的开发带到了服务端应用的开发。
基于 Chrome V8 引擎构建的 Node.js 和 Fib.js 等 JavaScript 运行时环境和框架为后端服务器应用的开发提供了“非阻塞的异步 IO”和“基于事件模型”等新特性。这些新特性可以让我们以开发传统前端 Web 应用的思路来开发服务器端应用。不仅如此,基于 Node.js 开发出来的各种服务端应用框架更是极大的提高了我们开发后端应用的效率。这些框架在一些必要的业务流程上已经为我们做了足够多的封装和优化,这使得我们可以更多的去关注业务逻辑代码上的实现,而不是一些底层细节架构上的事情。但事情并没有这么完美,就拿 Node.js 为例,由于 Node.js 本身是基于 V8 实现的,而 V8 本身所负责的一个最重要的功能就是对 JavaScript 代码进行解析和优化,然后将这些优化后的代码编译成机器码最后运行。因此,无论 Node.js 对 V8 上层的 JavaScript 代码进行了何种系统底层调用流程上的优化,如果最后在 V8 解析和执行 JavaScript 代码时的速度很慢,那么整个应用的运行效率必然会大打折扣。总的来说,Chrome V8、JavaScriptCore 和 SpiderMonkey 等 JavaScript 引擎对 JavaScript 代码的解析和执行效率高低,直接决定了这些基于 JavaScript 开发的前端和服务器端应用的运行流畅程度,进而也直接影响了最前端的产品用户体验。
除此之外,变得日益复杂和庞大的 Web 前端应用也带来了更多对 JavaScript 语言性能上的挑战。比如基于 Web 端的视频处理软件、基于 Web 端的大型 3D 游戏、基于 Web 端的在线机器学习(深度学习)训练平台等。这些应用无一例外都需要消耗浏览器大量的计算资源,因此 JavaScript 引擎对 JavaScript 代码的执行效率也直接决定了这些应用能否被流畅地运行。不仅如此,我们都知道通过 JavaScript 来移动或修改页面上的 DOM 节点所付出的成本是巨大的,随着传统Web页面的交互设计变得越来越复杂,这种成本损耗所带来的问题可能会被逐渐放大,这也是我们在未来将要面对的问题 。
评论 | Comments