BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

不需要更多JS框架了

| 作者 谢丽 关注 11 他的粉丝 发布于 2014年12月29日. 估计阅读时间: 5 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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

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

Joe认为,在过去的十年中,浏览器变得更好了,它们对标准的支持也得到了改善,每个版本的功能都比上一个版本强大,而且还支持一些新标准,如HTML ImportsObject.observePromisesHTML 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的<x-foo>和Polymer的<core-bar>。关于如何获取这些自定义元素,感兴趣的读者可以查看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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

毫无违和感…… by 张 鑫

一早已经这样……

过于理想了吧 by jianfeng xiong

文中提到的web组件现在几乎每个框架都有了,所以这样的想法只是又多了一个“js框架”,并且设想该“框架”能够一统江湖,未免过于理想了吧。
1、以前老系统怎么办?
2、浏览器对新“框架”支持如何?
3、新“框架”不是银弹,不可能解决所有领域的问题(需求)。

Re: 过于理想了吧 by ma jianxiong

赞同你的说法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT