据说在浏览器的上古时代便诞生了网页制作的三剑客:Dreamweaver、Fireworks和Flash。
噢...搞错了,是 HTML、CSS 和 JavaScript,三位剑客各司其职,使得浏览器世界得以正常运行:
从图来看,JS 才是真正的多面手,其通过 API 操作 HTML 和 CSS。
但我在学习 原生DOM API 的时候,这些 API 的冗长和繁琐无数次使我感到疲惫,而使我更加疲惫的是 IE 的各种奇怪特性...
因这些痛点,jQuery 顺势而生,大放异彩!它极大地提高了开发的便利性,如:
- 简化了 原生API 那冗长的命名,通过链式调用既方便了代码的书写又提高了可读性。
- 解决了大量兼容性问题。
- 对 ajax 等一些常用功能的封装。
jQuery 的横空出世一度让人兴奋不已,而在小富即安不久后,慢慢地发现,就算有此等神器,常常还是会沙场折戟:
如,前端请求到的数据要转变为 HTML 时要写大量操作 DOM 的代码,而这些代码的强壮性与可复用性都很差,即要实现「数据与UI同步」很难。
再如,JS 修改 HTML 往往意味着整棵 DOM树 的销毁与重建,这非常耗费性能。
再再如,因变量的全局污染,使得模块化或多人协作都非常困难。
再再再如,。。。
因这些痛点, React/Vue 等 MV*M 架构的框架又顺势而生,大放异彩!它们主要解决的问题有:
- 开发的便利性:基于 MVVM模式 的思想,将 数据(Model) 映射至 HTML(View) 并保持同步(数据与 UI 同步),使得开发人员只需关注和操作 数据(Model) 就可操作 DOM树 了。
- 性能的极大提升:通过 虚拟DOM + Diff算法,使得此类框架在更改 DOM树 前先判断 DOM树 的哪部分发生了变动,进而只更改变动的那部分。
- 模块化:经由 node_modules 到各大框架的尝试,使得模块化开发已在前端界彻底落地。
回顾历史,技术发展的大方向无外乎:提升开发的简易性、提升性能、提升技术的应用广度,即更易、更快、更广!
在个人粗浅看来,web 在“更易”的方向上,MVVM框架 + ES6 + node工具 已使得开发变得非常容易了。
而在“更快”和“更广”还是有巨大的提升空间,比如:
- 更快:WebAssembly、Web Worker、ArrayBuffer 等等
- 更广:React-Native、Weex、Electron、PWA、Deno、Aframe、Ruff、小程序等等
从历史展望未来,JS 极有可能成为横跨各平台前端的通用语言。
当然现在 JS 还有诸多问题,这可能也是为什么前端在飞速发展的原因吧。
毕竟,宏大愿景就在前面,又怎能不加速向前?