powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / V8 и for(... in ...)
4 сообщений из 4, страница 1 из 1
V8 и for(... in ...)
    #38063431
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько быстро в V8 (Node.js) выполняется операция for(index in array), если в этот массив часто добавляются новые элементы и удаляются периодически из середины?
В каком формате V8 хранит такой массив? По-любому ведь вся память не занимается уже удалёнными элементами (после прохода сборщика мусора). Там используются списки?
То есть вопрос в том, стоит ли изобретать велосипед и делать двусвязный список и руками удалять элементы, или можно понадеяться, что for(... in ...) не будет уступать в скорости обходу элементов двусвязного списка?
...
Рейтинг: 0 / 0
V8 и for(... in ...)
    #38064320
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шогал,

руками это push/shift pop/unshift?
вы не сможете работать с массивом быстрее, чем работает сам язык.
вообще, на больших объемах надо избегать ассоциативных массивов и использовать обычный прямой цикл с кешированием for( var i= 0, l = a.length; i < l; i++){var item = a[i];}, который где-то на порядок быстрее for-in
если у вас бешеное кол-во данных, можно посмотреть в сторону всяких алгоритмов правильного хранения данных в памяти, красные/черные деревья и прочее.
...
Рейтинг: 0 / 0
V8 и for(... in ...)
    #38064516
Шогал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, руками имел ввиду типа того:
Код: javascript
1.
2.
3.
for(var obj = list.head; obj != null; obj = obj.next){
  // ... выполняем действия с obj
}


Добавляем соответственно очень просто:
Код: javascript
1.
2.
3.
4.
5.
var x = new listitem();
x.prev = list.tail;
if(x.prev) x.prev.next = x;
x.next = null;
list.tail = x;


Удаляем:
Код: javascript
1.
2.
3.
4.
5.
if(x.prev) x.prev.next = x.next;
else list.head = x.next;
if(x.next) x.next.prev = x.prev;
else list.tail = x.prev;
delele x; // отдаём на растерзание гарбейдж коллектору


Будет ли подобная структура быстрее ассоциативных массивов? Накладные расходы на два указателя в каждом элементе некритичны.
(разумеется, это не конечный код, а просто набросал пример, в конечном варианте ещё нужно предусмотреть, если список пустой и т.п.)
...
Рейтинг: 0 / 0
V8 и for(... in ...)
    #38065396
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шогал,

Ну это легко проверить, берете свою структуру, наполняете её рандомными данными, и теми же данными массив, берете новую дату, запускаете 1000 пробегов по вашей структуре, берете дату вычитаете из взятой первую, получаете время. То же самое делаете с for-in, сравниваете.

Иногда результаты удивляют. Еще интересно в разных браузерах посмотреть.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / V8 и for(... in ...)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]