我正在编写一个恒定时间字符串比较函数(用于 node.js),并希望为这个单一函数禁用 V8 的优化编译器;使用命令行标志是不可能的。
我知道现在使用(with{}
或 try/catch)块会禁用优化编译器,但恐怕这个“功能”(错误)将在未来的版本中得到修复。
是否有禁用 V8 优化编译器的不可变(和记录)方式?
示例函数:
function constantTimeStringCompare( a, b ) {
// By adding a `with` block here, we disable v8's optimizing compiler.
// Using Object.create(null) ensures we don't have any object prototype properties getting in our way.our way.
with ( Object.create( null ) ){
var valid = true,
length = Math.max( a.length, b.length );
while ( length-- ) {
valid &= a.charCodeAt( length ) === b.charCodeAt( length );
}
// returns true if valid == 1, false if valid == 0
return !!valid;
}
}
还有一个性能测试只是为了好玩。