28.06.2012, 14:58
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
От чего такая разница?
Почему массив в опере обрабатывается в 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
__________________
оляля, ололо
|
|
28.06.2012, 15:14
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
9xakep,
Он в консоле поди медленней, посколь там Dragonfly параллельно тестит все переходы и ошибки
пробуй через document.write или appendChild в div выводить
|
|
28.06.2012, 15:57
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
потестим :
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.
Последний раз редактировалось melky, 28.06.2012 в 16:20.
|
|
28.06.2012, 16:11
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
А я сейчас читаю Стояна Стефанова, по твоему совету ктстати) Там сказано, что гораздо оптимальнее делать так:
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
__________________
оляля, ололо
Последний раз редактировалось 9xakep, 28.06.2012 в 16:19.
|
|
28.06.2012, 16:14
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
круто-круто)) а какая опера, melky?
|
|
28.06.2012, 16:16
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
Сообщение от 9xakep
|
) Там сказано, что гораздо оптимальнее делать так:
var arr = [], length, time;
|
так делать совсем необязательно, свойство «длина» сохраняется в кеше интерпретатора браузера, это никак не влияет на циклы.
http://2012.jsconf.us/
Vyacheslav Egorov - One day of life in V8
ну да, как минимум для в8)
|
|
28.06.2012, 16:17
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от 9xakep
|
А я сейчас читаю Стояна Стефанова, по твоему совету ктстати) Там сказано, что гораздо оптимальнее делать так:
|
отлично этот совет устарел, ибо браузеры кешируют длину. об этом там написано, вроде
Сообщение от tadjik1
|
круто-круто)) а какая опера, melky?
|
Цитата:
|
[melky@colch ~]$ opera --version
Opera 12.00 Build 1467 for Linux x86_64.
|
|
|
28.06.2012, 16:19
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
melky,
Cовет тот жа - выведи не через алерт а в div
|
|
28.06.2012, 16:22
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Сообщение от melky
|
отлично этот совет устарел, ибо браузеры кешируют длину. об этом там написано, вроде
|
неа...мб издание старое..2011 год.
ссыль
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>
__________________
оляля, ололо
Последний раз редактировалось 9xakep, 28.06.2012 в 16:27.
|
|
28.06.2012, 16:27
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от tadjik1
|
так делать совсем необязательно, свойство «длина» сохраняется в кеше интерпретатора браузера, это никак не влияет на циклы.
|
судя по тестам, только в V8. я думал, везде уже так.
Сообщение от Deff
|
melky,
Cовет тот жа - выведи не через алерт а в div
|
я сунул в jsperf, там будет ровнее статистика
Последний раз редактировалось melky, 28.06.2012 в 16:31.
|
|
|
|