我正在开展一个新项目,我们的工作是重写一个在移动设备上遇到性能问题的电子商务网站。
我们正在重新编写基于面向对象/模块化架构的javascript,我认为这很棒!但是我的团队负责人表示我们应该删除所有 jQuery 调用并替换为javascript,如 domElem.querySelectorAll(query) ,哪个更好性能。我理解jQuery在后台进行某种缓存可能会造成内存问题。
我对此持怀疑态度,首先是因为它似乎是“过早优化”的情况,也就是说,我们应该在重新编写任何内容之前先找到瓶颈。其次,我没有在互联网上找到任何表明jQuery存在严重性能问题的东西。
当前网站确实有很多重叠的dom分支查询,我认为这会创建大量冗余。这就是有太多的查询发生,并且在我们新的架构方法上,我们将对象/模块限制为更少的dom查询和更有针对性的dom查询,这是很好的。 需要重写。
但无论我们是否使用 domElem.querySelector(查询)或 $(domElem).find(查询),我都看不到差异。我的想法是对的吗?
答案 0 :(得分:1)
答案 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,测试系统,然后替换您认为效率低下的部分。