提高Javascript性能最经济的方法(通过取代jQuery)
好吧,除了买一台机器来提高性能 我有一个Javascript/AJAX驱动的web应用程序,它是利用jQuery编写的,目的是加快初始开发时间。我发现从性能的角度来看,我已经准备好开始逐段替换以提高代码效率 一个例子 我不再在活动区域中使用提高Javascript性能最经济的方法(通过取代jQuery),javascript,jquery,performance,refactoring,Javascript,Jquery,Performance,Refactoring,好吧,除了买一台机器来提高性能 我有一个Javascript/AJAX驱动的web应用程序,它是利用jQuery编写的,目的是加快初始开发时间。我发现从性能的角度来看,我已经准备好开始逐段替换以提高代码效率 一个例子 我不再在活动区域中使用$(选择器).text(),而是使用getElementById(id).innerHTML 我有点不知所措,不知下一步该怎么做才能最大限度地发挥我的作用,使用jQuery会导致性能下降(超出加载时间)?任何jQuery自定义选择器,即不是浏览器固有的东西,
$(选择器).text()
,而是使用getElementById(id).innerHTML
我有点不知所措,不知下一步该怎么做才能最大限度地发挥我的作用,使用jQuery会导致性能下降(超出加载时间)?任何jQuery自定义选择器,即不是浏览器固有的东西,都会慢几个数量级。这样做
$('.sharedclass').find('crappyselector');
将加快长时间搜索
此外,如果您在循环(即表)中执行插入操作,请先构建一个字符串,然后一次全部插入
这是我遇到的两个大问题
此外,配置文件。修复一些没有问题的东西是没有意义的。任何jquery自定义选择器,即不是浏览器固有的东西,都会慢几个数量级。这样做
$('.sharedclass').find('crappyselector');
将加快长时间搜索
此外,如果您在循环(即表)中执行插入操作,请先构建一个字符串,然后一次全部插入
这是我遇到的两个大问题
此外,配置文件。修复一些没有问题的东西是没有意义的。
这些是我在使用jQuery时始终牢记的关键领域。
$。每个
循环,其中循环特别大。如果很小,差别可以忽略不计,但是传统JavaScript for循环的性能要好得多,特别是在处理大量数据时
此外,这并不是你特别想要的,而是在使用事件时重新访问所有选择器,特别是对于IE,它不支持“getElementsByClassName
”(许多其他浏览器都支持),并且在可能的情况下,在事件连接中使用的任何类名前加上ID。我发现这提高了IE的性能,特别是当与删除无上下文的伪选择器(如$(“:input”)
e、 g
变成
$("#id").delegate(".etc", "click", function() { });
$。每个
循环,其中循环特别大。如果很小,差别可以忽略不计,但是传统JavaScript for循环的性能要好得多,特别是在处理大量数据时
此外,这并不是你特别想要的,而是在使用事件时重新访问所有选择器,特别是对于IE,它不支持“getElementsByClassName
”(许多其他浏览器都支持),并且在可能的情况下,在事件连接中使用的任何类名前加上ID。我发现这提高了IE的性能,特别是当与删除无上下文的伪选择器(如$(“:input”)
e、 g
变成
$("#id").delegate(".etc", "click", function() { });
根据其他人的回答,我想我会在一个经常引用的答案上投入自己的两分钱。注意浏览器在选择器性能上的差异!你认为可能总是最快的并不总是真的
最安全的选择器当然是代码> $'('yf'fo'),但是考虑以下内容:
$('.bar')
比$(''foo.bar')
和$(''foo')快。在本机支持getElementsByClassName()
的浏览器中查找('.bar')
。事实上,速度要快得多(FF和基本上除IE以外的所有浏览器的速度都是FF的两倍多)
有关证据,请参见
你也许可以做一些特定于浏览器的选择器优化。根据其他人的答案,我想我会在一个经常引用的答案上投入自己的两分钱。注意浏览器在选择器性能上的差异!你认为可能总是最快的并不总是真的
最安全的选择器当然是代码> $'('yf'fo'),但是考虑以下内容:
$('.bar')
比$(''foo.bar')
和$(''foo')快。在本机支持getElementsByClassName()
的浏览器中查找('.bar')
。事实上,速度要快得多(FF和基本上除IE以外的所有浏览器的速度都是FF的两倍多)
有关证据,请参见
您可能可以执行一些特定于浏览器的选择器优化。尝试其他框架。请参见DOJO获胜的比较:
我喜欢上面给出的所有提示,并发现Jose Vega的工作很好。尝试其他框架。请参见DOJO获胜的比较:
我喜欢上面给出的所有指针,并发现Jose Vega的工作很好。还请注意,
$('div.sharedclass').find('whatever')
(或者,如果不是“div”,则是适当的标记)可能比仅仅一个类名要好。正如insert all一次将子树放在一个片段中所述,@Pointy中的ressing并不总是这样!看到我的答案了吗