JavaScript:为什么这个循环的优化使它变慢了
JavaScript: Why did the optimization for this loop made it slower?
以下函数递归搜索数组中的字符串:
function searchStrings(tree, callback) {
for (var i = 0; i < tree.length; ++i) {
if (_.isArray(tree[i]) || _.isObject(tree[i])) {
searchStrings(tree[i], callback)
} else {
tree[i] = callback(tree[i])
}
}
}
阵列如下所示:
[ 'markdown',
[ 'header', { level: 1 }, 'Title' ],
[ 'para', '''Example''' ],
[ 'para', '“Just in vate--hr”' ],
[ 'hr' ],
[ 'para', 'this is another and this is another hr' ],
[ 'para', [ 'em', 'thoer' ], ' thrr nest ', [ 'strong', 'ert' ] ],
[ 'bulletlist',
[ 'listitem', 'this is a test' ],
[ 'listitem', 'another test' ] ] ]
我稍后将使用它来替换字符串:
function replaceCharacters(tree, callback) {
console.time('time')
for (var i = 1; i < tree.length; ++i) {
if (tree[i][0] === 'para') {
searchStrings(tree[i], function(str) {
if (str.match(/"/g)) {
str = str
.replace(/"(?='b|')/g, '“')
.replace(/"(?!'b|')/g, '”')
}
return str
})
}
}
console.timeEnd('time')
我添加了if (str.match(/"/g))
部分,认为如果循环跳过没有"
的字符串,代码会运行得更快,因为replace
不必为所有字符串运行。但我错了。具有if语句为1ms
的time
,不具有if语句是0ms
:
alex@alex-K43U:~/note/m2k$/m2k10.js test.txt时间:1ms
alex@alex-K43U:~/note/m2k$/m2k10.js test.txt时间:0ms
这里发生了什么?if (tree[i][0] === 'para')
也是如此吗?
因为您有字符串。
在您的情况下,字符串与if中的条件匹配。通过这种方式,您可以进行"小"比较和替换。您的优化将改善不需要进行替换的情况。
一个正确的测试将是一个不需要做任何改变的测试。此外,我还建议使用一个"更大"的案例。在你的差异告诉你什么都没有,因为它可能有另一个原因(可能是一个进程刚刚启动,降低了浏览器的优先级,等等)
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么这在IE中的工作方式与在Firefox中不同
- 知道为什么我的旋转木马不会自动更改图片吗
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 为什么在变形之前不缺少Fx
- 为什么JavaScript在for循环为3时向所有4发出警报
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 为什么Airbnb风格指南说不鼓励依赖函数名称推断
- 为什么要使用0>javascript中的0
- 为什么无法在TypeScript中导出类实例
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- JavaScript:为什么这个循环的优化使它变慢了
- 为什么nodejs's require在此闭包中无法使用调试器控制台访问?可能的v8优化
- 为什么 requirejs 优化器需要对我的源文件具有写入权限?这能解决吗?
- 为什么我的 grunt-contrib-requirejs 没有优化任何东西
- 为什么我必须使用'include'在grunt-需要优化成一个单独的js文件
- 为什么没有javascript引擎支持尾部调用优化?
- 为什么优化javascript会在使用Drupal时出错