我是在大学期间在网吧里通宵时接触到了微软 Office 的附加组件 FrontPage,这是一个早已被历史淘汰的软件,不知是否有人还记得它。当时,猫叔突然发现搜狐、新浪等网站的页面原来可以自己动手制作。而与此同时,其他人在网吧里打游戏泡妞,猫叔则在网吧里研究了整整一晚上的页面制作。因此,今天,猫叔想和大家聊聊Web开发的发展以及未来的一些新趋势。其中,后端渲染和WebAssembly成为了新的趋势。
#0x01 最早的WEB页面和最早的浏览器
Web诞生之初,并没有像现在这样美好。Web页面是由HTML语言编写的,而且世界上第一个Web页面的外观非常简陋(可以在 http://info.cern.ch 上找到复刻版),甚至只能在控制台(Console)下使用,当时还没有现在我们常用的浏览器。
最早的浏览器这个样子。
#0x02 服务器生成HTML的时代
Web页面最早是由服务器生成后,传送到浏览器进行渲染展示。这个时期被称作 Web 1.0,信息主要由服务器推送到客户端。在这个时期,主要的编程语言从 CGI 到 ASP、JSP、PHP 等。这个时代还没有前后端分离的概念,前端使用 JavaScript 主要是用于一些简单的效果。
#0x04 AJAX 时代
在服务器生成模式中,存在的问题是每次请求都要重新传输整个页面,这会导致延迟和浪费。在2004年,猫叔曾经尝试使用 Iframe 的方式来进行局部更新。2005年,谷歌提出了 Ajax 的概念,通过 JavaScript 异步请求与服务器进行数据交换,从而实现局部更新 Web 页面。这个时期促进了 Web 2.0 技术的发展,用户参与到了信息的生产和创造中。jQuery 成为了这个时期最受欢迎的框架,它将对 HTML 的操作进行了封装,使得 JavaScript 几乎成了代表 HTML 操作的语言。同时,也出现了很多脚本语言被用作后端语言,前端的开发框架也层出不穷,前后端逐渐分离。
在这个时期,浏览器的兼容性问题仍然存在。微软的 IE 占据了统治地位,大多数项目都苦于各种浏览器的兼容性问题。
。
#0x05 Virtual DOM 时代
在Web 1.0时代,前端的主要职责是将设计师提供的静态页面转化为网页,因此被称为美工。但随着Web 2.0时代的到来,前端的角色逐渐发生了变化。随着Ajax技术的出现,前端开始承担更多的交互和动态效果方面的工作,这也使得前端在整个项目中的重要性越来越高,占比也越来越大,成为一个独立的编程领域。
随着HTML5标准的发布,前端的复杂度也在不断增加,为了应对这一挑战,前端开始借鉴后端的MVC模式进行设计和拆分,同时出现了一批前端框架,如Vue、React和AngularJS。这些框架主要使用了Virtual DOM的方式,将对HTML的操作抽象成了编程语言,使得前端开发变得更加高效和灵活。这也为Web页面开发开辟了一个新天地,不仅仅是面向B/S应用,一些应用程序也采用这个技术栈进行开发。
#0x06 服务端渲染和微软 Blazor
基于JavaScript的前端技术的繁荣也带来了一些问题。首先,将所有的压力都放在前端导致需要加载的文件越来越大。其次,大部分的逻辑放在前端也存在一定的泄密风险。第三,JavaScript语言是弱类型的,性能比较差。
微软在2019年推出了Blazor框架,使用C#编写前端,对于很多前端开发人员来说,这听起来十分魔幻。Blazor的原理是将Virtual DOM放在了服务端,将前端业务后端化,解决了前两个问题。前端的请求通过WebSocket发送到后端,后端将数据和更新指令发送到前端,巧妙地拉通了前后端的协同。虽然微软的这种方式是否能够长远发展尚未可知,但这是一个解决问题的不错思路。
同样在2020年12月,React团队提出了React Server Components,也是将页面的渲染放在了后端,原来前端的工作可以顺利迁移。
#0x07 WebAssembly 时代
最后,我们来谈一下WebAssembly。WebAssembly于2015年首次发布,2019年成为W3C正式标准,2022年发布2.0版本,目前94%的浏览器已经支持了WebAssembly。
由于WebAssembly是二进制机器码,可以认为和本地原生应用等效,因此它能够在浏览器中实现接近本机的执行速度。通俗地说,WebAssembly为JavaScript提供了一个更加高效的处理模块,解决了性能不足的问题,而JavaScript则起到胶水语言的作用。
通过WebAssembly,我们可以开发接近原生性能的高性能web应用程序,可以执行视频处理、3D渲染、多媒体游戏、加密计算和AR/VR实时应用程序等任务。
这里留一个思考,既然WebAssembly是在浏览器中运行的二进制代码,而浏览器是跨平台的,那么是否就有了跨平台的通用原生应用的可能性呢?这是一个值得深入探讨的话题。
参考网站:
PHP官网 https://www.php.net
jQuery官网 ttps://jquery.com
RubyOnRails官网 https://rubyonrails.org
Python官网 https://www.python.org
JSON官网 https://www.json.org
VUE官网 https://cn.vuejs.org
React官网 https://react.dev
Angular官网 https://angularjs.org
Blazor官网 https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor
WebAssembly官网 https://webassembly.org