Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.06.2012, 14:58
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 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
__________________
оляля, ололо
Ответить с цитированием
  #2 (permalink)  
Старый 28.06.2012, 15:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

9xakep,
Он в консоле поди медленней, посколь там Dragonfly параллельно тестит все переходы и ошибки
пробуй через document.write или appendChild в div выводить
Ответить с цитированием
  #3 (permalink)  
Старый 28.06.2012, 15:57
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 28.06.2012, 16:11
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 28.06.2012, 16:14
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

круто-круто)) а какая опера, melky?
Ответить с цитированием
  #6 (permalink)  
Старый 28.06.2012, 16:16
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

Сообщение от 9xakep
) Там сказано, что гораздо оптимальнее делать так:
var arr = [], length, time;
так делать совсем необязательно, свойство «длина» сохраняется в кеше интерпретатора браузера, это никак не влияет на циклы.
http://2012.jsconf.us/
Vyacheslav Egorov - One day of life in V8

ну да, как минимум для в8)
Ответить с цитированием
  #7 (permalink)  
Старый 28.06.2012, 16:17
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от 9xakep
А я сейчас читаю Стояна Стефанова, по твоему совету ктстати) Там сказано, что гораздо оптимальнее делать так:
отлично этот совет устарел, ибо браузеры кешируют длину. об этом там написано, вроде

Сообщение от tadjik1 Посмотреть сообщение
круто-круто)) а какая опера, melky?
Цитата:
[melky@colch ~]$ opera --version
Opera 12.00 Build 1467 for Linux x86_64.
Ответить с цитированием
  #8 (permalink)  
Старый 28.06.2012, 16:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

melky,
Cовет тот жа - выведи не через алерт а в div
Ответить с цитированием
  #9 (permalink)  
Старый 28.06.2012, 16:22
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 28.06.2012, 16:27
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418



ПРОШУ ВСЕМ ПОКЛИКАТЬ
http://jsperf.com/array-iteration-comp





Сообщение от tadjik1
так делать совсем необязательно, свойство «длина» сохраняется в кеше интерпретатора браузера, это никак не влияет на циклы.
судя по тестам, только в V8. я думал, везде уже так.

Сообщение от Deff Посмотреть сообщение
melky,
Cовет тот жа - выведи не через алерт а в div
я сунул в jsperf, там будет ровнее статистика

Последний раз редактировалось melky, 28.06.2012 в 16:31.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скобки после имени функции. В чем разница, если они есть и если их нет? jsuse Общие вопросы Javascript 2 19.11.2011 16:11
Разница между (function(){})() и (function(){}()) ruzzx Общие вопросы Javascript 6 17.04.2011 22:51
Firefox - все отлично, CHROME/IE - не знаю с чего начать Pumych (X)HTML/CSS 3 16.02.2011 10:03
С чего начать...автоматическое преобразование в bb-code в html внутри textarea javasc Events/DOM/Window 0 22.01.2011 06:37
ТУЛ - бар подскажите с чего начать lex Общие вопросы Javascript 0 12.01.2010 23:14