大循环中使用的性能更高:.indexOf(str)或.match(正则表达式)?
-
06-07-2019 - |
题
我的页面上有这个array.prototype,它似乎吸收了大量的处理时间:
Array.prototype.findInArray = function(searchStr) {
var returnArray = false;
for (i=0; i<this.length; i++) {
if (typeof(searchStr) == 'function') {
if (searchStr.test(this[i])) {
if (!returnArray) { returnArray = [] }
returnArray.push(i);
}
} else {
var regexp = new RegExp(".*" + searchStr + ".*");
if (this[i].match(regexp)) {
if (!returnArray) { returnArray = [] }
returnArray.push(i);
}
}
}
return returnArray;
}
解决方案
首先,您知道您不必拥有“。*”在哪一边,对吗?默认情况下,正则表达式将匹配字符串中的任何位置。其次,如果您只是在搜索常量字符串,并且不需要使用正则表达式提供的任何高级内容,那么使用 .indexOf()
肯定会更快。除此之外,您不必担心转义具有特殊含义的字符。
其他提示
正则表达式可能会有很大差异。我想,一个简单,精心设计的正则表达式可能比indexOf()更快或更快。另一方面,复杂的正则表达式需要更多的时间,因为它正在做更多的工作。
您还有一个浏览器实施问题让人眼花缭乱。如果没有编写定时循环来测量每个浏览器根据您的特定需求进行每种类型的检测所花费的时间,那么您无法获得可靠的答案。
更糟糕的是,您在循环的每次迭代中创建一个新的正则表达式对象 - 在循环外定义一次,或将其作为参数传递。
此外,对于此用途,测试比匹配更好更快。
不隶属于 StackOverflow