jQuery是否在每个循环中使用创建文档片段
Does jQuery use create document fragment inside each loops?
所以我读到jQuery在内部使用文档片段来加快渲染速度。 但我想知道是否有人知道 jQuery 是否会在我使用 each 循环将 img 元素附加到 DOM 的情况下使用 createDocumentFragment?
var displayArray = []; // Lots of img elements
$.each(displayArray, function()
{
$('#imgSection').append(this);
});
或者我需要使用此代码来减少浏览器重排的次数?
var displayArray = []; // Lots of img elements
var imgHolder = $('<div/>');
$.each(displayArray, function()
{
imgHolder.append(this);
});
$('#imgSection').append(imgHolder);
此外,displayArray 由其他代码填充(此处未显示),这些代码基于 JSON 文件中的路径创建 img 元素。
谢谢你的任何建议。
为什么要循环添加元素?
$('#imgSection').append("<div>" + displayArray .join("") + "</div>");
好的,所以它是元素。
最快的方法是将 append 与数组本身一起使用。
$("#out").append(elems);
使用一个div 附加的另一个选项是
var div = $("<div/>").append(elems);
$("#out").append(div);
但是一次附加大量图像会很糟糕,除非它们被预加载。这将是一堆排队的http请求。
jsPerf 测试用例
-
不,如果你使用
$.each()
那么jQuery不会使用DocumentFragment
- jQuery无法知道你将在循环中做什么,并且每次迭代都是独立的。 -
文档片段的要点是,您不必像在第二个示例中所做的那样将所有新元素包装在包装器元素中以限制重排。
-
如果你将元素数组直接传递给
.append()
而不是自己迭代它们,jQuery显然会使用文档片段。
如果您真的关心回流(并且注意到显示速度很慢),则可以隐藏并显示图像保持元素:
var displayArray = […]; // Lots of img elements
var holder = $('#imgSection').hide();
for (var i=0; i<displayArray.length; i++)
holder.append(displayArray[i]);
holder.show();
相关文章:
- 从Javascript和Php变量创建Html模板文档
- 从Google Analytics文档中重新创建滚动效果
- 返回午夜后创建的文档
- 为任意html文档创建不引人注目的覆盖
- 如何将文档对象创建为HTML页面
- 创建自己的文档Javascript
- 聚合以按大小创建文档组
- 挂钩文档.使用函数原型创建元素
- 如何删除创建的创建文档片段对象
- 如果文档不存在,如何创建文档MongoDB Javascript
- 如果不存在则创建文档,否则,更新-无论哪种情况都返回文档
- 如何为我的web应用程序创建文档预览/视图(类似于Dropbox)
- 使用JavaScript在SharePoint 2010文档库中创建文档副本
- 如何防止CouchDB在更新简单计数器时创建文档修订
- 用经典的asp从dotx模板创建文档
- 不要希望在通过JSOUP解析时创建文档结构
- 使用流星自动成型提交后创建文档
- jQuery是否在每个循环中使用创建文档片段
- 是否有任何方法可以从通用的HTML片段创建文档片段?
- 使用JSDOC创建文档作用域