速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

不需要更多 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:197844
用户头像

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

关注

评论

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

人工智能与物联网:融合创新驱动未来

天津汇柏科技有限公司

物联网 人工智能’

一文读懂Partisia Blockchain的MPC方案,为医疗领域发展赋能

西柚子

抢占职场C位!全栈开发与测试开发定向就业班助你快速就业

测试人

软件测试

谷歌、Meta、Claude、Perplexity都在争取与苹果AI整合;阿里联合华东师大发布AI视频工具|AI日报

可信AI进展

#人工智能

淘宝商品评论数据采集丨淘宝商品评论数据接口Taobao.item_review

tbapi

淘宝商品评论数据接口 淘宝评论API接口 淘宝商品评论数据

Mindmanager是什么?一文说清这款导图软件,附5款平价替代软件!

彭宏豪95

思维导图 在线白板 AIGC 效率软件 思维导图软件

京东JD商品SKU信息API返回值应用指南:商品规格数据驱动的精准营销

技术冰糖葫芦

api 网关 API Explorer api 货币化 API 文档

Qt(C++)使用QChart动态显示3个设备的温度变化曲线

DS小龙哥

6 月 优质更文活动

MoneyPrinterPlus:AI自动短视频生成工具-腾讯云配置详解

程序那些事

工具 AIGC

把飞书云文档变成HTML邮件:问题挑战与解决历程

得物技术

CSS JavaScript typescript web前端 企业号2024年6月PK榜

淘宝/天猫获得淘宝商品详情高级版 API

技术冰糖葫芦

api 网关 API Explorer api 货币化 API 文档 pinduoduo API

全新升级!昇腾AI原生创新算子挑战赛(S2赛季)等你来挑战

新消费日报

EMR Serverless Spark:结合实时计算 Flink 基于 Paimon 实现流批一体

阿里云大数据AI技术

大数据 flink spark 阿里云 Serverless

零信任价值获全面认可 新场景下展现无穷潜力

芯盾时代

信息安全 零信任 零信任模型

大模型重塑软件开发,华为云AI原生应用架构设计与实践分享

华为云开发者联盟

人工智能 软件开发 华为云 华为云开发者联盟 企业号2024年6月PK榜

7thonline第七在线受邀出席零售业卓越运营联盟(COER)2024

第七在线

基于 Native 技术加速 Spark 计算引擎

百度Geek说

spark 企业号 6 月 PK 榜

Linux 文件传输利器:SCP 和 LRZSZ

左诗右码

Shell

威士顿携手 TDengine,共同推动工业数据处理效率提升

TDengine

数据库 tdengine 时序数据库

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