javascript - jQuery 代码性能改进

标签 javascript jquery

我有一个字段,当我在其中粘贴一些内容时,内容会被验证并逐行添加到另一个隐藏字段。我的内容可以是由换行符分隔的多个手机号码,当您将它们粘贴到可见字段时,每行都会得到验证并添加到另一个隐藏字段,该隐藏字段用于将值传递到后端。

例如

12345
54321
34567

我用来将值添加到隐藏字段的方式可以在下面的代码中看到:

$('#recipients').val($('#recipients').val().length <= 0 ? output.join("\n") : $('#recipients').val() + "\n" + output.join("\n"));

在上面的代码中,“输出”是用户粘贴内容中的一行(数字),收件人是隐藏字段。

该行被调用的次数与我的内容行的次数一样多。但是,当我检查性能时,该行会占用大量 CPU 负载(当行数太高时),并会在执行工作时产生延迟(浏览器挂起)。

那么这行代码能否以更高效的方式重写呢?

谢谢

最佳答案

以下是如何将选择器的结果缓存在变量中:

var $recip = $("#recipients");
var $recipval = $recip.val();
var new_out = output.join("\n");
$recip.val($recipval.length == 0 ? new_out : $recipval + "\n" + new_out);

您还可以绕过 jQuery,以获得更多提升:

var recip = $("#recipients")[0];
var recipval = recip.value;
var new_out = output.join("\n");
recip.value = recipval.length == 0 ? new_out : recipval + "\n" + new_out;

new_out 不会影响性能,它只是让代码更容易理解。

关于javascript - jQuery 代码性能改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19307819/

相关文章:

javascript - 样式表不适用于 bootstrap 4 CDN 链接?

javascript - 如何在 Meteor 中使用 Materialize css Tabs?

javascript - initMap 不是一个函数 - map 不渲染。谷歌地图 API - JS

javascript - 鼠标移开并单击

jquery - 无法将 zclip 对象应用于 onLoad() 之后创建的元素 id?

javascript - 防止 IOS 返回点击时的输入操作

javascript - 如何使用react router dom显示详细信息页面

jquery - 如何使用 JQuery 将文件上传到 MVC VNext 网络服务器?

javascript - 属性大于传递变量 (.filter()) 的 jQuery 元素

javascript - 修改网页源代码,使其自动回复一段音频