Próbuję wybrać odpowiednią technologię do aktualizacji projektu, która w zasadzie renderuje tysiące punktów na powiększalnym, przesuwalnym wykresie. Obecna implementacja przy użyciu Protovis jest gorsza. Sprawdź to tutaj:
http://www.planethunters.org/classify
Po całkowitym oddaleniu jest około 2000 punktów. Spróbuj użyć uchwytów na dole, aby nieco powiększyć, i przeciągnij, aby przesuwać. Zobaczysz, że jest dość niestabilny, a zużycie procesora prawdopodobnie wzrasta do 100% na jednym rdzeniu, chyba że masz naprawdę szybki komputer. Każda zmiana w obszarze ostrości wywołuje przerysowanie do protovis, które jest cholernie wolne i jest gorsze, gdy rysuje się więcej punktów.
Chciałbym dokonać pewnych aktualizacji interfejsu, a także zmienić podstawową technologię wizualizacji, aby była bardziej responsywna podczas animacji i interakcji. Z poniższego artykułu wynika, że można wybrać między inną biblioteką opartą na SVG lub biblioteką opartą na płótnie:
http://www.sitepoint.com/how-to-choose-between-canvas-and-svg/
d3.js , który wyrósł z Protovis, jest oparty na SVG i ma być lepszy w renderowaniu animacji . Jednak mam wątpliwości, o ile lepszy i jaki jest jego sufit wydajności. Z tego powodu rozważam również bardziej kompletny przegląd przy użyciu biblioteki opartej na płótnie, takiej jak KineticJS . Zanim jednak zajdę zbyt daleko w stosowanie tego czy innego podejścia, chciałbym usłyszeć od kogoś, kto wykonał podobną aplikację internetową z tak dużą ilością danych i uzyskać jego opinię.
Najważniejsza jest wydajność, z drugorzędnym naciskiem na łatwość dodawania innych funkcji interakcji i programowania animacji. Prawdopodobnie nie będzie więcej niż 2000 punktów naraz, z tymi małymi słupkami błędów na każdym z nich. Powiększanie, pomniejszanie i przesuwanie musi być płynne. Jeśli najnowsze biblioteki SVG są w tym przyzwoite, być może łatwość korzystania z d3 przeważy nad zwiększoną konfiguracją dla KineticJS itp. Ale jeśli jest ogromna przewaga wydajności w używaniu płótna, szczególnie dla ludzi z wolniejszymi komputerami, to ja zdecydowanie wolałby iść tą drogą.
Przykład aplikacji stworzonej przez NYTimes, która używa SVG, ale nadal animuje się w akceptowalny sposób płynnie: http://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html . Gdybym mógł uzyskać taką wydajność i nie musiałbym pisać własnego kodu do rysowania na płótnie, prawdopodobnie wybrałbym SVG.
Zauważyłem, że niektórzy użytkownicy używali hybrydy manipulacji d3.js połączonej z renderowaniem na płótnie . Jednak nie mogę znaleźć dużo dokumentacji na ten temat w Internecie ani skontaktować się z operatorem tego postu. Jeśli ktoś ma jakieś doświadczenie w realizacji tego rodzaju implementacji DOM-to-Canvas ( demonstracja , kod ), również chciałbym poznać Twoją opinię. Wydaje się, że jest to dobra hybryda możliwości manipulowania danymi i posiadania niestandardowej kontroli nad ich renderowaniem (a tym samym wydajnością), ale zastanawiam się, czy konieczność ładowania wszystkiego do DOM nadal będzie spowalniać.
Wiem, że istnieją pytania podobne do tego, ale żadne z nich nie dotyczy dokładnie tego samego. Dzięki za pomoc.
Kontynuacja : implementacja, z której korzystałem, znajduje się na https://github.com/zooniverse/LightCurves