загадки бытия
Mar. 28th, 2009 03:32 pmТут надысь немножко почекал перформенс джаваскрипта на разных браузерах. 
orleanz меня поправил и ещё раз поправил.
А я тут побаловался, и вижу в хроме очень интересную вещь.
Обратите внимание, что пробел всегда в первой позиции, искать-то нечего.
Если я в timeit() строю строку используя cat, построение занимает 0 времени в хроме, зато поиск в последнем случае занимает больше пяти секунд. А если я строю строку используя join, то построение занимает больше 5 секунд, а поиск получается очень быстро.
Объяснить такое явление я как-то затрудняюсь.
А я тут побаловался, и вижу в хроме очень интересную вещь.
function nchars(n) {
  var s = " ";
  for (var i = 0; n - 1 > i; i++) {
    var r = 61 + Math.random() * 50;
    s += String.fromCharCode(r);
  }
  return s;
}
function join(chunk, m) {
  var array = [];
  for (var i = 0; m > i; i++) {
    array.push(chunk)
  }
  return array.join('');
}
function cat(chunk, m) {
  var s = "";
  for (var i = 0; m > i; i++) {
    s += chunk;
  }
  return s;
}
function timeit(n) {
  var chunk = nchars(n/500);
  var startedAt = new Date().getTime();
  var s = cat(chunk, 500);
  println(n + " built for " + (new Date().getTime() - startedAt));
  startedAt = new Date().getTime();
  var i = s.indexOf(" ");
  println(n + " found for " + (new Date().getTime() - startedAt));
}
function benchmarkindexof() {
  for (var i = 10000; 1000000000 > i; i *= 10) {
    timeit(i);
  }
}
benchmarkindexof();
Обратите внимание, что пробел всегда в первой позиции, искать-то нечего.
Если я в timeit() строю строку используя cat, построение занимает 0 времени в хроме, зато поиск в последнем случае занимает больше пяти секунд. А если я строю строку используя join, то построение занимает больше 5 секунд, а поиск получается очень быстро.
Объяснить такое явление я как-то затрудняюсь.