出于性能原因删除jQuery是否合理?

时间:2015-12-09 08:55:46

标签: javascript jquery performance design-patterns

我正在开展一个新项目,我们的工作是重写一个在移动设备上遇到性能问题的电子商务网站。

我们正在重新编写基于面向对象/模块化架构的javascript,我认为这很棒!但是我的团队负责人表示我们应该删除所有 jQuery 调用并替换为javascript,如 domElem.querySelectorAll(query) ,哪个更好性能。我理解jQuery在后台进行某种缓存可能会造成内存问题。

我对此持怀疑态度,首先是因为它似乎是“过早优化”的情况,也就是说,我们应该在重新编写任何内容之前先找到瓶颈。其次,我没有在互联网上找到任何表明jQuery存在严重性能问题的东西。

当前网站确实有很多重叠的dom分支查询,我认为这会创建大量冗余。这就是有太多的查询发生,并且在我们新的架构方法上,我们将对象/模块限制为更少的dom查询和更有针对性的dom查询,这是很好的。 需要重写。

但无论我们是否使用 domElem.querySelector(查询) $(domElem).find(查询),我都看不到差异。我的想法是对的吗?

3 个答案:

答案 0 :(得分:1)

进行了一些测试here(另请参阅其他修订版)。关于在javascript上使用jquery的优点和缺点,进行了详细的讨论here

还想指出jquery doesn't do any caching of selectors

答案 1 :(得分:1)

我们经常忘记因为一直使用Javascript框架, jQuery不是框架。

显然,如果你使用jQuery' $'进行完全相同的单操作符操作。对象和使用像getElementById这样的直接DOM方法,后者将明显更快,因为jQuery本身是用Javascript编写的,并且做了很多背景知识。

但是,除了代码可读性之外,没有任何东西(作为开发人员)阻止你将jQuery与普通的Javascript结合起来:尽可能使用普通的Javascript,只使用提供复杂功能的jQuery函数,并花一些时间从头开始编写和优化。 jQuery中有很多这样的东西:提供与浏览器无关的css,序列化对象以及做很多其他很酷的东西。

这取决于应用程序,但通常性能问题与设计糟糕的算法有关,而不是使用jQuery。

在任何情况下,如果您的应用程序执行了大量的DOM操作,那么使用普通的Javascript和测试重新编写它可能是值得的。保留图书馆,不要将它用于简单的操作,没有它就可以轻松编写。

如果您的应用程序严重依赖具有复杂功能的jQuery函数,则删除它是不可能的。

我自己使用这种组合方法:所有简单的Javascript编写的jQuery函数都很难实现。

此外,如果应用程序遇到性能问题,那么挖掘周围的好地方就是DOM操作。与Javascript中的几乎所有其他操作相比,这些操作非常繁重。您可以通过将多个操作合并为一个操作来减少时间,使用一个构造函数构建完成的对象,而不是创建空的并逐个分配属性等。

很抱歉,如果答案有点模糊,但在这种情况下如果没有看到代码并运行测试则很难准确。

答案 2 :(得分:1)

让我引用鲍勃叔叔的讨论"Architecture is about intent, we have made it about frameworks and details"

需要仔细考虑过早优化。

  • 他们经常会导致不容易恢复的架构决策。
  • 他们引入了通常特定于他们解决的问题的代码优化,这使得代码不那么抽象,因此很难 维护,更复杂,因此容易出现更多错误。
  • 他们往往是偏见而不客观,有时与其他选择没有任何真正的比较。
  • 他们试图解决的问题往往被高估,以至于不存在的程度。

我不是Web开发方面的大专家,但如果可能的话,您应该始终通过分离关注点和良好的抽象来推动这种决策。

例如,对于生成java脚本代码的部分,您可以拥有JavaScriptWriter的抽象,并使用不同的框架。 通过这种方式,您可以在开始时使用JQuery,测试系统,然后替换您认为效率低下的部分。