作者 | Theodoros ‘Theo’ Karasavvas,Ryan Donovan
译者 | 弯月
出品 | CSDN(ID:CSDNnews)

每当 JavaScript 发布重大更新,我们都会重复相同的经历。最开始的时候,开发人员会因为新功能的发布而感到高兴。他们会直接使用 JavaScript 编写代码,框架的流行度会下降。接着,在较长一段时间内都没有新的发布时,框架就会提供各种新功能,从而吸引开发人员。然后,再次重复这个过程。

此次的 ES6 据说是 JavaScript 最大的一次变化,所以我们又开始了新一轮的循环。当 ES6 刚发布的时候,框架的流行度下降了,而JavaScript 则变得更强大。但是,我想提出一个更大胆的预测:随着开发人员越来越熟悉 ES6 的功能,最终我们将打破这个循环。将来 JavaScript 开发人员不会再使用任何框架。

我知道很多人对此表示怀疑,但请听我说完。我并不是说 JavaScript 的使用会变窄,事实上,如今很多公司都在招聘 JavaScript开发人员。相反,我认为 ES6 的两个关键特性(特别是模块和类)会淘汰掉许多流行的框架。换句话说,JavaScript 框架都会逐渐消亡,就像当年的 Flash 一样:主要原因还是因为没有需求了,而且其固有的安全漏洞导致使用非常危险。
请先不要着急为你喜欢的框架辩驳,让我来解释一下为什么我认为会发生这种转变。

JavaScript框架的问题

JavaScript框架是面向开发人员的一种工具,抽象出了前端应用程序开发的一些复杂性。虽然毫无疑问这些框架非常实用,但 JavaScript 的 Web 组件规范的进步使得即使不使用框架也可以轻松地开发新的前端应用程序(例如单页应用程序)。那么,问题就来了,使用这些框架还有必要吗?

让我们来看看当今最流行的 JavaScript 框架,反思一下它们的不足之处。其实,这种例子比比皆是,因为如今的大多数框架都存在许多根本性的缺陷。

大多数使用 JavaScript 框架的人(我也是其中一位)可能并没有注意到这些缺陷,因为我们已经习惯了。这就像是与魔鬼的交易:抽象为我们带来了开发的便利性,但没有重视它们带来的混乱。然而,事实在于我们使用的大多数框架都非常臃肿,它们管理着 JavaScript 本身并不支持的复杂流程,而且提供的捷径只会让调试变得更困难。

除了这些之外,还有一个更重要的问题:关于 JavaScript 框架的构成,我们并没有一个良好的定义。这就导致我们陷入了一种有点荒谬的境地,比如最流行的 JavaScript “框架”之一React 实际上根本不是真正的框架。它只不过是开发人员构建的一个高度专业化的 JavaScript 库。

当前所有流行的框架都存在这些问题。但也有许多具体的问题只影响了个别框架。下面,我们就来快速地浏览一下。

AngularJS与 Angular

说起 JavaScript 框架中存在的问题,就不得不提 AngularJS,虽然这个框架会过时,但人们不一定会停止使用。许多开发人员仍然会告诉你 AngularJS 是编写 JavaScript 代码的“最佳”方式,尽管该框架已被弃用,而且不花几年的时间认真研究就很难掌握。

第二个问题是,AngularJS 的代码几乎无法理解,而且 Angular 2 也继承了这个问题。虽然有些人认为这是后端开发人员收入更高的原因,但实际上会导致开发人员的负担加重。举个例子,Angular 2 包含区分大小写的 HTML 实例,这不仅违反了 HTML 本身的原则,而且迫使许多人不得不实现解析器,只为了清理 Angular 2 生成的 HTML。

React
React是另一款非常流行的 JavaScript “框架”,该库也面临着一系列不同的问题。回想起来,似乎 React 的发展正是为了应对 Angular 的晦涩难懂。React 向用户承诺该库简单易用。

虽然从某种程度上来说,React 确实做到了,然而问题在于 React 并不是一个真正的集成框架,它只不过是一组模块和组件,且无法很好地协同工作。虽然你可以利用 React 实现复杂的功能,比如实现浏览器指纹识别,但这也意味着你构建了一个非常复杂的组件栈,而且必须持续维护和管理这些组件。

有人可能会指出在 Redux 和 Flux 等系统的帮助下,就连初学者也可以使用复杂的 React 技术栈。但我认为,如果你需要通过框架来编写 JavaScript 代码,那么表示你真的有麻烦了。话虽如此,但 React 并不是真正的框架,因此这样的比较不公平。

Ember、Vue 以及Aurelia

最后,简要介绍一些鲜为人知且使用较少的框架。相信大多数开发人员都没有过多地接触过这三个框架,原因很简单,这些框架的应用非常小众,并没有得到广泛的使用。

这三个框架中的每一个都有自己的特质,但是主要问题还在于应用非常小众。这些框架都没有达到与更广泛的 JavaScript 社区建立关系所需的市场份额(尽管根据 StackOverflow 的统计,Vue 目前的受欢迎程度直逼jQuery)。因此,喜欢这些框架的开发人员往往需要在讨论的时候多费口舌。

这里还需要快速说明一下为什么这些框架都没有流行起来,尤其是从许多方面来看它们都是“功能齐全”的系统。例如,Ember 可能是三者之中“最像框架”的框架,但它也存在一系列的问题,比如性能、下载量最大、API 占用空间最大,而且学习曲线也最为陡峭。

仔细想一想,你会发现一个很奇怪的现象:许多开发人员认为我们需要一个框架来编写 JavaScript 代码,但是当真的有一个完整的框架时,我们却更喜欢使用像React 这样的临时解决方案。鉴于此,也许我们应该重新评估我们是否真的需要框架。

ES6的前景

上述便是 ES6 发布的背景。ES6(也称为ECMAScript2015)是 JavaScript 的最新版本。它改变了我们使用 JavaScript 的一些基本方式,并引入了多年来社区一直在呼吁的许多新功能。

虽然你可能觉得 ES6 的发布会导致各种 JavaScript 框架被淘汰的说法很荒谬,因为 ES6 中所做的更改只不过是语法上的调整,但是我觉得重点不仅限于语法上的变化。

这是因为框架提供的大部分“额外功能”都出自同一个目的:通过改变语法,为 JavaScript 提供一些捷径。我们已经非常熟悉其中一些语法捷径,以至于我们将它们视为单独的功能,但其实它们只不过是对 JavaScript 现有做法的自动化而已。

我并不是想低估句法创新的作用。事实上,ES6 中的大部分新特性本质上都是语法快捷方式,其中包括:

  • 默认参数
  • 模板字面量
  • 多行字符串
  • 解构赋值
  • 增强的对象字面量
  • 箭头函数

但这些功能之所以会加速框架的淘汰,是因为在它们进入 JavaScript 核心之前,只有框架才支持。因此,这些功能的引入会减少对框架的需求。还有其他的一些功能(包括 promise 和块作用域)标准化了我们使用框架实现需求的方式。以前使用不同框架的开发人员如今可以相互交流了。

此外,ES6 的另外两个新特性则标志着框架的终结,或者至少会暂停 JavaScript 框架的发展。这两个新特性就是实现类和函数的新方式。

许多开发人员都将面向对象作为标准,因此多年来一直在 JavaScript 中实现对象。到目前为止,我们一直在使用框架和自己开发的解决方案,因为在 ES5 中类的使用非常痛苦。其实,我对这一点一直非常不解,因为很明显 ES5 支持类,关键字“CLASS”是保留字。

这引发了很多争论。每个人都会选择自己喜欢的框架来创建面向对象接口。除了作者本身之外,很难与其他人展开合作,而且也无法协同工作。

现在有了 ES6,我们终于有了处理类的标准化方式。ES6 类使用原型,而不是函数工厂方法,如果我们有一个类 baseModel,则可以定义一个构造函数和一个 getName() 方法。

模块

模块的情况也大致类似。事实上,当发现 ES5 默认为不支持原生模块时,很多开发人员都感到非常惊讶。只不过我们习惯了使用AMD、RequireJS、CommonJS 和其他工具实现的变通方法,以至于忘记了这些其实都不属于 JavaScript。

现在有了 ES6,我们就可以使用简单的 import 和 export 命令处理模块了。至少有人会在一些情况下采用这种方式,但也有人可能会再次将目光转向框架,因为 ES6 引入模块的方式真的很混乱。ES6 并没有采用 Node.js 处理模块的方式,但很多人都比较喜欢 Node.js 的处理方式。

总结

简而言之,ES6 为 JavaScript 带来了大量的语法变化,大大减少了我们对大多数框架的需求。再加上我们目前使用的大多数框架都导致 JavaScript 更为晦涩,而且还有额外的依赖项。因此,我认为在接下来几年中这些框架的使用将减少,乃至完全消失。

但也有可能 ES6 也只是一次历史重演,我们会再次使用框架,但在这之前我们还有几年的时间学习如何编写更好的 JavaScript。

参考链接:
https://stackoverflow.blog/2021/11/10/does-es6-make-javascript-frameworks-obsolete/

ES6 的发布,加速 JavaScript 框架淘汰?相关推荐

  1. Ember.js 1.0 RC6 发布,JavaScript 框架

    Ember.js 1.0 发布了第 6 个 RC 版本,下载地址:https://github.com/emberjs/ember.js/tree/v1.0.0-rc.6 该版本包含众多的改进记录,详 ...

  2. 一次性搞定JavaScript 从 ES6 到 ES12的基础框架知识

    Javascript 是前端三剑客技术最重要的技能之一.每个学习前端的人,这个JavaScript技术是必须要学的.随着技术不断更新迭代,所以现在有一些新的知识来支持我们去学习 ES6 ~ ES12. ...

  3. 有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取...

    点这里 阅读目录 用 AngularJS(以及其它 JavaScript 框架)开发的 Web 站点不支持爬虫的抓取 解决方案 为什么公开我们的解决方案 实现 AngularJS 服务 结论   Pr ...

  4. Vue -渐进式JavaScript框架

    介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的区别? Library 库,本质上是一些函 ...

  5. 为什么 Web 开发人员需要学习一个 JavaScript 框架?

    原文链接 可能当我们结束本文时,一个新的 Javascript 框架已经在某处启动了.但这确实不在我们的控制范围内.因此,我们应该简单地继续我们所拥有的.至少,由于免责声明,我们可以确定我们不是在发明 ...

  6. javascript框架库_2019年使用的最佳JavaScript框架,库和工具

    javascript框架库 似乎有比开发人员更多JavaScript框架,库和工具. 在2018年底, 在GitHub上的快速搜索显示230万个JavaScript项目. npm已成为全球最大的模块系 ...

  7. 【图解】最流行的7个JavaScript 框架各自的优点

    2019独角兽企业重金招聘Python工程师标准>>> AngularJ.js 由Google开发,2009年首次发布 很流行的前端框架 使用Angular.js创建第一个UI,成本 ...

  8. 一款优秀的JavaScript框架—AngularJS

    AngularJS简介 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.Angular ...

  9. 2015年最棒的10个 JavaScript 框架

    JavaScript是最流行的前端开发程序设计语言.它为WEB开发者提供了能够设计出具有丰富功能.干净用户界面的WEB应用的能力.JavaScript框架使得WEB应用的设计变的简单,并且它能够提供很 ...

最新文章

  1. 简单解决XP共享连接数10限制
  2. Python练习-基于socket的FTPServer
  3. Java8 PriorityQueue 源码阅读
  4. 阻止你变现的,从来都不是开源许可证
  5. python字符串创建_在Python上创建完整的字符串
  6. 私人博客定制----封装数据库接口
  7. 012-Java有几种文件拷贝方式?哪一种最高效?
  8. mysql中什么是空集合_mysql 中使用笛卡尔积 避免其中一方为空集时结果就是空集的方法...
  9. 视频文件转gif图片Movie To GIF使用
  10. supergo定位软件_super go定位修改下载
  11. mysql生成uuid_MySQL生成UUID
  12. Vue router 默认加载 views 文件夹下全部vue文件
  13. mysql 只读账号_MySQL, 创建一个只读用户和一个所有权限用户
  14. 感恩陪伴,链接未来 | Conflux杭州应用开发运营中心成立
  15. Java真的不难(二十五)Stream流
  16. 【深度学习】生成对抗网络GAN|GAN、WGAN、WGAN-UP、CGAN、CycleGAN、DCGAN
  17. 算法竞赛进阶指南0x12:Team Queue
  18. 一维码:EAN-13码的识别
  19. 攻防世界Encode
  20. VCRuntime静默安装

热门文章

  1. 使用Idea添加PYTHONPATH的一种方案
  2. linux基本命令与终端操作、linux命令英文全称解释、ls clear cd pwd cat touch cp rm rmdir mkdir mv file find grep sudo su
  3. 小技巧 ----- 位运算的一些结论与应用
  4. 敏捷开发中“可运行软件”的评审标准(兼谈敏捷开发中的迭代中期质量控制)...
  5. C# asp.net常见编译|运行错误
  6. 集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现...
  7. Microsoft强大团队(源代码)管理工具--TFS2010 与vs结合
  8. bootstrap table 服务器端分页例子
  9. QT中PRO文件写法的详细介绍,很有用,很重要!
  10. SDK窗口中增加菜单 以及 对菜单做出相应的消息响应