koj*_*iro 35 javascript algorithm performance firefox-9
当n很小时,Firefox 9.0.1通过使用Ω(n)循环方法显示我的Ω(log n)数字填充算法让我感到惊讶.在我见过的每个其他浏览器中,循环速度较慢,即使是n的小值.我知道所有浏览器都在努力优化JS,但是由于所有其他浏览器都显示循环速度较慢,因此对Firefox 9中的行为有什么解释吗?
// ?(log n)
function padNumberMath(number, length) {
var N = Math.pow(10, length);
return number < N ? ("" + (N + number)).slice(1) : "" + number
}
// ?(n):
function padNumberLoop(number, length) {
var my_string = '' + number;
while (my_string.length < length) {
my_string = '0' + my_string;
}
return my_string;
}
Run Code Online (Sandbox Code Playgroud)
更新:我不认为这与原始问题有关,但我刚刚发现IE 9在从32位模式切换到64位模式时会切换行为.在32位模式下,Math方法获胜.在64位模式下,Loop方法获胜.我想我应该指出这一点.
更新2: MAK在下面的评论中抓住了我.数学方法不是Ω(1),它可能更像Ω(log n).
bob*_*obo 11
综观结果它很清楚,火狐没有做任何事情来实现性能增益.

这些条可以读作"速度"(操作/秒),因此更大的条形更好.一切都是规模化的.
在Firefox 9中,非常清楚"数学"方法执行得非常糟糕,而版本之间的"循环"方法几乎没有变化.
所以在Firefox 9 中没有任何 "优化".在Firefox 8和9之间就这些测试发生的一切都是他们的数学库变慢(Math.pow慢),或者他们的字符串库变慢(.slice()慢).
进一步研究一下,很明显这些基本操作在ff9中有点慢:

连接和Math.pow在FF 9中比在FF 8中慢一点,这可能会导致您在测试中看到的差异.
有趣的是,FF8中新的无操作杆比FF9长得多.