我有运行返回的json数据的此功能。在chrome中速度确实很高,但是在IE和FF中却很慢。有关如何改善此问题的建议?返回的数据约为15个对象。这将在顶部创建一堆锚点,并在每个标题下列出。
function list_response(jsonData) {
"use strict";
var lists = document.getElementById("lists"), anchors = document.getElementById("anchors"), jItems = jsonData.items;
jItems.sort(function (a, b) {
return a.name.toLowerCase().localeCompare(b.name.toLowerCase());
});
for (var i = 0; i < jItems.length; i++) {
var pList = jItems[i], str = "", ank = "";
str += '<span class="backtotop">[ <a href="#">Back to top</a> ]</span><br /><br /><br /><li class="title nodot"><a class="pHeader" name="' + pList.name + '"><h2>' + pList.name + '</h2></a></li>';
ank += '<a class="pHeader" href="#' + pList.name + '">' + pList.name + '</a> ';
lists.innerHTML += str;
anchors.innerHTML += ank;
for (var j = 0; j < jsonData.items[i]["videos"].length; j++) {
var vList = jsonData.items[i]["videos"][j];
var strs = "";
strs += '<li class="nodot"><a href="https://www.site.org/videos/Video_Player.page?bctid=' + vList.id + '">' + vList.name + '</a></li>';
lists.innerHTML += strs;
}
}
}
这是结合以下性能增强功能的代码版本:
jItems.length
是,20
并且视频的平均数量为5,则这会将DOM事务数减少到DOM事务数的1/50。.push()
并.join()
在最后执行a ,而不是每次都添加到字符串的末尾。JS引擎通常可以一次连接多个字符串,而不是逐段连接。pList
然后具有四个引用pList.name
,不如获取一次名称值并直接使用它。jItems[i]
在循环中进行缓存是因为它引用了多个位置,而不是每次都重新计算它。for
只需为每个循环计算len变量一次,然后与之比较,而不是在每次迭代时都重新计算它。jItems[i]["videos"]
在外部循环中缓存一次,而不是在内部循环中每次都重做一次。jsonData.items
,则排序算法效率不高,因为它必须为每个比较重新计算每个名称的小写形式。您可以一次性构建所有小写版本(每个项目一次),然后仅在排序算法中使用它们,而不必在每次比较两个项目时都重做它们。这些更改产生以下代码:
function list_response(jsonData) {
"use strict";
var lists = document.getElementById("lists"), anchors = document.getElementById("anchors"), jItems = jsonData.items;
var results = [], anks = [], vList, pListName, item, videoItem;
// precache all lower case versions to make sorting faster
var i, iLen = jItems.length, j, jLen;
for (var i = 0; i < iLen; i++) {
jItems[i].nameLower = jItems[i].name.toLowerCase();
}
jItems.sort(function (a, b) {
return a.nameLower.localeCompare(b.nameLower);
});
for (i = 0; i < iLen; i++) {
item = jItems[i]; // cache for use in loops
videoItem = item["videos"]; // cache for use in loops
pListName = item.name; // cache for use in multiple places
results.push('<span class="backtotop">[ <a href="#">Back to top</a> ]</span><br /><br /><br /><li class="title nodot"><a class="pHeader" name="' + pListName + '"><h2>' + pListName + '</h2></a></li>');
anks.push('<a class="pHeader" href="#' + pListName + '">' + pListName + '</a> ');
for (j = 0, jLen = videoItem.length; j < jLen; j++) {
vList = videoItem[j];
results.push('<li class="nodot"><a href="https://www.site.org/videos/Video_Player.page?bctid=' + vList.id + '">' + vList.name + '</a></li>');
}
}
lists.innerHTML += results.join("");
anchors.innerHTML += anks.join("");
}
本文向大家介绍js实现兼容IE和FF的上下层的移动,包括了js实现兼容IE和FF的上下层的移动的使用技巧和注意事项,需要的朋友参考一下 这里给大家分享的是项目中的一个小需求,本来很简单,可是整了好久才把FF的兼容性搞定。 以上所述就是本文的全部内容了,希望大家能够喜欢。
我在程序(计时器类)中使用scheduleAtFixedRate方法。它每秒钟运行一次,但有时这种方法会变得非常快(每秒执行3-4次)。 然而,我在网上做了一些研究,发现了这个: 复制自android开发者页面: 对于固定速率执行,任务每次连续运行的开始时间都是计划的,而不考虑上一次运行的时间。如果延迟阻止计时器按时启动任务,则这可能会导致一系列串接运行(一个接一个地启动)。 我需要固定的计时器。
问题内容: (重要)编辑3: 单独运行testajax2.php而 _不是_Ajax。持续时间大致相同,为1.02-1.03秒。所以我想这意味着问题出在PHP- MySQL或XAMPP中? 当我通过phpMyAdmin查询运行它时,结果如下:显示第0-29行(总计约50行。查询用时 0.0015秒 )。看来问题根本不在于Ajax,而可能在于PHP。我怎样才能解决这个问题?(我也刚刚编辑了问题标题。
本文向大家介绍你是如何比较js函数的执行速度的?相关面试题,主要包含被问及你是如何比较js函数的执行速度的?时的应答技巧和注意事项,需要的朋友参考一下 console.time(flag); console.timeEnd(flag);
问题内容: 我一直在使用HTMLUnit。非常适合我的要求。但这似乎非常缓慢。例如:我已经使用HTMLUnit自动化了以下场景 代码: 它运作良好100%。但是需要3分41秒 我想执行缓慢的原因是要验证页面上的每个元素。 我的问题是如何减少HTMLUnit的执行时间?有什么方法可以禁用网页上的验证。 提前致谢! 问题答案: 对于当前的htmlUnit 2.13,设置选项与maxmax提供的设置略有
使用xarray的open_mfdataset打开一系列大约90个netCDF文件,每个文件大约27MB,加载一个小的时空选择需要很长时间。 分块维度产生边际收益。decode_cf=True在函数内部或单独都没有区别。这里还有一个建议https://groups.google.com/forum/#!topic/xarray/11lDGSeza78让我将所选内容另存为一个单独的netCdf并重新