От чего такая разница?
Почему массив в опере обрабатывается в 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>
|
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 03:57. |