AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

Seata:打造行业首个分布式事务产品

阿里巴巴云原生

阿里云 云原生 dubbo

智能高效|AIRIOT智慧货运管理解决方案

AIRIOT

物联网 智慧货运 智慧系统

创梦天地与华为达成鸿蒙合作

新消费日报

倒计时3天|开源开发者的技术年末盛典即将开启

开放原子开源基金会

开源

拐点已至?2023中国企业数智化应用年度洞察

B Impact

软件测试/测试开发|selenium NoSuchDriverException问题解决

霍格沃兹测试开发学社

软件测试/测试开发|Ubuntu系统常用文件管理命令详解

霍格沃兹测试开发学社

Chappyz 生态迎重磅利好:多链应用程序启动、100% 收入共享计划开启

股市老人

大数据时代:我对大数据的发展趋势与前景展望

屿小夏

大数据

C 语言运算符详解

小万哥

c c++ 程序员 后端 软件开发

诚邀报名|探寻AI融合的前端开发之道:解除焦虑,构建核心竞争力

开放原子开源基金会

开源

脉脉宣布全员下调,华为莫名奇妙躺枪。。。

Jackpop

使用 Amazon Fault Injection Service 演示多区域和多可用区应用程序弹性

亚马逊云科技 (Amazon Web Services)

S3 Amazon EC2 Amazon RDS Amazon DynamoDB Amazon ECS

如何写好Prompt,让GPT 的回答更加精准

Bob Lin

人工智能 openai ChatGPT GPT-4 langchain

诚邀报名|来开源项目维护者论坛,为项目可持续发展贡献您的声音

开放原子开源基金会

开源

诚邀报名|与你同行——开源教育晨雾中的早行者

开放原子开源基金会

开源

centos 7.6安装sealos和单机集群

麦兜

web3钱包进阶!从入门到精通,Bitget实现逆袭

股市老人

#issue 111538 MySQL 8.0 instant add/drop column 性能回退问题

ba0tiao

MySQL InnoDB

金融行业核心系统最佳搭档|如何基于PolarDB分布式版打造两地三中心架构?

阿里云瑶池数据库

金融行业 阿里云; 阿里云瑶池数据库

【Web安全】DVWA漏洞靶场搭建流程(win系统下)

Geek_Angel

网络安全 WEB安全 DVWA 实验靶场

5G和云渲染将如何快速推进XR和元宇宙?

3DCAT实时渲染

云渲染 元宇宙解决方案

一款双极锁存型霍尔位置传感器

芯动大师

华为终于开奖了,结果有点可笑

Jackpop

开源时代:极狐GitLab如何保证软件供应链安全

极狐GitLab

从一份IDC行业报告,解开智慧园区的“达·芬奇密码”

脑极体

AI 数字园区

软件测试/测试开发|测试用例设计方法——等价类划分

霍格沃兹测试开发学社

宏 | AI工程化部署

AIWeker

c AI AI工程化部署

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