От чего такая разница?
Почему массив в опере обрабатывается в 100 раз медленне чем в Firefox и chrome?
var arr = [] for (i=0;i<1000000;i++) arr[i] = i console.time('test1') for (i=0;i<arr.length;i++) arr[i] console.timeEnd('test1') // * Opera 12: ~700ms * Firefoz 14: 6-8 ms, ~7ms * Google Chrome 19: 7ms |
9xakep,
Он в консоле поди медленней, посколь там Dragonfly параллельно тестит все переходы и ошибки пробуй через document.write или appendChild в div выводить |
потестим :
var arr = [], i, started, len; for (i=0; i < 1e6; i += 1) arr[i] = i; started = Date.now(); for (i=0 ;i < arr.length; i += 1) arr[i]; alert("Прошли массив с проверкой св-а length : " + (Date.now() - started) + " ms"); /* FF : 9 CH: 36 OP : 220 */ started = Date.now(); for (i=0 ;i in arr; i += 1) arr[i]; alert("Прошли массив с проверкой in : " + (Date.now() - started) + " ms"); /* FF : 11 CH : 100 OP : 409 */ started = Date.now(); for (i=0, len = arr.length;i < len; i += 1) arr[i]; alert("Прошли массив с кешированием length : " + (Date.now() - started) + " ms"); /* FF : 9 CH : 33 OP : 237 */ что за фигня? Linux x86_64. |
А я сейчас читаю Стояна Стефанова, по твоему совету ктстати) Там сказано, что гораздо оптимальнее делать так:
var arr = [], length, time; for (i=0;i<1e7;i++) arr[i] length = arr.length // объявить длину вначале, а не обращаться к ней каждый раз time = Date.now(); for (i=0;i<length;i++) arr[i] alert(Date.now() - time+'ms') Deff, var arr = [], time for (i=0;i<1000000;i++) arr[i] = i time = Date.now(); for (i=0;i<arr.length;i++) arr[i] alert(Date.now()-time+'ms') /* * Opera 12: 202 ms * Chrome 20: 22 ms * FireFox 14: 6 ms * O_O_O_O * */ Я почему-то всегда считал, что она лидирует в скорости обработки js |
круто-круто)) а какая опера, melky?
|
Цитата:
http://2012.jsconf.us/ Vyacheslav Egorov - One day of life in V8 ну да, как минимум для в8) |
Цитата:
Цитата:
Цитата:
|
melky,
Cовет тот жа - выведи не через алерт а в div |
Цитата:
ссыль Deff, <div id='res'> </div> <script> var arr = [], time for (i=0;i<1000000;i++) arr[i] = i time = Date.now(); for (i=0;i<arr.length;i++) arr[i] document.getElementById('res').innerHTML = (Date.now()-time) /* омг * Opera: ~600ms * Chrome: ~6ms * Firefox: ~6 ms */ </script> |
Цитата:
Цитата:
|
melky,
tadjik1, да, вы правы. У Вячеслава Егорова(на сайте, что дал tadjik1) 5:10, он начинает говорить об этом, и говорит, что браузер кеширует длину. |
|
Deff,
лол, а на локалке 600. Сейчас с 12 зашел, результат: 21 ms. |
melky,
И кстати, в книге написано, мол лучше использовать: +=, нежели: ++, почему? Сказано, что оптимизация, но за счет чего?... |
Цитата:
|
melky,
![]() |
melky,
лол, += быстрее гораздо) <div id='res'> </div> <script> /* * Chrome: 90 / 9 * Opera: 30 / 20 * Firefox: 15 / 5 */ var arr = [], l = 1e6, time; time = Date.now() for (i = 0; i < l; i++) arr[i] = i document.getElementById('res').innerHTML = (Date.now() - time) time = Date.now(); for (i = 0; i < l; i+=1) arr[i] = i document.getElementById('res').innerHTML += "<br>" + (Date.now() - time) </script> |
ORLY?
<div id='res'> </div> <script> var arr = [], l = 1e6, time; time = Date.now(); for (i = 0; i < l; i+=1) arr[i] = i document.getElementById('res').innerHTML += "<br>" + (Date.now() - time) time = Date.now() for (i = 0; i < l; i++) arr[i] = i document.getElementById('res').innerHTML += "<br>" + (Date.now() - time) </script>Немного пищи для размышлений: <div id='res'> </div> <script> var arr = [], l = 1e6, time, element = document.getElementById('res'); time = Date.now(); for (i = 0; i < l; i+=1) arr[i] = i element.innerHTML += "<br>" + (Date.now() - time) time = Date.now() for (i = 0; i < l; i++) arr[i] = i element.innerHTML += "<br>" + (Date.now() - time) time = Date.now() for (i = 0; i < l; ++i) arr[i] = i element.innerHTML += "<br>" + (Date.now() - time) time = Date.now(); for (i = 0; i < l; i+=1) arr[i] = i element.innerHTML += "<br>" + (Date.now() - time) </script> Хватит думать, что Вы умнее компилятора. |
|
B@rmaley.e><e,
wtf? Что за магия? И что это значит? Deff, так в том то и дело, что он поменял местами действия :) |
Цитата:
|
Chromium
![]() 9xakep, это значит, что компилятор умнее Вас и знает, что, как и когда нужно оптимизировать. Лучше не мешайте ему. А все Ваши "тесты" без подкрепления аргументами в виде описания проводимых движком оптимизаций не стоят ни гроша. < — это всё парсер лох. |
B@rmaley.e><e,
да я и не говорил, что умнее компилятора, лучше бы сразу сказали, что к чему, чем начинать оскорблять. :-E |
9xakep,
Оскорбили парсер, а отнюдь не тебя! (В некоторых вариантах парсер увеличивает длину кода |
Deff,
эм...что?) Я не оскорблял парсер... Или я туплю уже |
Цитата:
|
Deff,
Это я и так понял, только не я его оскорбил...Ладно пофиг, я действительно сейчас туплю) |
Цитата:
<div id="el"></div> <script> var arr = [], l = 1e6, timee, buffer, elem = document.getElementById("el"),id; id = setInterval(function tick() { time = Date.now(); for (i = 0; i < l; i += 1) arr[i] = i; buffer = "<br>" + (Date.now() - time); elem.innerHTML += buffer; }, 1000); elem.onclick = function() { clearInterval(id); }; </script> Вывод : Код:
25 |
Цитата:
А сравнивать производительность i++, ++i и i+=1 глупо — компилятор вполне может определить, где можно использовать более быстрый способ инкремента. |
Часовой пояс GMT +3, время: 18:46. |