我正在测试我之前读过的有关随机Math.random()
实际上是多少的内容,并希望显示10000个数字,这些数字应该是0到10000000之间的随机数。
要查看测试,我选择将随机数组加入到每个整数之间<br>
的字符串中。然后我做了$("#"+elm).html(randomNumberString);
这真的很慢。我只想到它是将随机数生成和排序到数组中。但是当我开始在我的代码中放置计时器时,它变得很有吸引力,它的输出正在减慢一切。
正如我做的测试document.getElementById(elm).innerHTML = randomNumberString;
jQuery.html():2500ms getElementById.innerHTML:170ms
我在所有5个浏览器中尝试了这个,并且所有浏览器中的数字非常接近...我在这个实例中使用jQuery错了吗?我也尝试在计时器启动之前追加并获取元素,所以我可以简单地执行$(elm).html()
,但这没有帮助。似乎是实际的html()
函数减慢了一切......?
编辑我最终这样做了:
randomStringNumber = "<div>" + randomStringNumber + "</div>";
现在整个事情运行得更快: jQuery.html():120ms getElementById.innerHTML:80ms
尽管使用oldschool html仍然更快。如果有人能够回答为什么将它包装在一个元素中的速度更快,我会很感激......
答案 0 :(得分:6)
25提示改善你的jquery使用
http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx
http://acsenthil.wordpress.com/2011/07/04/improve-your-jquery-25-excellent-tips/
答案 1 :(得分:4)
最快的方法是:
$.getJSON("/Admin/GetFolderList/", function(result) {
var optionsValues = '<select>';
$.each(result, function(item) {
optionsValues += '<option value="' + item.ImageFolderID + '">' + item.Name + '</option>';
});
optionsValues += '</select>';
var options = $('#options');
options.replaceWith(optionsValues);
});
根据this link是最快的方法,因为在进行任何类型的DOM插入时,您将所有内容都包装在一个元素中。
答案 2 :(得分:1)
这似乎是html函数的limitation。在本次讨论中,建议将以下功能作为替代:
$.fn.replaceHtml = function( val ) {
var stack = [];
return this.each( function(i, el) {
var oldEl = el;
/*@cc_on // Pure innerHTML is slightly faster in IE
oldEl.innerHTML = html;
return oldEl;
@*/
var newEl = oldEl.cloneNode(false);
newEl.innerHTML = html;
oldEl.parentNode.replaceChild(newEl, oldEl);
/* Since we just removed the old element from the DOM, return a reference
to the new element, which can be used to restore variable references. */
stack.push( newEl );
}).pushStack( stack );
};