LINUX.ORG.RU

Производительность for в Node.js/io.js

 , ,


0

3

сегодня подрались с сеньором по поводу использования циклов по элементам массива.

Он сказал, что все должно быть асинхронным (async), а я настаивал на использовании простого for loop с индексом массива или while, т.к. внутри цикла мы не делаем никаких операций ввода-вывода.

Зы. C# смотрит на проблемы JS как ... Он вообще не смотрит на JS и обходится обычным for each. Для массивов.

Зы.зы. Все таки интерсно, почему производительность Array.forEach такая низкая?

Перемещено JB из talks

Ответ на: комментарий от EnterpriseMobility

Мне кажется, что мне было достаточно написать «если цикл долгий», чтобы было понятно то, что мой комментарий относится к циклам не по массивам размером в 5-10 элементов?

Tark ★★
()
Ответ на: комментарий от EnterpriseMobility

а разве цикл по 5-10 элементам массива может быть долгим?

Это смотря что ты в цикле делаешь.

risenshnobel ★★★
()

почему производительность Array.forEach такая низкая?

Let O be the result of calling ToObject passing the this value as the argument.
Let lenValue be the result of calling the [[Get]] internal method of O with the argument "length".
Let len be ToUint32(lenValue).
If IsCallable(callbackfn) is false, throw a TypeError exception.
If thisArg was supplied, let T be thisArg; else let T be undefined.
Let k be 0.
Repeat, while k < len
Let Pk be ToString(k).
Let kPresent be the result of calling the [[HasProperty]] internal method of O with argument Pk.
If kPresent is true, then
Let kValue be the result of calling the [[Get]] internal method of O with argument Pk.
Call the [[Call]] internal method of callbackfn with T as the this value and argument list containing kValue, k, and O.
Increase k by 1.
Return.

while k < len

while k < len

while k < len

system-root ★★★★★
()
Ответ на: комментарий от EnterpriseMobility

Ограничить длину запроса не забудь, а то DOS.

PolarFox ★★★★★
()
Ответ на: комментарий от backburner

Это хоть какие-то профиты дает?

Нет, один гемор.

PolarFox ★★★★★
()
Ответ на: комментарий от backburner

Конкретно однопоточность - нет. Событийно-ориентированность дает очень высокую скорость работы. А однопоточность это вообще не проблема, т.к. можно использовать горизонтальное масштабирование.

Black_Roland ★★★★
()
Ответ на: комментарий от EnterpriseMobility

все что угодно, потому что тут ты начнешь использовать это, а другой чувачок в другом месте начнет использовать тоже самое, но задача будет другой

umren ★★★★★
()

Он сказал, что все должно быть асинхронным (async)

он просто перфекционист, как и многие. Один язык, одна парадигма, один патерн и прочее. (так проще, красивей и т.п.)

Тот или иной подход нужно рассматривать к применению в зависимости от ситуации.

Dron ★★★★★
()

Posted on October 18, 2010.

Все таки интерсно, почему производительность Array.forEach такая низкая?

Сегодняшний выпуск передачи «Я и мой сеньёр» посвящен проблемам современности.

Vit ★★★★★
()
Ответ на: комментарий от backburner

Я ноду не использовал, мне Рабинович напел, а вообще однопоточность в некоторых специфических случаях дает определенный профит, например в случае redis это гарантирует атомарность определенных опецраций.

Tark ★★
()
Ответ на: комментарий от dizza

я с JS недавно нахожусь в половой близости. Раньше я свободно использовал for each в этом ихнем C#

EnterpriseMobility
() автор топика

forEach используют, что б не думать о том, что переменная-итератор может иметь разные значения при создании и при вызове калбака.

ya-betmen ★★★★★
()

[troll mode]
Тема для докторской диссертации:
«Асинхронное выполнение циклов в реальном времени»
[/troll mode]

Shadow ★★★★★
()
Ответ на: комментарий от EnterpriseMobility

А ты думаешь, что одно ядро процессора умеет асинхронный код исполнять? Вся эта асинхронность за счет переключений контекста делается.

Gorthauer ★★★★★
()
Ответ на: комментарий от Gorthauer

я вот сам этого не понимаю.

Должна быть некая эвристика: если внутри цикла - асинхронная операция ввода вывода, то цикл должен быть тоже async.

EnterpriseMobility
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.