Próbuję użyć node-unfluff
, która wyodrębnia zawartość z ciągów HTML. Jednak zwykle trwa to około 200ms. Ponieważ działa synchronicznie, jest to zbyt wolno. Chcę, aby był uruchamiany asynchronicznie.Web Workers vs child_process dla funkcji intensywnie obciążających procesor w Node.js
O ile mi wiadomo, moje opcje to Web Workers (https://github.com/audreyt/node-webworker-threads) lub child_process
(https://nodejs.org/api/child_process.html). Czy są inne lepsze opcje?
Jeśli nie, które z nich jest lepsze pod względem szybkości lub innych czynników?
Edit:
Jest też podaje na gogo (https://github.com/xk/node-threads-a-gogo) i malutki pracownika (https://github.com/avoidwork/tiny-worker).
Nici WebWorker nie obsługują require
, więc nie jest to już opcja.
Możliwe jest użycie plikówza pomocą Threads à gogo przy użyciu funkcji load
, ale wygląda na to, że jest to hacky.
Malutki pracownik ma obecnie tylko 26 gwiazdek na Githubie, więc nie chcę używać go w kodzie produkcyjnym. Obsługuje require
.
Rozważam napisanie własnej implementacji WebWorker przy użyciu child_process
, jeśli nie ma lepszych opcji.
można wyjaśnić sprawę użyć trochę więcej? Próbujesz uzyskać równoległość przetwarzania wielu adresów URL lub próbujesz w jakiś sposób zwiększyć wydajność w ramach węzła-unfluff? Jak wyobrażałeś sobie używanie procesów potomnych, gdy jesteś zależny od biblioteki w węźle? Dlaczego standardowe klastrowanie węzłów nie jest opcją na liście (pamiętając, że naprawdę polega to na procesach potomnych)? – SylonZero
Używam węzła jako serwera. Jeśli dana funkcja potrzebuje 200ms, żaden użytkownik nie może uzyskać odpowiedzi serwera w ciągu 200ms. Chcę, aby był on asynchroniczny, aby serwer nie był blokowany. Mogę użyć "child_process", aby rozpocząć inny proces Node. Nigdy wcześniej nie korzystałem z klastrowania w węźle, ale rozumiem, że tworzy on serwer dla każdego rdzenia. Jeśli 'node-unfluff' działa na każdym rdzeniu, to każdy serwer jest blokowany. –
OK, twoje pytanie zaczyna być wyraźniejsze. Jednak nawet jeśli instancja funkcji (przy użyciu węzła-unfluff) jest synchroniczna, nie uniemożliwia to wystrzelenia innych instancji dla innych żądań dla węzła. Zatem pojedynczy użytkownik może czekać 200 ms, ale to zwykle nie oznacza, że nie można uruchomić żądań dla * innych * użytkowników.Czy przetestowałeś i okazało się, że za pomocą tego modułu unfluff faktycznie blokuje współbieżne żądania? – SylonZero