【发布时间】:2011-01-25 06:13:07
【问题描述】:
我正在将 JQuery 与 DataTable 插件一起使用,现在我在下一行遇到了一个很大的性能问题。
aLocalData[jInner] = nTds[j].innerHTML; // jquery.dataTables.js:2220
我有一个 ajax 调用和 HTML 格式的结果字符串。我把它们转换成HTML节点,那部分就ok了。
var $result = $('<div/>').html(result).find("*:first");
// simlar to $result=$(result) but much more faster in Fx
然后我激活启用从普通表到可排序数据表的结果。速度在 Fx 中是可以接受的(900 行大约需要 4 秒),但在 IE8 中是不可接受的(超过 100 秒)。
我使用内置分析器对其进行了深入检查,发现上述单行占用了所有 99.9% 的时间,我该如何加快速度?我错过了什么?
nTrs = oSettings.nTable.getElementsByTagName('tbody')[0].childNodes;
for ( i=0, iLen=nTrs.length ; i<iLen ; i++ )
{
if ( nTrs[i].nodeName == "TR" )
{
iThisIndex = oSettings.aoData.length;
oSettings.aoData.push( {
"nTr": nTrs[i],
"_iId": oSettings.iNextId++,
"_aData": [],
"_anHidden": [],
"_sRowStripe": ''
} );
oSettings.aiDisplayMaster.push( iThisIndex );
aLocalData = oSettings.aoData[iThisIndex]._aData;
nTds = nTrs[i].childNodes;
jInner = 0;
for ( j=0, jLen=nTds.length ; j<jLen ; j++ )
{
if ( nTds[j].nodeName == "TD" )
{
aLocalData[jInner] = nTds[j].innerHTML; // jquery.dataTables.js:2220
jInner++;
}
}
}
}
【问题讨论】:
-
我不认为浏览器特别擅长处理 900 行的内容。在 Firefox 中,快速的 javascript 可以节省您的时间,但 IE 的脚本速度要慢得多。
-
我会使用某种分页机制吗,我们在 IE 中使用另一个网格控件时遇到了同样的问题,javascript 引擎的性能很糟糕,所以我们最终让用户能够对结果进行分页(或等待 IE)。
-
只是好奇,用
var result = nTds[j].innerHTML;替换行对性能有何影响? (暂时忘记它会破坏它) -
我在 var temp 之前尝试过; (函数 MARK(nTd){ temp=nTd.innerHTML; })(nTd[i]); aLocalData[jInner]=温度;并且 IE9 内置分析器显示标记所消耗的所有时间。
标签: jquery performance internet-explorer-8 innerhtml