搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

Learn More

Drop of performance between FF31 and FF32 for matching a regexp

  • 1 个回答
  • 2 人有此问题
  • 37 次查看
  • 最后回复者为 cor-el

more options

Hello,

I'm trying to fix an addon on firefox 32 (sometime freezes the browser), I finally found the problem : it is a regexp execusion (with REGEXP.test(STRING) ).

For example, firstly load this page (I know it is a script) in FF31 : https://developer.cdn.mozilla.net/media/js/main-min.js?build=db5035d Display the developer tools and in the JS console copy/paste the following portion of code (I've simplified to a maximum to only let the problematic part of the regexp) :

test = "((\\S|\\s)+;\\s*\\n){10,}"; reg = new RegExp(test, "i"); reg.test(document.body.innerHTML)

The script terminates quickly (less than a second).

Do the same in FF32 : the brower becomes unresponsive and finally ask for stopping the execution of the script.

Could you help me understand why FF32 does not have the same behavior as FF31 ? Is there a workaround ?

Hello, I'm trying to fix an addon on firefox 32 (sometime freezes the browser), I finally found the problem : it is a regexp execusion (with REGEXP.test(STRING) ). For example, firstly load this page (I know it is a script) in FF31 : https://developer.cdn.mozilla.net/media/js/main-min.js?build=db5035d Display the developer tools and in the JS console copy/paste the following portion of code (I've simplified to a maximum to only let the problematic part of the regexp) : test = "((\\S|\\s)+;\\s*\\n){10,}"; reg = new RegExp(test, "i"); reg.test(document.body.innerHTML) The script terminates quickly (less than a second). Do the same in FF32 : the brower becomes unresponsive and finally ask for stopping the execution of the script. Could you help me understand why FF32 does not have the same behavior as FF31 ? Is there a workaround ?

所有回复 (1)

more options

I can confirm that this happens with those STR. It fails when the result is false.

test = "((\\S|\\s)+;\\s*\\n){3,}"; reg = new RegExp(test, "i"); reg.test(document.body.innerHTML) -> true
test = "((\\S|\\s)+;\\s*\\n){4,}"; reg = new RegExp(test, "i"); reg.test(document.body.innerHTML) -> false

I see that you have filed a bug report about this.

  • bug 1070935 - Drop of performance between FF31 and FF32 when executing a regexp