返回顶部
首页 > 资讯 > 前端开发 > html >分析为什么会弃用jQuery
  • 500
分享到

分析为什么会弃用jQuery

2024-04-02 19:04:59 500人浏览 薄情痞子
摘要

这篇文章主要介绍“分析为什么会弃用Jquery”,在日常操作中,相信很多人在分析为什么会弃用jQuery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析为什么会弃用jQue

这篇文章主要介绍“分析为什么会弃用Jquery”,在日常操作中,相信很多人在分析为什么会弃用jQuery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析为什么会弃用jQuery”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

早期,jQuery 对我们意义重大

GitHub.com 在 2007 年底开始使用 jQuery 1.2.1,那是谷歌发布 Chrome 浏览器的前一年。当时还没有通过 CSS 选择器来查询 DOM 元素的标准方法,也没有动态渲染元素的样式的标准方法,而 Internet Explorer 的 XMLHttpRequest 接口与其他很多 api 一样,在浏览器之间存在不一致性问题。

jQuery 让 DOM 操作、创建动画和“ajax”请求变得相当简单,基本上,它让 WEB 开发人员能够创建更加现代化的动态 Web 体验。最重要的是,使用 jQuery 为一个浏览器开发的代码也适用于其他浏览器。在 gitHub 的早期阶段,jQuery 让小型的开发团队能够快速进行原型设计并开发出新功能,而无需专门针对每个 Web 浏览器调整代码。

基于 jQuery 简单的接口所构建的扩展库也成为  GitHub.com  前端的基础构建块:pjax( https://github.com/defunkt/jquery-pjax )和 facebox( https://github.com/defunkt/facebox )。

我们将永远不会忘记 John Resig 和 jQuery 贡献者创建和维护的这样一个有用的基本库。


后来的 Web 标准

多年来,GitHub 成长为一家拥有数百名工程师的公司,并逐渐成立了一个专门的团队,负责 javascript 代码的规模和质量。我们一直在排除技术债务,有时技术债务会随着依赖项的增多而增长,这些依赖项在一开始会为我们带来一定的价值,但这些价值也随着时间的推移而下降。

我们可以将 jQuery 与现代浏览器支持的 Web 标准的快速演化进行比较:

  • [ ] $(selector) 模式可以使用 querySelectorAll() 来替换;

  • [ ] 现在可以使用 Element.classList 来实现 CSS 类名切换;

  • [ ] CSS 现在支持在样式表中而不是在 JavaScript 中定义可视动画;

  • [ ] 现在可以使用 Fetch Standard 执行 $.ajax 请求;

  • [ ] addEventListener() 接口已经足够稳定,可以跨平台使用;

  • [ ] 我们可以使用轻量级的库来封装事件委托模式;

  • [ ] 随着 JavaScript 语言的发展,jQuery 提供的一些语法糖已经变得多余。

另外,链式语法不能满足我们想要的编写代码的方式。例如:

$('.js-widget')
  .addClass('is-loading')
  .show()

这种语法写起来很简单,但是根据我们的标准,它并不能很好地传达我们的意图。作者是否期望在当前页面上有一个或多个 js-widget 元素?另外,如果我们更新页面标记并意外遗漏了 js-widget 类名,浏览器是否会抛出异常会告诉我们出了什么问题?默认情况下,当没有任何内容与选择器匹配时,jQuery 会跳过整个表达式,但对我们来说,这是一个 bug。

最后,我们开始使用 Flow 来注解类型,以便在构建时执行静态类型检查,并且我们发现,链式语法不适合做静态分析,因为几乎所有 jQuery 方法返回的结果都是相同的类型。我们当时之所以选择 Flow,是因为 @flow weak 模式等功能可以让我们逐步将类型应用于无类型的代码库上。

总而言之,移除 jQuery 意味着我们可以更多地依赖 Web 标准,让 MDN Web 文档成为前端开发人员事实上的默认文档,在将来可以维护更具弹性的代码,并且可以将 30KB 的依赖从我们的捆绑包中移除,加快页面的加载速度和 JavaScript 的执行速度。

逐步解耦

虽然定下了最终目标,但我们也知道,分配所有资源一次性移除 jQuery 是不可行的。这种匆匆忙忙的做法可能会导致网站功能出现回归。相反,我们采取了以下的策略:

  1. 设定指标,跟踪整一行代码调用 jQuery 的比率,并监控指标走势随时间变化的情况,确保它保持不变或下降,而不是上升。

分析为什么会弃用jQuery

  1. 我们不鼓励在任何新代码中导入 jQuery。为了方便自动化,我们创建了 eslint-plugin-jquery( https://github.com/dgraham/eslint-plugin-jquery ),如果有人试图使用 jQuery 功能,例如 $.ajax,CI 检查将会失败。

  2. 旧代码中存在大量违反 eslint 规则的情况,我们在代码注释中使用特定的 eslint-disable 规则进行了注解。看到这些代码的读者,他们都该知道,这些代码不符合我们当前的编码实践。

  3. 我们创建了一个拉请求机器人,当有人试图添加新的 eslint-disable 规则时,会对拉取请求留下评论。这样我们就可以尽早参与代码评审,并提出替代方案。

  4. 很多旧代码使用了 pjax 和 facebox 插件,所以我们在保持它们的接口几乎不变的同时,在内部使用 JS 重新实现它们的逻辑。静态类型检查有助于提升我们进行重构的信心。

  5. 很多旧代码与 rails-behavior 发生交互,我们的 Ruby on Rails 适配器几乎是“不显眼的”JS,它们将 AJAX 生命周期处理器附加到某些表单上:

// 旧方法
  $(document).on('ajaxSuccess', 'fORM.js-widget', function(event, xhr, settings, data) {
    // 将响应数据插入到 DOM 中
  })
  1. 我们选择触发假的 ajax* 生命周期事件,并保持这些表单像以前一样异步提交内容,而不是立即重写所有调用,只是会在内部使用 fetch()。

  2. 我们自己维护了 jQuery 的一个版本,每当发现我们不再需要 jQuery 的某个模块的时候,就会将它从自定义版本中删除,并发布更轻量的版本。例如,在移除了 jQuery 的 CSS 伪选择器之后(如:visible 或:checkbox)我们就可以移除 Sizzle 模块了,当所有的 $.ajax 调用都被 fetch() 替换时,就可以移除 AJAX 模块。

这样做有两个目的:加快 JavaScript 执行速度,同时确保不会有新代码试图使用已移除的功能。

  1. 我们根据网站的分析结果尽快放弃对旧版本 Internet Explorer 的支持。每当某个 IE 版本的使用率低于某个阈值时,我们就会停止向它提供 JavaScript 支持,并专注支持更现代的浏览器。尽早放弃对 IE 8 和 IE 9 的支持对于我们来说意味着可以采用很多原生的浏览器功能,否则的话有些功能很难通过 polyfill 来实现。

  2. 作为 GitHub.com 前端功能开发新方法的一部分,我们专注于尽可能多地使用常规 html,并且逐步添加 JavaScript 行为作为渐进式增强。因此,那些使用 JS 增强的 Web 表单和其他 UI 元素通常也可以在禁用 JavaScript 的浏览器上正常运行。在某些情况下,我们可以完全删除某些遗留的代码,而不需要使用 JS 重写它们。

经过多年的努力,我们逐渐减少对 jQuery 的依赖,直到没有一行代码引用它为止。

自定义元素

近年来一直在炒作一项新技术,即自定义元素——浏览器原生的组件库,这意味着用户无需下载、解析和编译额外的字节。

从 2014 年开始,我们已经基于 v0 规范创建了一些自定义元素。然而,由于标准仍然在不断变化,我们并没有投入太多精力。直到 2017 年,Web Components v1 规范发布,并且 Chrome 和 Safari 实现了这一规范,我们才开始更广泛地采用自定义元素。

在移除 jQuery 期间,我们也在寻找用于提取自定义元素的模式。例如,我们将用于显示模态对话框的 facebox 转换为<details-dialog>元素( https://github.com/github/details-dialog-element )。

我们的渐进式增强理念也延伸到了自定义元素上。这意味着我们将尽可能多地保留标记内容,然后再标记上添加行为。例如,<local-time>默认显示原始时间戳,它被升级成可以将时间转换为本地时区,而对于<details-dialog>,当它被嵌在 <details>元素中时,可以在不使用 JavaScript 的情况下具备交互性,它被升级成具有辅助增强功能。

以下是实现<local-time>自定义元素的示例:

// local-time 根据用户的当前时区显示时间。
//
// 例如:
//   <local-time datetime="2018-09-06T08:22:49Z">Sep 6, 2018</local-time>
//
class LocalTimeElement extends HTMLElement {
  static get observedAttributes() {
    return ['datetime']
  }
  attributeChangedCallback(attrName, oldValue, newValue) {
    if (attrName === 'datetime') {
      const date = new Date(newValue)
      this.textContent = date.toLocaleString()
    }
  }
}
if (!window.customElements.get('local-time')) {
  window.LocalTimeElement = LocalTimeElement
  window.customElements.define('local-time', LocalTimeElement)

我们很期待 Web 组件的 Shadow DOM。Shadow DOM 的强大功能为 Web 带来了很多可能性,但也让 polyfill 变得更加困难。因为使用 polyfill 会导致性能损失,因此在生产环境中使用它们是不可行的。

到此,关于“分析为什么会弃用jQuery”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 分析为什么会弃用jQuery

本文链接: https://lsjlt.com/news/85643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分析为什么会弃用jQuery
    这篇文章主要介绍“分析为什么会弃用jQuery”,在日常操作中,相信很多人在分析为什么会弃用jQuery问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析为什么会弃用jQue...
    99+
    2024-04-02
  • 为什么放弃使用Lombok
    这篇文章主要介绍“为什么放弃使用Lombok”,在日常操作中,相信很多人在为什么放弃使用Lombok问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么放弃使用Lombok”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-16
  • 为什么现在还使用jQuery?理由分析
    以上就是为什么现在还使用jQuery?理由分析的详细内容,更多请关注编程网其它相关文章!...
    99+
    2023-05-14
    jquery javascript Vue React 前端
  • 分析Pythonlist操作为什么会错误
    目录1、前言2、解决方案3、总结 1、前言 这几天都是在用python搞数据分析,在很多方面python有着比Matlab更大的优势。 正是因为python是一个免费、开源的平台,在...
    99+
    2024-04-02
  • 谷歌是否会放弃Golang?分析与探讨
    在过去的几年中,谷歌一直在积极地推广和使用Go(简称为Golang),这是一种由谷歌开发的开源编程语言。Go语言在谷歌内部得到了广泛应用,被用于构建各种规模的项目,如谷歌的基础设施,云...
    99+
    2024-03-06
    谷歌 golang 放弃 go语言
  • 为什么某些HTML元素被弃用
    这期内容当中小编将会给大家带来有关为什么某些HTML元素被弃用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。互联网已经存在了很长时间,并且随着时间的流逝,我们已经改变了对...
    99+
    2024-04-02
  • 为什么放弃用Spring Boot中的RestTemplate
    这篇文章主要讲解了“为什么放弃用Spring Boot中的RestTemplate”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么放弃用Spring Boot中的RestTemplate...
    99+
    2023-06-16
  • 为什么弃用GNOME 3 Linus Torvalds改用Xfce
    为什么弃用GNOME 3 Linus Torvalds改用Xfce,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。许多人都不喜欢变化太大的GNOME 3桌面,现在...
    99+
    2023-06-16
  • 为什么放弃使用Kotlin中的协程
    这篇文章主要讲解了“为什么放弃使用Kotlin中的协程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么放弃使用Kotlin中的协程”吧!调试请看下面一段...
    99+
    2024-04-02
  • 为什么有人选择放弃使用Golang?
    为什么有人选择放弃使用Golang? 近年来,随着计算机科学领域的不断发展,越来越多的编程语言被开发出来,其中Golang作为一门具有高效性能和并发特性的编程语言,在一定范围内受到了广...
    99+
    2024-03-01
    生态系统 性能问题 学习曲线
  • 为什么红帽为了CentOS Stream 而抛弃 CentOS
    本篇文章为大家展示了为什么红帽为了CentOS Stream 而抛弃 CentOS,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。不,这不是 IBM 在发号施令。这个决定是红帽内部出于商业上的原因做出...
    99+
    2023-06-15
  • 我为什么放弃MySQL?选择了MongoDB
    最近有个项目的功能模块,为了处理方便,需要操作集合类型的数据以及其他原因。考虑再三最终决定放弃使用MySQL,而选择MongoDB。两个数据库,大家应该都不陌生。他们最大的区别就是MySQL为关系型数据库,...
    99+
    2024-04-02
  • 为什么MySQL分页用limit会越来越慢
    目录一、测试实验二、 对limit分页问题的性能优化方法2.1 利用表的覆盖索引来加速分页查询2.2 利用 id>=的形式:2.3 利用join总结:阿牛新入职了一家新公司,第...
    99+
    2024-04-02
  • 为什么称jquery为框架
    jQuery是一款著名的JavaScript库,常常被称为“框架”。这个称呼是有一定的合理性和历史渊源的。首先,jQuery的功能十分强大、复杂,能够轻松实现诸如选择元素、修改样式、处理事件、发送异步请求、动态创建HTML元素等一系列常用的...
    99+
    2023-05-23
  • jquery为什么流行
    这篇文章主要介绍“jquery为什么流行”,在日常操作中,相信很多人在jquery为什么流行问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jquery为什么流行”的疑惑有所帮...
    99+
    2024-04-02
  • Web会话安全分析工具ProxyStrike有什么用
    这篇文章给大家分享的是有关Web会话安全分析工具ProxyStrike有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Web会话安全分析工具ProxyStrike在Web应用中,客户端发出一次请求,服务器响...
    99+
    2023-06-04
  • 为什么要用Python进行数据分析
    这篇“为什么要用Python进行数据分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“为什么要用Python进行数据分析”文...
    99+
    2023-06-27
  • 为什么go和rust语言都舍弃了继承
    一、继承 1、什么是继承 继承是一种面向对象编程的重要特性,它可以让子类继承父类的属性和方法,并在此基础上进行扩展。 2、继承的问题 继承层次复杂:当类之间存在多层继承关系时,会形成复杂的继承层次,难以维护和理解。 ...
    99+
    2023-10-29
    语言 rust
  • mysql为什么会锁表
    mysql为什么会锁表?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql为什么会锁表1.保证数据的正确性,了防止由于数据...
    99+
    2024-04-02
  • cdn为什么会异常
    cdn会异常的原因:如果CDN服务商的硬件投入不够,那么就会出现不稳定情况,甚至影响索引量数据,因此选择有实力的CDN服务商很重要。缓存机制在网站出现死链、无法打开、被黑等情况时会异常。并且会在短时间内产生了一些不利快照影响排名。因此需及时...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作