在使用$element.ech()时加快DOM访问速度
speed up DOM access while using $element.each()
我正试图在我庞大的javascript UI应用程序中进行一些严重的延迟削减。我一直在阅读优化代码的方法,从我学到的一些东西中,我明白了:
- $(element).each()会使事情变慢
- 应缓存变量(和HTML对象)
这是我在应用程序中经常运行的函数中现有代码的一部分:
if($('.textbox').length > 0)
{ $(".textbox").each(function(){
var parts = $(this).attr('id').split('_');
// do some linear-time operations here with $this
});
});
到目前为止,我知道我应该把$this = $(this)
放在.each()
的开头,只使用$(this)
。但我还能做什么呢?有没有更快的替代方法来使用.each()?我确实需要用.textbox
类签出每个div
。
但我还能做什么呢?
几件事:
-
你的
if
语句绝对没有意义(除非它有一个你没有显示的else
子句),因为在一个空的jQuery对象上调用.each
是一个no-op。移除它。 -
如果不想删除它,至少要缓存DOM查找的结果,因为每次调用
$('.textbox')
jQuery都必须关闭并查询DOM。 -
id
是DOM元素实例上的反射属性,因此$(this).attr("id").split('_')
涉及多个函数调用和内存分配,您可以通过使用this.id.split('_')
来避免这些调用和分配。
这就给了我们:
$('.textbox').each(function() {
var parts = this.id.split('_');
// Do something with `parts`
});
或者,如果有一个你没有显示的else
:
var boxes = $('.textbox');
if (boxes.length) {
boxes.each(function() {
var part s= this.id.split('_');
// ...
});
}
else {
// ...
}
您正在使用jQuery,它在后面执行许多代码。最快的方法是原生Javascript。
一个真正的小优化是从CCD_ 15中得到CCD_ 14。您也可以使用这个(Native JS)jQuery将执行许多功能):
var parts = this.id.split('_');
例如
尽可能快地获取所有元素。您可以使用此函数按类名获取元素:
if (document.getElementsByClassName == undefined) {
document.getElementsByClassName = function(className)
{
var hasClassName = new RegExp("(?:^|''s)" + className + "(?:$|''s)");
var allElements = document.getElementsByTagName("*");
var results = [];
var element;
for (var i = 0; (element = allElements[i]) != null; i++) {
var elementClass = element.className;
if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
results.push(element);
}
return results;
}
}
还有要循环的代码:
var elements = getElementsByClassName(".textbox");
for(var i=0;i<elements.length;i++)
{
var splitid = elements[i].id.split("_");
}
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 是否可以加快向DOM添加一组元素的速度
- Angular:渲染大量DOM元素的速度更快
- angularjs 子指令 DOM 加载速度不够快
- 操作“虚构”元素的速度是否比当前在 DOM 中的元素快
- 与FV或GoogleChrome相比,IE中DOM元素的替换速度较慢
- 多DOM appendChild的速度/效率
- 渲染速度:一次添加一个DOM项或一次添加项集
- 虚拟DOM如何提高ReactJS的速度
- 在dom内有大量输入标签的IE中,聚焦和/或选择输入元素的速度很慢
- 如何提高性能/速度的DOM jquery数据表9999行
- 在使用$element.ech()时加快DOM访问速度
- chrome的DOM更新速度比firefox慢,看起来chrome有一些渲染问题
- 速度JS和动态添加的DOM元素