[英]Using jQuery is much slower than using JavaScript when appending the elements
我想在单击按钮时添加一个选择字段。 options 的值是$all_cs
,由 Yii Framework 创建(大约 7k 项)。
<div class="cos-input">
<div id="cos_container"></div>
<span class='add-input cs_name' href="#" name="cs_name" onclick='addFields_cos()' style="border: solid 1px; padding: 3px;">Add COURSES</span>
</div>
选项元素内容:
$all_cs = $form->dropDownList($model, 'cos[n]', $allCourses, array('prompt'=>''));
$pos = strpos($all_cs, "<option");
$rpos = strrpos($all_cs, "</option>");
$all_cs = substr($all_cs, 0, $rpos+9);
$all_cs = substr($all_cs, $pos, strlen($all_cs) - $pos);
$all_cs = str_replace("\n", "", $all_cs);
我用了两种方法:
1 - 使用JS:
function addFields_cos(){
var cos_container_parent = document.getElementById('cos_container');
var div = document.createElement("div");
div.name = "div_rm";
cos_container_parent.appendChild(div);
var new_cos = document.createElement("select");
new_cos.name = 'new_courses[]';
div.appendChild(new_cos);
new_cos.innerHTML = '<?php echo $all_cs; ?>';
div.innerHTML += "<span class='delete_div' href='#'> delete </span>";
div.appendChild(document.createElement("br"));
div.appendChild(document.createElement("br"));
}
2 - 使用 Jquery:
$(document).ready(function(){
$(".cs_name").click(function(){
$("#cos_container").append("<div><select name='new_courses[]'>");
$("#cos_container").append("</select></div><br>");
$("#cos_container select").append("<?php echo $all_cs; ?>");
});
});
使用JS时,字段添加非常快,添加多个字段的时间是恒定的。
但是在使用 JQuery 时,字段添加速度较慢,并且字段越多越慢。 当字段数超过 10 时,需要几秒钟才能完成。
我的答案是:
1 - 为什么在添加多个字段时使用 JQuery 速度较慢且不恒定?
2 - 如何更改我的 JQuery 函数以使其更快? 在这种情况下我们应该使用 JQuery 吗?
(对不起,我的英语不好)
append() 比单个 html()/text() 更难使用。
下面的代码有望加速 jquery 版本:
$(document).ready(function(){
$(".cs_name").click(function(){
$("#cos_container").html(generateContent());
});
function generateContent() {
return '<div>' +
'<select name="new_courses[]">' +
'<?php echo $all_cs; ?>' +
'</select>' +
'<span class="delete_div" href="#">delete</span>' +
'</div><br>';
}
});
添加多个选择框:
JSbin 原型,好像比你原来的代码快很多? 正如其他评论中提到的,选择器查找是瓶颈。
$(document).ready(function(){
$(".cs_name").click(function(){
$("#cos_container").append(generateContent());
});
function generateOptionsion() {
return '<div>' +
'<select name="new_courses[]">' +
'<?php echo $all_cs; ?>' +
'</select>' +
'<span class="delete_div" href="#">Delete</span>' +
'</div><br>';
}
});
每次执行$(selector)
,都必须在 DOM 中搜索匹配的元素。 这是一个缓慢的过程,所以总是想办法尽量减少 DOM 交互的数量。
在这方面,jQuery 方法链可以非常有效。
例如 :
$(document).ready(function(){
$(".cs_name").click(function() {
$("#cos_container")
.append("<div><select name='new_courses[]'></select></div><br/>");//ensure all HTML fragments are well formed and complete at the point they are inserted.
.find("select")
.append('<?php echo $all_cs; ?>');
});
});
这会更快,但可能仍然不如您的 POJS 代码快。
嗯,这可能是大多数新 JavaScript/jQuery 开发人员的误解。
让我说清楚:
addFields_cos
东西。作为开发人员,它取决于您决定何时使用什么,如果它只是在客户端进行一些简单的事件处理,那么我会说不需要 jQuery。 但是如果它比处理事件更复杂,比如遍历 dom 结构或使用一些主要依赖于 jQuery 并需要 AJAX 功能的 3rd 方库,那么使用jQuery 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.