出于性能原因删除 jQuery 是合理的
Removing jQuery for performance reasons justified?
我正在做一个新项目,我们的工作是重写一个在移动设备上存在性能问题的电子商务网站。
我们正在基于更面向对象/模块化的架构重写javascript,我认为这很棒!然而,我的团队负责人说我们应该删除所有的jQuery调用,并替换为javascript,如domElem.querySelectorAll(query(,它具有更好的性能。我知道jQuery在后台进行某种缓存,这可能会产生内存问题。
我对此有点怀疑,首先是因为这似乎是"过早优化"的情况,也就是说,我们应该在重写任何东西之前先找到瓶颈。其次,我在互联网上没有发现任何说jQuery存在严重性能问题的内容。
当前网站确实有很多重叠的 dom 分支查询,我认为这会产生很多冗余。那就是发生了太多的查询,在我们的新架构方法中,我们将对象/模块限制为更少的 dom 查询和更有针对性的 dom 查询,这很棒。这确实需要重写。
但是无论我们是否使用 domElem.querySelector(query( 或 $(domElem(.find(query(,我都看不出有什么区别。我的想法对吗?
一些测试在这里完成(也检查其他修订版(。这里对使用 jquery 而不是 javascript 的利弊进行了很好的详细讨论。
还想指出的是,jquery不对选择器进行任何缓存。
由于一直使用Javascript框架,我们经常忘记的是jQuery不是一个框架。
显然,如果你使用 jQuery '$' 对象并使用直接 DOM 方法(如 getElementById(执行完全相同的单运算符操作,后者将明显更快,因为 jQuery 本身是用 Javascript 编写的,并且做了很多背景工作。
但是,作为开发人员,没有什么(代码可读性除外(阻止您将jQuery与纯Javascript结合使用:尽可能使用纯Javascript,并且仅使用提供复杂功能并需要一些时间从头开始编写和优化的jQuery函数。jQuery中有很多这样的功能:提供独立于浏览器的css,序列化对象以及做许多其他很酷的事情。
这取决于应用程序,但通常性能问题与设计不良的算法有关,而不是jQuery的使用。
无论如何,如果你的应用程序做了大量的DOM操作,那么使用普通的Javascript重写它并进行测试可能是值得的。保留库,只是不要将其用于无需它即可轻松编写的简单操作。
如果您的应用程序严重依赖具有复杂功能的 jQuery 函数,那么删除它是不可能的。
我自己使用这种组合方法:所有用Javascript编写的简单内容,带有jQuery函数,用于难以实现的东西。
此外,如果应用程序遇到性能问题,一个好地方是 DOM 操作。与Javascript中的几乎所有其他操作相比,这些操作非常繁重。您可以通过将多个操作合二为一,使用一个构造函数构建已完成的对象来减少时间,而不是创建空对象并逐个分配属性等。
抱歉,如果答案有点模糊,但在这种情况下,如果不查看代码并运行测试,就很难准确。
让我引用鲍勃叔叔关于这个讨论的话"架构是关于意图的,我们已经把它变成了关于框架和细节">
需要仔细考虑过早的优化。
- 它们通常会导致不容易还原的体系结构决策。 他们
- 引入了通常特定于他们解决的问题的代码优化,这使得代码不那么抽象,因此很难维护,并且更复杂,因此容易出现更多的错误。
- 它们往往是偏见而不是客观的,有时与其他替代方案没有任何真正的比较。
- 他们试图解决的问题往往被高估,甚至不存在。
我不是 Web 开发方面的专家,但如果可能的话,您应该始终通过关注点分离和良好的抽象来推动这种决策
。例如,在生成java脚本代码的部分,您可以抽象JavaScriptWriter,并使用不同的框架。这样,您就可以在开始时使用JQuery,测试系统,然后才更换您知道效率低下的部件。
- Jquery删除图像
- 使用jquery删除输入框上的外部处理程序/库
- jQuery 2.1 |删除重复子字符串的源子字符串
- Javascript/JQuery删除代码中的父TR问题
- 使用jQuery删除动态创建的元素上的mouseenter事件
- Jquery删除上面的br标记
- Jquery-删除单选按钮
- JQuery.删除DOM树中的上一个同级
- 使用jQuery删除部分URL
- 使用jquery删除href中的特定字符或标记
- 使用jquery删除包含的行
- 如何使用Jquery删除伪元素
- Jquery删除除粗体之外的所有内容
- jquery .删除整个 li 或 table 元素后
- 使用JQuery删除禁用的属性
- Javascript/Jquery删除和添加'onmouseover'setinterval上的事件
- 如何使用jQuery删除具有一定效果的css类
- 使用jquery删除td类
- 使用jQuery删除两个类
- 如何使用jquery删除元素