写点什么

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

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

关注

评论

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

AI 训练加速原理解析与工程实践分享

百度Geek说

人工智能 机器学习 12 月 PK 榜

【观察】融云百幄:为政企数智办公按下“快进键”

融云 RongCloud

融云 数智化 政企 百幄

融云任杰:激活组织生命力 让听见炮火的人做决策 | TGO专访

融云 RongCloud

专访 程序员‘

多年缓慢成长,近3年野蛮狂飙,谁是这个赛道的王者?

ToB行业头条

【从零开始学爬虫】采集全国高校导师数据

前嗅大数据

数据采集 爬虫教程 爬虫入门

启科量子或将开源环境部署工具Runtime

启科量子开发者官方号

#开源 #量子计算

代码质量与安全 | 如何将清洁代码标准扩展到整个企业,促进业务上的成功?

龙智—DevSecOps解决方案

代码质量 代码安全

小游戏开发投放平台及分成政策盘点

Onegun

小游戏 小游戏开发

Docker daemon configuration overview(Docker 守护进程配置概览)

独钓寒江

还原火山引擎A/B测试产品——DataTester 私有化部署实践经验

字节跳动数据平台

大数据 AB testing实战 12 月 PK 榜

小程序游戏的3大分发平台

FinFish

小程序 小游戏 小游戏运营

SpringMVC还是Spring WebFlux?谁是下一代的Java程序员技术栈?

程序员小毕

Java spring 程序员 后端 springmvc

MySQL分库分表,可能真的要退出历史舞台了!

Java永远的神

MySQL 程序员 后端 架构师 分布分表

版本控制 | SVN,Git与Helix Core,谁的数据管理基础设施更安全?

龙智—DevSecOps解决方案

git svn 版本控制 版本控制系统

研讨会回顾 | 自动化测试“领导者”SmartBear解析软件质量与测试现状调研

龙智—DevSecOps解决方案

软件测试 自动化测试 测试自动化

软件测试面试真题 | 什么是 Redis ? Redis缓存应用场景有哪些?

测试人

redis 软件测试 自动化测试 测试开发

模块四课后作业 - 设计千万级学生管理系统的考试试卷存储方案

闲人Eric

架构实战营

语音生成领域模型又填一名猛将

felix

深度学习 语音合成 TTS

使用无代码构建客户门户

间隔

32篇年度最佳AI论文;Python编译器Codon开源;ChatGPT的前世今生

OneFlow

人工智能 深度学习 大模型

基于Seata探寻分布式事务的实现方案

京东科技开发者

大数据 分布式事务 微服务架构 关系型数据库 seata

当云原生网关遇上图数据库,NebulaGraph 的 APISIX 最佳实践

NebulaGraph

图数据库 API网关

PHP转Go之后,我又开始研究机器学习和自动驾驶了。

王中阳Go

自动驾驶 Apollo

内网穿透你真的了解吗?

C++后台开发

网络安全 NAT Linux服务器开发 内网 网络穿透

ins快拍下载保存到手机相册最新图文教学!

frank

ins图片下载 ins

案例丨多元业态管理服务厂商如何走通数字化转型之路

优秀

数字化转型 数字化管理

华为云桌面,让企业随时随地开启云上办公

爱尚科技

【经验】硬件工程师与PCB槽孔斗智斗勇的故事

华秋PCB

工具 PCB PCB设计 槽孔

华为云桌面,助力企业数字化转型

爱尚科技

华为云桌面解决方案,打造安全高效办公新体验

科技怪授

云桌面

5分钟搞懂Jenkins分布式架构

俞凡

架构 DevOps cicd 最佳实践

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