最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

关注

评论

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

元宇宙参与指南——如何融入元宇宙建设?

CECBC

pycharm的安装

工程师日月

5月月更

【高并发】高并发环境下诡异的加锁问题(你加的锁未必安全)

冰河

并发编程 多线程 高并发 协程 异步编程

模块五:微博评论的高性能高可用框架

jiaoxn

如何让你的 WordPress 网站更安全

海拥(haiyong.site)

WordPress 5月月更

你肯定听说过requests,但你知道2022年有一个比 requests 还牛的爬虫库吗?

梦想橡皮擦

5月月更

增强现实(AR)技术在企业管理软件中的一个实际创新案例

Jerry Wang

AR SAP 虚拟现实 增强现实 5月月更

vue框架

恒山其若陋兮

5月月更

CMMI研究院刚刚推出两门新认证课程

高山

培训 CMMI 确保安全 确保安防

微博评论高性能高可用计算架构

Trent

高可用 架构设计 高性能 训练营

微博评论的高性能高可用计算架构

大眼喵

「架构实战营」

Go Web编程入门:路由

宇宙之一粟

Go Go web 5月月更

C语言_结构体总结

DS小龙哥

5月月更

使用 OData 实施 SAP 系统与第三方系统集成的步骤概述

Jerry Wang

系统集成 SAP OData 5月月更 第三方系统

数据库连接池 -Druid 源码学习(三)

wjchenge

Druid 数据库连接池

微博评论高性能高可用计算架构设计分析

锎心😌😌😌

架构实战营 - 模块五 - 作业

michael

架构实战营 #架构实战营 「架构实战营」

存在负权边,Bellman-Ford

工程师日月

算法 5月月更

Long与Arrays的使用注意

zarmnosaj

5月月更

设计模式之建造者模式

乌龟哥哥

5月月更

聊聊 Kafka:Kafka 消息重复的场景以及最佳实践

老周聊架构

kafka 5月月更

学生管理系统(1)简介

5月月更

微博系统中”微博评论“的高性能高可用计算架构

凯博无线

Docker下的OpenResty三部曲之二:细说开发

程序员欣宸

Docker 5月月更

【愚公系列】2022年05月 二十三种设计模式(十二)-代理模式(Proxy Pattern)

愚公搬代码

5月月更

druid 源码阅读 3——DataSource的结构(变量)

张大彪

Druid 连接池源码阅读 03

石小天

druid源码学习三-继续探究DruidDataSource类init方法

Nick

Apache Druid

自开发 Web 应用如何使用 SAP Customer Data Cloud 实现自定义登入功能

Jerry Wang

用户权限 第三方登录 SAP 登录验证 5月月更

下一站,智能世界:华为给全球轨道数字化带来全新加速度

脑极体

618大促100用户级秒杀系统架构设计

IT屠狗辈

架构实战营

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