写点什么

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

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

关注

评论

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

在 Spring 生态中玩转 RocketMQ

Apache RocketMQ

RocketMQ spring could

需求收集方法工具,以及进行需求分析的6大要素

易成管理学

Wallys//IPQ6010/IPQ6018/IPQ6000/industrial wifi6 router/DFS/M.2/ 2x2 2.4GHz/5GHz

wallysSK

IPQ6010 ipq6018 IPQ6000

1000道最新高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构!

程序知音

Java Java 面试 大厂面试 java架构 后端技术

深入浅出学习透析Nginx服务器的基本原理和配置指南「Https安全控制篇」

洛神灬殇

nginx https ssl 11月日更 SSL/TLS 协议

前端培训后的学习方法有哪些

小谷哥

边旅游边赚钱!数字游民离不开远程控制软件

RayLink远程工具

远程控制软件 远程办公软件 远控软件 RayLink 远程控制连接

唯一获奖容器厂商!灵雀云斩获2022信创“大比武”通信赛道大奖

York

容器 云原生 数字化转型 国产化 信创云

Serverless 的前世今生

阿里巴巴云原生

阿里云 Serverless 云原生

出海有“云”!华为云全球加速助力跨国企业提升网络体验

科技怪授

Doris Summit 2022 正式启航,演讲议题开启征集

SelectDB

开源 Doris 峰会 summit SelectDB

零基础转行前端培训学习好吗?

小谷哥

低代码平台中的“模型驱动”与“表单驱动”有何区别?

优秀

领域驱动模型DDD 中台架构 表单设计 低代码平台

前端培训入行35岁程序员有什么奔头

小谷哥

前端培训班学习真的靠谱吗?

小谷哥

高标准企业级安全性,华为云会议为线上沟通保驾护航

秃头也爱科技

开源|ftlog升级啦!功能更强,性能更高,细节更极致

非凸科技

cdr2023最新试用版下载CorelRAW2023

茶色酒

CorelRAW2023

从保险系统升级谈微服务架构的弊端

勇士

外包 微服务 系统架构 保险 运维开发

【Go】力扣 - 剑指 Offer 第五天 - 二维数组中的查找

陈明勇

Go 数据结构与算法 力扣 11月月更

7分钟带你细致解析4个Java算法必刷题

好程序员IT教育

Java

Unload data from Databend | 新手篇(4)

Databend

databend

Meetup预告:SeaTunnel在天翼云数据集成平台的探索实践

Apache SeaTunnel

大数据 技术分享 数据同步 数据集成 Apache SeaTunnel

“PKS+生态(智方舟)加速营”圆满结束,九科信息与中电智方舟达成战略合作

九科Ninetech

比ZeroTier更适合国内使用的异地组网方案,你还不知道?

科技热闻

真相了!GitHub不光能学代码,还有这些...

程序员小毕

GitHub 程序员 架构 面试 程序人生

大数据培训的就业前景怎么样

小谷哥

华为云智能云接入ICA,助力企业轻松上云

科技怪授

数字化转型,要把功夫炼到任督二脉

脑极体

Python3.10的开发环境的搭建

千锋IT教育

中国银河证券:缺少DevOps,企业数字化转型就是带着脚镣跳舞

嘉为蓝鲸

DevOps 数字化转型 金融 证券

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