写点什么

不需要更多 JS 框架了

  • 2014-12-28
  • 本文字数:1564 字

    阅读完需:约 5 分钟

现在,JavaScript 框架已成为 Web 项目开发不可或缺的一部分。那是因为很长一段时间以来,各种浏览器之间有很大的差别,人们不得不编写框架对此进行屏蔽。问题在于,各种浏览器甚至在基本问题上都难以取得一致,以致框架还要针对浏览器该如何工作设计自己的模型,比如如何传播事件、如何与 DOM 交互等。于是出现了许多框架,常见的有 jQuery、Dojo、MochiKit、Ext JS、AngularJS、Backbone 、Ember、React 等。对于这种情况,谷歌工程师 Joe Gregorio 博文中写道:

我认为是时候重新考虑 JS 框架模型了。没有必要发明另外一种做事方式,只要使用 HTML+CSS+JS 就行了。

Joe 认为,在过去的十年中,浏览器变得更好了,它们对标准的支持也得到了改善,每个版本的功能都比上一个版本强大,而且还支持一些新标准,如 HTML Imports Object.observe Promises HTML Templates 。而人们之所以还在编写 JS 框架,可能是出于惯性和习惯。

在进一步阐述观点之前,他对 Web 框架相关的三个概念进行了简单的区分。Gist 是一段简单的代码,库是一个更大代码的集合,而框架不只是库的简单集合,它还有自己的事件、DOM 交互模型。接下来,他说明了不需要 JS 框架的原因:

  • 框架是对 Web 平台的抽象,但由于存在“抽象漏洞(abstraction leak)”,开发人员有时候必须诉诸于 HTML+CSS+JS,而且有时候还需要深入研究框架才能找出问题所在。这样一来,开发人员除了要学习 HTML+CSS+JS 之外,还需要花费大量的时间学习和研究框架。
  • 框架的另一个卖点是可以利用 Widgets 库,而实际上,框架并不是必须的,每个 Widget 都应该是独立的。语法高亮代码编辑器 CodeMirror 就是一个很好的例子。它用 JavaScript 构建,可以用在任何地方,而不需要框架。
  • 框架提供的数据绑定特性并不是必须的,即使需要,也应该以库的形式出现,而不是框架。
  • 框架最终会发展成为一个筒仓,为 A 框架创建的 Widgets 不能用于框架 B,这会造成浪费。

Joe 提出,后 JS 框架时代的基本思路是,开发人员应该使用 HTML+CSS+JS 的功能构建 Widgets。这些 Widgets 相互独立,可以组合使用。 Web 组件为这一切提供了可能。HTML Imports、HTML Templates、Custom Elements 和 Shadow DOM 等技术允许开发人员创建可重用的元素和功能。要了解更多信息,请查看下列文章和库:

而使用 Web 组件首先要有针对相关功能的 Polyfills。他特别强调,Polyfills 并不是框架,它们没有引入自己的 Web 开发模型,而是使 HTML 5 模型可用。同时,它们也弥补了浏览器实现与现有标准在某种程度上的偏离。 MDN 上经常有一些简短的、单功能的Polyfills

构建一个大型的HTML 5 Polyfill 库是有好处的,但更好地是能有一套工具可以根据项目需要生成一个完整HTML 5 Polyfill 库的子集。这样,开发人员就可以混合和匹配不同来源的Web 组件和库,如X-Tag 的和Polymer 的。关于如何获取这些自定义元素,感兴趣的读者可以查看 Brick 的 GitHub 页面 X-Tag 下载页面。Joe 指出,这并不是说创建自定义元素就需要创建自定义的打包器,那不是一个具有可扩展性的思路,而是说需要改变开源方式,一个 Widget 可以不是一个项目,一种更加轻量级的、类似 Gist 的共享方式可能更合适。在这方面,项目 Asset Graph 也许是个不错的开端。所以,他认为,现在需要三样东西:

  1. 构建可重用组件的习惯做法和指南;
  2. 可以遵循这些习惯做法编译 HTML、CSS 和 JS 的工具;
  3. 可扩展的 HTML 5 Polyfill,可以根据需要进行裁剪。

按照 Joe 的观点,将来,开发人员不再需要学习最新的框架,只需要引入能够满足特定需求的自定义元素或库来构建他们的应用。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-12-28 07:198298
用户头像

发布了 1008 篇内容, 共 444.5 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

有奖征集,聊聊「5 周年,你与龙蜥的故事」

OpenAnolis小助手

操作系统 龙蜥社区

第四届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2025)

搞科研的小刘

海外舆情工具TOP 10终极评测:功能、价格与用户口碑全解析

沃观Wovision

海外舆情 海外舆情监测 海外舆情平台

司马阅与铨亿科技达成生态战略合作,探索AI在工业领域的智能化应用

司马阅

多存储文件列表神器Alist:轻松管理你的云端资源

qife122

开源 文件管理

千行云课堂答题考试小程序系统:一站式在线教育解决方案

微擎应用市场

跳槽加分项:掌握Dify工作流,我薪资涨了40%

测试人

软件测试

BendSQL v0.30.3 Web UI 功能介绍

Databend

Apache SeaTunnel 支持 Metalake 开发了!避免任务配置敏感信息暴露

白鲸开源

开源 开发者 Apache SeaTunnel 开源之夏 Metalake

百变分销级差模式商城小程序系统:多模式赋能商业增长

微擎应用市场

新闻速递丨Altair RapidMiner 数据分析和 AI 平台助力企业加速智能升级:扩展智能体 AI 及分析生态系统

Altair RapidMiner

人工智能 机器学习 AI 数据分析 RapidMiner

购买正版Abaqus提供培训吗?Abaqus对设备有要求吗?达索代理商思茂信息帮你一次理清!

思茂信息

abaqus 有限元分析 有限元仿真

龙蜥社区两大委员会月度会议圆满召开

OpenAnolis小助手

龙蜥社区 龙蜥操作系统 OpenAnolis

智能工厂更衣区推荐安装哪类RFID智能储物柜?选型攻略来了

斯科信息

RFID智能储物柜 CK-G0628

司马阅与林熙炎链达成生态战略合作,携手推动「AI+大健康」落地

司马阅

从定位到引爆:为新品牌量身定制的冷启动品牌推广四步法

Wolink

跨境电商 海外媒体 海外社媒营销 海外营销推广 品牌出海

第四届人工智能与教育国际学术会议(ICAIE 2025)

搞科研的小刘

人工智能

WD 音乐 FM 微信小程序:一站式音频类解决方案,复刻网易云音乐优质体验

微擎应用市场

优客享小程序管理系统:全行业社群新零售解决方案

微擎应用市场

从 “数据盲” 到 “节能精”:MyEMS 开源系统重构企业能源管理全流程

开源能源管理系统

开源 能源管理系统

深度探讨“云+智能计算”,智算新基础设施分论坛议程揭晓 | 2025 龙蜥大会

OpenAnolis小助手

AI 操作系统 智算 龙蜥操作系统大会

Apache DolphinScheduler 3.3.2 正式发布!性能与稳定性有重要更新

白鲸开源

大数据 开源 Apache DolphinScheduler 任务调度 发版

LLM 时代,DataAgent × WhaleTunnel 如何将数据库变更瞬时 “转译” 为洞察?

白鲸开源

AI 数据同步 LLM 白鲸开源 WhaleTunnel

黑帽大会与DefCon29演讲:UEFI固件供应链与RISC-V芯片故障注入技术

qife122

漏洞挖掘 固件安全

产品体验官有奖招募 | 体验华为云Versatile智能体平台构建创意AI Agent

华为云开发者联盟

华为云

如何构建 AI 智能体(2025 完全指南)

码界行者

AI智能体

境外舆情系统哪家的最好用?

沃观Wovision

海外舆情 舆情监测系统 境外舆情

低至 1% 性能损耗:阿里云 ARMS 配置模板如何实现精准可控的 JMX 数据采集

阿里巴巴云原生

云原生 可观测 Arms 阿里与

企业网安融合的实践与未来

光联世纪

网络安全 sase SD-WAN组网

扫码挪车 MyCar 小程序系统:汽车后市场智慧解决方案

微擎应用市场

司马阅与壁虎云创达成生态战略合作,联合推动人力资源平台的智能化升级

司马阅

不需要更多JS框架了_JavaScript_谢丽_InfoQ精选文章