Цитата:
|
Я думал, что она быстра из-за 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.