首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jQuery手机比较三种插入dom元素+增强它们的方法

用jQuery手机比较三种插入dom元素+增强它们的方法
EN

Stack Overflow用户
提问于 2014-06-17 11:28:29
回答 1查看 345关注 0票数 5

当将数据插入dom时,我会出现性能问题。

插入+ jQuery移动增强完成了对页面扫描()事件,jQuery移动版本1.4.2。

通过比较我想要做的三个简化版本,我试着看看哪种方法是最快的:

jQuery方法:

代码语言:javascript
复制
for(var i=0;i<2000;++i){
    $('<div>').attr({'data-role':'collapsible','id':'asdf'+i+''}).html('<h2>asdf</h2>').appendTo("#manage_content");
    $('<ul>').attr({'data-role':'listview'}).html('<li>bit</li>').appendTo('#asdf'+i+'');
    }
$('#manage').trigger('create');

纯js,创建所有节点:

代码语言:javascript
复制
var d=document.createDocumentFragment();
var title,listitem,list;
var coll=new Array();
for(var i=0;i<2000;++i){
coll[i]=document.createElement('div');
coll[i].setAttribute("data-role", "collapsible");
title = document.createElement('h2');
title.innerHTML='asdf';
coll[i].appendChild(title);
list=document.createElement('ul');
list.setAttribute("data-role","listview");
listitem = document.createElement('li');
listitem.innerHTML='bit';
list.appendChild(listitem);
coll[i].appendChild(list);
d.appendChild(coll[i]);
}
document.getElementById("manage_content").appendChild(d);
$('#manage').trigger('create');

大字符串的jQuery:

代码语言:javascript
复制
var html='';
for(var i=0;i<2000;++i){
    html+='<div data-role="collapsible"><h2>asdf<h2><ul data-role="listview"><li>bit</li></ul></div>';
}
$('#manage_content').append(html);
$('#manage').trigger('create');

令我惊讶的是,这三种方法产生了相同的结果(大约7秒的执行时间.)

我是不是做错了什么?有更好的办法吗?

我已经看到了很多与这个主题相关的问题,但大多已经过时,或者说纯javascript应该更快一些,但对我来说并非如此。

没有jQuery增强:

  • jQuery标准:~400
  • 纯JS:~40 JS
  • jQuery大字符串:~80 big 所以使用文档片段的纯javascript是最好的,尽管读/写x_x是可怕的。 通过jQuery增强: 测试这里(给奥马尔的学分)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 12:26:31

假设只使用jquery进行css格式设置,那么我们可以做些什么来加速dom插入+增强。

  • 插入部分的:正如许多评论所建议的那样,方法3似乎是最好的选择,因为方法2的小性能增益不足以弥补其可读性不足,这将使增强部分变成地狱。
  • 增强部分的 : --将所有jquery移动类手动添加到html元素中 --不要添加任何数据-%属性。 -不要调用$('your_page').trigger('create')或$(‘..ui content’).enhanceWithin() --手动添加所需的小部件事件。 性能增益: 通过常规的jquery移动增强,页面创建在我最坏的使用情况下采用了2s。 该方法在50 is 附近。所以40*如果增加..。 下面的代码是两个嵌套折叠集的示例(显然是我的)和一个listview作为最后一个子实例的代码。如果有人感兴趣,我可以添加jsperf x倍这个元素插入+增强。 小提琴:http://jsfiddle.net/3pyRX/1/ HTML:

CSS:

.projectxtask a{背景颜色:#33 33ccff!重要;填充-右:2.6em!重要;边框-顶部:1px实心黑色!重要;边框-底部:1px实心黑色!重要;}.inline{显示:内联!重要;} .coll_head_butt{边距-左:20 1px!重要;边框样式:无!重要;框-阴影:无!重要}

联署材料:

$(‘.ui-可折叠-标题’).on(‘单击’,函数(事件,ui){ var coll_content = $(this).siblings();if(coll_content.is(":visible")) {$('a',this).removeClass(“ui-图标-减去”).addClass(“ui-图标-+”);coll_content.hide();} {$('a',this).removeClass(“ui-图标-plus”).addClass(“ui-图标-减号”);coll_content.show();};

编写代码有点烦人,但是如果您有类似于我的jquery的性能问题,这是非常值得的。

我在这个示例的可折叠标头中添加了图标,因为在jquery中,您将使用<.a数据-图标=check data-iconpos=notext data-role= button >来获取图标按钮,如果没有jquery增强,这是不可能的,因为html中不允许嵌套的<.a>标记,浏览器将对其进行更正。

当手动添加类时,像我在这里所做的那样,用<.a>替换<.p>似乎是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24262590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档