jQuery DOM操作效率 – 使用JavaScript构建整个页面
我将从一个完全空白的页面(除了html,head和body之外没有其他元素)开始,然后使用jQuery构建页面。 页面内容将采用AJAX请求中的JSONforms。 JSON中的内容不会包含任何HTML。 将根据JSON对象的结构为页面的不同部分构建包含内容的HTML。
此页面将包含各种滑块,模态和其他“动态”内容。
我的问题是,它会更快(让IE7作为最低的共同点)将HTML构建为一个大字符串(使用比标准连接快得多的字符串构建器)并以批量方式将其注入到正文中,即
var html = "All markup required for the page, built from the contents of the JSON object
......etc." $("body").html(html)
然后当它在DOM中时,使用jQuery查找并将插件应用于各种动态部分,即
$("#slider").sliderPlugin(options);
要么
将每个元素(或某些元素)创建为变量,然后附加到正文会更好吗? 即
var content = $('', {id: "content"}) var slider = $('', {id: "slider", html="- ...
"}).appendTo(content); $('body').append(content)
然后使用这种方法我不必查询DOM,我只需要这样做:
slider.sliderPlugin(options);
我想构建HTML一次是最好的方法,我依旧记得在某处读它
编辑:我在这里阅读了更多jQuery优化。 一个不错的推荐阅读
我看到的建议是,通常可以更快地向.html()
提供单个大块HTML,然后依靠浏览器的内置解析器来完成它的工作。
但是,如果您将要随后操作单个元素(例如添加事件处理程序等),那么可以使用jQuery $('
)方法创建这些元素。
此外,给定一个属性值,如xx"xx
(nb:嵌入的引号),它更可靠,更安全:
$('', { attr: foo })
而不是这样做:
html += '';
因为如果foo
包含特殊的HTML字符,你必须自己逃避它们。
因此,除非您的内容非常大,否则我会忘记性能问题,并在存在静态HTML时使用大块HTML,但如果您插入变量字符串,则使用标记创建方法。
KnockoutJS的模板function似乎非常适合您的应用程序。