我需要每500ms运行一次这个命令,但运行一次就足够滞后了。有没有一个解决方案来提高性能,而功能仍然做同样的事情?
$('#current-update > div.update-content > ol:nth-child(4) > li > div.info > p').each(function() {
var matchthis = $(this).text().match(/\*(.*?)\*/g);
if (matchthis) {
var replacethis = $(this).html().replace(/\*(.*?)\*/g, "<strong>$1</strong>")
$(this).replaceWith('<p data-bind="html: parsedBody" class="body">' + replacethis + "</p>")
}
});
答案 0 :(得分:0)
由于正则表达式,它并不慢。它很慢,因为你的代码中的某个地方我怀疑这些段落标记每500毫秒动态更新一次,里面有注释,然后你逐个迭代它们来改变它。
关于操纵dom的第一条规则是不要一次操纵dom多次。由于新的角度,引导程序,构建脚本,数据绑定,jquery开发人员没有学到流畅的网络交互的重要性,这经常被忽视。
每次用jquery选择器读取dom时 - $('#getThis')都需要渲染时间。每次你在dom上渲染一些东西 - $('#getThis')。html('add this')需要渲染时间。将迭代中的两个动作组合在一起,尤其是在计时器上执行此操作时。
你现在最终得到的是缓慢而不是因为正则表达式,而是因为多次dom操作,并且在每次迭代时重新读取dom。
重新思考你的架构。除非你阅读整个html块,用正则表达式遍历字符串,然后一次写入dom,否则它不会比这更快。
祝你好运