Aktualnie pracuję nad problemem, który wymaga, aby moja aplikacja internetowa generowała wykres reprezentujący około 50k do 60 tys. Punktów danych. Ładuje się dość szybko (~ 6 sekund), ale zastanawiam się, czy można użyć D3.js do wygenerowania wykresu w Web Worker, a następnie przekazać SVG do załadowania na stronę.Używaj Web Worker'a i D3.js do asynchronicznego generowania wykresów?
Odpowiedz
Pracownicy WWW nie mają dostępu do DOM, więc wszystko, co możesz zrobić po tej stronie, to zbudowanie czegoś, co może być użyte do szybkiego utworzenia DOM. Pracownik (y) mógłby np. Przetwarzać zbiory danych i wykonywać wszystkie ciężkie obliczenia, a następnie przekazywać wyniki z powrotem jako zbiór tablic.
https://github.com/mbostock/d3/commit/43d38773623b52209d2667287a1ae626fb95b0d9
Niedawny popełnienia przez Jason Davies. Mike Bostock mówi, że w przyszłości kod zależny od DOM zostanie oddzielony od d3.core i w ten sposób można stworzyć niestandardową kompilację d3, która działa z interfejsem API dla web-pracowników.
Miałem ten sam problem, gdy mam wykres ukierunkowany na siłę z dużą liczbą węzłów. Czuje się bardzo powolny. Chcę w jakiś sposób poprawić wydajność. Myślę, że ostatni wątek z phantomJS na serwerze węzła jest dobrym pomysłem, ale opóźnienie sieci związane z podejściem zrujnuje gładkie uczucie kierowane siłą.
, więc gdzie znaleźć pozbawiony D3 bez zależności domena? –
udało mi się obliczyć akordy i grup układ akordów za pomocą pracownika internetowej, wykonując następujące czynności:
stworzyć zwyczaj budowania D3, które nie mają dependecy na obiekcie dokumentu lub DOM (patrz: https://github.com/mbostock/smash/wiki)
utworzyć plik pracownika internetowej i korzystać
importScripts
załadować zwyczaj d3 budowęaktywować pracownika w kodzie renderowania. Kiedyś obietnicę hermetyzacji komunikacji z pracownikiem:
calculateChords = (padding, matrix) -> deferred = $.Deferred() worker = new Worker("worker.js") worker.onmessage = (e) -> deferred.resolve(e.data.groups, e.data.chords); worker.postMessage { matrix: matrix } deferred.promise()
później w funkcji renderowania:
calculateChords(matrix).then (groups, chords) -> ...
W rzeczywistości można uruchomić standardowego d3 w usłudze WWW, jeśli zostawisz prawe (fałszywe) obiekty leżące wokół, aby uspokoić d3 podczas uruchamiania. Głównym problemem jednak (przy użyciu d3 z pracownikami WWW) są koszty ogólne serializacji w wiadomościach wysyłania i odbierania. Byłbym bardzo zainteresowany, aby dowiedzieć się, czy ktoś wymyślił miłą metodę korzystania z obiektów przenośnych w celu uniknięcia serializacji. –
- 1. Jak mogę używać biblioteki d3 (np. C3.js) po stronie serwera do generowania wykresów w nodejs?
- 2. Łączenie d3.js i backbone.js
- 3. d3.js: jak tworzyć "ukierunkowane na siłę klastry wykresów"
- 4. Narzędzie do generowania wykresów z danych Xml
- 5. Warstwowe wykresy w d3.js
- 6. d3.js GeoJSON i granice
- 7. Ograniczony d3.js Wyświetlanie siły
- 8. Próbuję dodać wiele wykresów D3
- 9. D3.js - ładowanie i manipulowanie danymi zewnętrznymi
- 10. D3.js, potrzeba zdarzenia kliknięcia w d3.js
- 11. D3.js: łączenie selekcji?
- 12. geochart w d3.js
- 13. Porównanie dla biblioteki D3.js kontra zingChart dla wizualizacji i tworzenia wykresów
- 14. rozmiar czcionki nie działa w moim kodzie d3.js
- 15. Filtrowanie danych JS D3
- 16. d3.js & nvd3.js osi i etykiety formatowania precyzja
- 17. d3.js Dodaj krąg w d3.geo.path
- 18. D3.js łączenie paska i wykresu liniowego
- 19. Najłatwiejsze sposoby generowania wykresów z Pythona?
- 20. Etykietki d3 dla wielu połączonych wykresów dc.js
- 21. kłopoty z wprowadzeniem do d3.js
- 22. d3.js domyślny axis.tickFormat do 24 godzinnym
- 23. CSV do tablicy w d3.js
- 24. Pierwsze d3.js do pracy z raphael.js
- 25. Dołączanie obrazu d3.js do elementu div
- 26. d3 js - ładowanie json bez http get
- 27. Pętla Wielowymiarowa macierz do generowania wielowymiarowych macierzy dla wykresów Google
- 28. Czy jest jakaś sztuczka do używania wykresów d3 w jsf?
- 29. Jakie algorytmy używa D3.js do wykresu ukierunkowanego na siłę?
- 30. Rozwiązania do tworzenia wykresów dla Yesod
Dzięki. Bałem się, że to będzie odpowiedź. – user1449496
To już stare pytanie, ale ... A co z phantomJS? – meetamit
@meetamit, które mogą być opcja myślę, wygenerować DOM na serwerze z phantomJS, a następnie przekazać go do klienta? ale to nie jest użycie Workers Web, co było pytaniem. –