现在,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的观点,将来,开发人员不再需要学习最新的框架,只需要引入能够满足特定需求的自定义元素或库来构建他们的应用。

不需要更多JS框架了的更多相关文章

  1. JS框架

    s框架就是将常用的方法进行封装,方便调取使用.一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计.协作构件之间的依赖关系.责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方 ...

  2. js框架简明

    jquery 主要战场还是在dom这块.其它经典怀旧的2个需要了解一下,mootools, prototype.是他们启发了js向工程化,团队化,协作化发展的转变,yui虽然听说停止开发了,但他的代码 ...

  3. 8款JS框架比较

    Dojo     Dojo 是目前最为强大的JS框架,它在自己的 Wiki 上给自己下了一个定义,Dojo 是一个用 JavaScript 编写的开源的DHTML工具箱.Dojo 很想做一个“大一统” ...

  4. js 框架都有哪几种(转载)

    目前来看,js框架以及一些开发包和库类有如下几个,Dojo .Scriptaculous .Prototype .yui-ext .Jquery .Mochikit.mootools .moo.fxD ...

  5. 13 款惊艳的 Node.js 框架——第2部分

    [编者按]本文作者为 Peter Wayner,主要介绍13款至精至简的 Node.js 框架,帮助你简化高速网站.丰富 API 以及实时应用的开发流程.本文系国内 ITOM 管理平台 OneAPM ...

  6. 13 款惊艳的 Node.js 框架——第1部分

    [编者按]本文作者为 Peter Wayner,主要介绍13款至精至简的 Node.js 框架,帮助你简化高速网站.丰富 API 以及实时应用的开发流程.本文系国内 ITOM 管理平台 OneAPM ...

  7. 不要再使用JS框架了

    停止编写Javascript框架吧. Javascript框架就好像死亡和税收一样:终究不可避免它的存在.我确信如果我是那面墙上的一只苍蝇,每次有人开始一个新的网页项目时,第一个问题肯定是我们用的是哪 ...

  8. 【转】node.js框架比较

    我偶然间看到这篇文章,转这个文章并没有什么含义,仅仅是感觉总结的不错,对于新学node的友友们来说希望这篇文章为大家对 Node.js 后端框架选型带来一些帮助,学习不再迷茫,也是让我有个保存,以后参 ...

  9. 借鉴一些关于js框架的东西

    八款Js框架介绍及比较,Dojo .Scriptaculous .Prototype .yui-ext .Jquery .Mochikit.mootools .moo.fx,componentartu ...

随机推荐

  1. 【cs229-Lecture4】GLMS:选定指数分布族,如何用它来推导出GLM?

    在Lecture4中有3部分内容: Newton’s method        牛顿方法 Exceponential Family        指数分布族 Generalized Linear M ...

  2. css3整理--box-shadow

    box-shadow语法:(想法:用阴影来做边框,就不会出现动态改变边框宽度而产生的重排问题) 对象选择器{box-shadow:投影方式 X轴偏移量 Y轴偏移量 阴影模糊半径 阴影扩展半径 阴影颜色 ...

  3. Tomcat应用的部署记录

    1.先安装jdk,解压jdk-7u17-linux-x64.tar.gz至/opt目录.配置环境变量,在/etc/profile末加入如下内容. JAVA_HOME=/opt/jdk1..0_17 e ...

  4. 【BZOJ4036】[HAOI2015]按位或 FWT

    [BZOJ4036][HAOI2015]按位或 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or ...

  5. 使用COSBench工具对ceph s3接口进行压力测试

    一.COSBench安装 COSBench是Intel团队基于java开发,对云存储的测试工具,全称是Cloud object Storage Bench 吐槽下,貌似这套工具是intel上海团队开发 ...

  6. Mecanim高级主题:Mecanim Blend Tree应用、Blend Tree 选项、复合Blend Tree

    一.Blend Tree介绍及应用 一个游戏动画的基本任务就是将两个或多个相似的动作混合.也许最广为人知的例子就是依照任务行动的速度将行走和跑动动画混合起来了.另一个例子就是角色在跑动中向左或向右转身 ...

  7. Docker 安装Centos,Tomcat,Jdk等相关的自定义(Dockerfile)镜像

    一.安装Centos镜像 这里Centos 安装 国内daocloud网站提供的官方镜像 docker pull daocloud.io/library/centos:latest 利用docker  ...

  8. SpringBoot应用配置常用相关视图解析器

    目录 SpringBoot的自动装配装配了视图解析器了吗? SpringBoot使用JSP SpringBoot中使用Thymeleaf SpringBoot中使用Freemark SpringBoo ...

  9. Python之时间模块

    1,怎么打印时间戳 2,怎么打印日期 3,怎么把字符串转换成python认识的日期 把日期转换成字符串 字符串转换成日期格式 time.strptime("2017-5-16",& ...

  10. Docker 学习应用篇之二: Docker的介绍和安装

    之前说过Docker的好处,Docker可以集装箱化的部署应用程序.那么Docker是通过什么实现的呢.要理解Docker内部构建,需要先理解Docker的四种部件 1)images:镜像,docke ...