以下函数在数组中递归搜索字符串:
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
不必为所有字符串运行。但是我错了。 time
使用if语句为1ms
且没有if语句为0ms
:
alex @ alex-K43U:〜/ node / m2k $ ./m2k10.js test.txt time:1ms
alex @ alex-K43U:〜/ node / m2k $ ./m2k10.js test.txt time:0ms
这里发生了什么?这对if (tree[i][0] === 'para')
也是如此吗?
答案 0 :(得分:1)
因为你有字符串。
在您的情况下,字符串匹配ifs中的条件。这样,您可以进行“小”比较和替换。您的优化将改善无需替换的情况。
正确的测试是不需要进行任何更改的测试。 我还建议一个更“大”的案例。在你的情况下,差异告诉你什么,因为它可能有另一个原因(可能是一个进程刚开始并稍微降低浏览器优先级等)。