发布于 2026-01-06 0 阅读
0

你确定需要 jQuery 吗?

你确定需要 jQuery 吗?

你使用了jQuery。

大家都这么做。

这是一个非常棒的库,它把我们从2000年代初期对JavaScript支持的集体绝望深渊中解救了出来。它是现代Web发展的重要基石。

但现在情况已经不同了。大多数浏览器对 JavaScript 的支持更加完善和统一。ES6 现在几乎已成为标配。浏览器会定期自动更新。

没错,jQuery 在您那台配备 16 核处理器、32GB 内存并连接着城域光纤 Wi-Fi 的顶级笔记本电脑上,下载、编译和运行都非常流畅。但对于您的许多用户来说,情况可能并非如此。页面加载速度慢对他们来说是个问题,对您来说也是如此,因为大多数移动用户都会放弃加载时间超过 3 秒的页面

问题是,你真的需要它吗?

因为大多数情况下,我们使用 jQuery 的用途是:

  • 根据 CSS 选择 DOM 节点
  • 向 HTML 元素添加或删除类
  • 向 HTML 元素添加或删除属性
  • 向 HTML 元素添加或删除内容
  • 通过 Ajax 调用获取一些新的 HTML 代码

你知道吗?你不需要 jQuery 就能做到这一点。

所以我将提供两种选择:

你只需要用到一点点 jQuery。

你正在制作一个宣传册式的网站,或者给一个不太动态的网站添加一些简单的交互功能。这不是一个应用程序,应用程序都是用框架开发的,我们都知道。这可能是你的作品集,你老板侄女放风筝的主页,或者是一个很酷但尚未发布的大型项目的简单着陆页+注册页面。那么,让我来给你展示一下:

DOM 操作

当你在做……的时候 改用这种方法
$('.someclass') document.querySelectorAll('.someclass')
$('.someclass')[0] document.querySelector('.someclass')
$element.remove() element.remove()
$element.prepend(otherElement) element.prepend(otherElement)
$element.before(otherElement) element.before(otherElement)
element.addClass('some') element.classList.add('some')
$element.removeClass('some') element.classList.remove('some')
$element.toggleClass('some') element.classList.toggle('some')
const parent = $element.parent() const parent = element.parentNode
const clone = $element.clone() const clone = element.cloneNode(true)

数组操作

当你在做……的时候 改用这种方法
$.isArray(a) Array.isArray(a)
$.inArray(item, arr) arr.indexOf(item) > -1
$.each(arr, (i, v) => {}) arr.forEach((value, index) => {})
$.map(arr, (v, i) => {}) arr.map((value, index) => {})
$.grep(arr, (v, i) => {}) arr.filter((value, index) => {})

如果你觉得这里缺少很多东西,但仍然想跳过 jQuery,可以看看LoDash(压缩后约 4kB)。

活动

当你在做……的时候 改用这种方法
$el.on('click', e => { }) el.addEventListener('click', e => { })

请注意,jQuery 允许您观察元素集合,但如果您使用 `observe() querySelectorAll` 方法,则需要观察结果中的每个元素,如下所示:

// https://stackoverflow.com/a/50101839/97635
document.
  querySelectorAll('.tracked').
  forEach(input => input.addEventListener('click', this.trackLink));
Enter fullscreen mode Exit fullscreen mode

Ajax 调用

XMLHttpRequest 比较复杂,我也不打算说服你放弃你常用的$.ajax({})调用方式,所以我们来聊聊Fetch。Fetch是 XMLHttpRequest 的一个现代替代品,但它不像我们之前提到的其他 API那样普及,所以值得一提的是,Fetch 有一个 polilly 版本,你可以只向相关的浏览器提供服务,让其他浏览器保持低流量状态。

fetch('/users.html')
  .then(function(response) {
    return response.text()
  }).then(function(body) {
    document.querySelector('#userlist').innerHTML = body
  })
Enter fullscreen mode Exit fullscreen mode

你使用了大部分jQuery

这可能是因为你已经拥有庞大的代码库,或者你觉得做事太安逸而不愿尝试不同的方法……

接下来我想向大家介绍Zepto.js。Zepto
(用他们自己的话说)是一个极简的 JavaScript 库,适用于现代浏览器,并且拥有与 jQuery 高度兼容的 API。如果您使用过 jQuery,那么您就已经知道如何使用 Zepto 了。

压缩后只有 9.6k,比你的 logo 小多了。去看看吧。

最后提醒一句:

如果你正在使用 jQuery,并且非常喜欢它,而且它通过速度极快的 CDN 提供服务,文件经过压缩和 gzip 处理(28.87 KB),那么或许值得你费尽心思去避免它。

如果你正在开发一个依赖于框架的、体积庞大的MVC单页应用程序(SPA),那么以上所有方法都不需要考虑。你应该专注于框架的最佳实践,并了解它的特性。

jQuery 很棒,我对它没有任何恶意。它已经成为Web 的默认底层架构,因为它确实有效。它如此成功以至于无处不在,唯一的问题就是我们不再质疑它。而你应该质疑一切。

和往常一样,我很乐意阅读您对此事的看法。您会统计字节数吗?您会查看谷歌分析数据来分析用户及其设备吗?

文章来源:https://dev.to/oinak/are-you-sure-you-need-jquery-ej8