是否有更好和/或更快的方法来执行此正则表达式?

时间:2015-09-03 16:28:44

标签: javascript jquery regex

我需要每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>")
    }
});

1 个答案:

答案 0 :(得分:0)

由于正则表达式,它并不慢。它很慢,因为你的代码中的某个地方我怀疑这些段落标记每500毫秒动态更新一次,里面有注释,然后你逐个迭代它们来改变它。

关于操纵dom的第一条规则是不要一次操纵dom多次。由于新的角度,引导程序,构建脚本,数据绑定,jquery开发人员没有学到流畅的网络交互的重要性,这经常被忽视。

每次用jquery选择器读取dom时 - $('#getThis')都需要渲染时间。每次你在dom上渲染一些东西 - $('#getThis')。html('add this')需要渲染时间。将迭代中的两个动作组合在一起,尤其是在计时器上执行此操作时。

你现在最终得到的是缓慢而不是因为正则表达式,而是因为多次dom操作,并且在每次迭代时重新读取dom。

重新思考你的架构。除非你阅读整个html块,用正则表达式遍历字符串,然后一次写入dom,否则它不会比这更快。

祝你好运