Firefox 9.0.1 удивил меня, показывая мой алгоритм заполнения номера Ω (log n) с помощью метода Ω (n), когда 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;
}
Обновление: Я не думаю, что это связано с исходным вопросом, но я только что обнаружил, что IE 9 переключает поведение при переключении с 32 до 64-битных режимов. В 32-битном режиме выигрывает математический метод. В 64-битном режиме выигрывает метод Loop. Просто подумал, что я должен указать на это.
Обновление 2: MAK поймал меня в своем комментарии ниже. Математический метод не Ω (1), он, вероятно, больше похож на Ω (log n).