一般来说,一项新技术是否会随着时代的推进而被快速地迭代和发展,要看这项技术所应用在的实际业务场景中是否有相应的技术需求,毕竟没有任何技术是会被凭空创造出来的。
技术决定了业务需求的多样性,而业务需求的多样性又推动着技术不断向前发展,两者相辅相成最终才能推动行业整体的发展和进步。
自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页面的交互设计变得越来越复杂,这种成本损耗所带来的问题可能会被逐渐放大,这也是我们在未来将要面对的问题 。