javascript - 不等于性能 JavaScript
问题描述
//loop brace start, suppose "i" is counter, will run 20000 times
var spanXId = $('#parentId #demoId'+i).text();
var spanYId = $('#parentId #demoId'+(i+1)).text();
if(spanXId != spanYId){
//do something
}else{
//do something
}
//loop brace end
问题在于分配跨度值“ var spanXId = $('#parentId #demoId'+i).text(); ”和 != 比较“ spanXId != spanYId”。这太花时间了。任何想法来解决这个问题?
解决方案
id
属性在您的文档中应该是唯一的,因此$('#parentId #otherid')
应该可以用几乎 noop 替换document.getElementById('otherId')
。
然后检索 textContent可能需要一些时间,因此您可能会通过缓存先前的值再次获胜:
var spanXId = document.getElementById('demoId0').textContent,
spanYId = null;
// start your loop from index 1
for(var i=1; i<length; i++) {
spanYId = document.getElementById('demoId' + i);
if(spanXId !== spanYId) // do your stuff
...
spanXId = spanYId; // cache for next iteration
}
现在,使用这样的迭代 id 可能根本不是最佳实践,您可能会考虑使用其他选择器,例如类。
然后,您只需在进入循环之前获取 NodeList,并以相同的方式迭代此 NodeList。
var spans = document.querySelectorAll('#parentId .demo');
var spanXId = spans[0].textContent,
spanYId = null;
// start your loop from index 1
for(var i=1; i<spans.length; i++) {
spanYId = spans[i].textContent;
if(spanXId !== spanYId) // do your stuff
...
spanXId = spanYId; // cache for next iteration
}
推荐阅读
- regex - 删除旧文件并将最新文件保留在 Linux 目录中的脚本
- git - 如何在存储库中删除这种“符号链接”之类的东西?
- firefox - Ubuntu 18.04 无法浏览互联网,OpenVPN 问题?
- c - gcc 弱属性不一致的行为
- c# - .cs 代码中两个条件的组合
- python - pytest 在启动时标记异步补丁默认事件循环
- ios - SwiftUI Preview 不适用于 FetchRequest 和 Init
- php - 如何在 Symfony 3.4 中调试 500 错误删除
- google-compute-engine - GCE API 需要“projects/someproject”的“compute.zones.list”权限
- powershell - Powershell 脚本不会在从任务计划程序打开或传递参数时运行