Показать сообщение отдельно
  #20 (permalink)  
Старый 27.10.2011, 13:01
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Цитата:
Я думал, что она быстра из-за V8,
Не надо забывать что DART логически вытекает из V8.

насчёт скорости, я думаю притензии к непредсказуемому количеству св-в.
var test={};

for (var i=0;i<1000;i++){
   test["x"+i]="sad"
}
//когда будет исполнятся эта строка интерпритатору придётся проверить есть ли свой-ство x999
// Компилятор не будет знать и подавно. Ему придётся вставить  вызов попрограмки, для проверки существования св-ва и возврата значения.
alert (test.x999);


В классах это количество вполне предсказуемо

class d{
      public int a=1;
      public int b=2;
}
d test=new d();
alert(test.a);


В случае с классами, компилятор, может указать напрямую в исполняемом коде адрес памяти в которой хранится значение. Алгоритм присваивания значения, компилятор может создать прямо здесь же.

В случае с javaScript мы не знаем сущуствует ли свойство вообще. Поэтому сначало должны выяснить 1) есть ли оно вообще, 2) что оно из себя представляет, 3) и только потом где его взять. Соответственно в коде придётся хранить индекс в таблице св-в, работать с таблицей, а затем для установки значений некоторых св-в вызывать подпрограммы.
Это сотни лишних тактов процессора.

Предположим у вас в цикле 10 св-в обьекта, цикл исполняется 1000 раз.
100 тактов обслуживания *10 переменных*1000циклов=1 000 000 -лишних тактов.


Это написано на глазок, думаю в реале всё намного лохмаче.
Что касается динамических обьектов вообще, в том же C++ или Delphi, статическими массивы быстрее динамических раза в 3.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 27.10.2011 в 14:07.
Ответить с цитированием