2012-10-08 12 views
9

Używam Node.js do przechodzenia przez , co może ostatecznie być ładna duża tablica wpisów.Long Loops in Node.js: Yielding Using Timers?

Gdybym robił coś podobnego przy użyciu kodu JavaScript po stronie klienta, użyłbym timerów as explained here, aby nie blokować wątku.

Moje pytanie brzmi: "Czy nadal jest po stronie serwera dobrej praktyki?" lub "Czy powinienem inaczej podejść do problemu?"

+0

To może być potencjalnie gorsze na serwerze, ponieważ może zablokować wszystkich, a nie tylko jednego użytkownika. –

Odpowiedz

14

Właściwym sposobem na to w węźle node.js jest podzielenie pracy na porcje i użycie process.nextTick do kolejkowania następnej porcji, gdy aktualna została zakończona. W ten sposób można zezwolić na wykonywanie innych oczekujących wywołań zwrotnych między każdą porcją pracy.

UPDATE: od node.js 0,10 setImmediate zazwyczaj powinien być stosowany zamiast process.nextTick do tego celu, ponieważ setImmediate ustępuje pętli zdarzeń, aby upewnić się, że I/O nie są pozbawione, ale process.nextTick nie.

1

Propozycja JohnnyHK jest ważna. Uważałbym webmarki, gdy zadanie może być wykonane później (np. Dodano do kolejki).

-2

Zobacz bibliotekę async. Zapewnia asynchroniczną wersję zwykłych metod gromadzenia danych (map, filter, each ...). AFAIK, przetwarzając swoją tablicę asynchronicznie, nie będzie blokował innych procesów ani użytkowników.