Kilkakrotnie korzystałem z chart.js w moich projektach, ale nigdy nie używałem d3.js. Wiele osób twierdzi, że d3.js jest najlepszym frameworkiem javascript dla wykresów, ale żaden z nich nie jest w stanie wyjaśnić dlaczego, zwłaszcza gdy chcę porównać z chart.js.
Znalazłem to: http://www.fusioncharts.com/javascript-charting-comparison/, ale to nie jest to, czego szukałem.
Czy ktoś wie o porównaniu tych frameworków pod względem użyteczności i wydajności (tylko dla wykresów)?
javascript
d3.js
charts
chart.js
mendrugory
źródło
źródło
Odpowiedzi:
d3.js
nie jest biblioteką do tworzenia wykresów. Jest to biblioteka do tworzenia i manipulowania SVG / HTML. Udostępnia narzędzia pomagające wizualizować i manipulować danymi. Chociaż można go używać do tworzenia konwencjonalnych wykresów (słupkowych, liniowych, kołowych itp.), Jest w stanie o wiele więcej. Oczywiście z tym „zdolnym do tak wielu” przychodzi bardziej stroma krzywa uczenia się. Istnieje wiele tradycyjnych bibliotek wykresów wbudowanych na górzed3.js
-nvd3.js
,dimple.js
,dc.js
jeśli chcesz iść tą drogą.Nie jestem tego zaznajomiony,
Chart.js
ale szybki rzut oka na stronę internetową mówi mi, że jest to raczej zwykła biblioteka wykresów walcarek. Obsługuje 6 podstawowych typów wykresów i nie są nigdy zamiar zrobić rzeczy jak to z nim . Ale interfejs API wygląda na prosty i jestem pewien, że jest łatwy w użyciu.Poza tym najbardziej oczywistą różnicą między nimi jest to, że
Chart.js
jest oparty na płótnie, podczas gdyd3.js
dotyczy głównie SVG. (Teraz mówię głównie dlatego, żed3.js
można manipulować wszystkimi typami elementów HTML, więc można go nawet użyć do pomocy w rysowaniu na płótnie). Ogólnie płótnie będzie wykonywać SVG dla dużej liczby elementów (mówię bardzo duże - tysiące punktów, linii itp ...). Z drugiej strony SVG jest łatwiejszy w obsłudze i interakcji. Z SVG każdy punkt, linia itp. Staje się częścią DOM - chcesz, aby ten punkt był teraz zielony, po prostu go zmień. Płótno to statyczny rysunek, który miał zostać przerysowany, aby wprowadzić jakąkolwiek zmianę - oczywiście rysuje tak szybko, że zwykle nigdy nie zauważysz. Oto kilka dobrych lektur od firmy Microsoft.źródło
Ponieważ próbuję znaleźć bibliotekę szybkich wykresów, aby wyświetlać wykresy na urządzeniach mobilnych, wydajność była dla mnie ważna. Musiał też mieć licencję umożliwiającą komercyjne wykorzystanie. Porównałem:
Wykresy są ładowane wewnątrz komponentu WebView w natywnej aplikacji, a wszystkie dane (w tym biblioteka JS) są lokalne, więc nie ma spowolnienia z powodu żądań http. Aby jeszcze bardziej zmaksymalizować wydajność, umieściłem wszystko w jednym pliku.
Załadowałem 4 wykresy (linia, słupek, kołowy, kombinacja linia / słupek) razem z około 500 punktami danych.
Mój pomiar czasu nie obejmował faktycznego ładowania strony html. Mierzyłem od momentu, kiedy zacząłem używać kodu biblioteki wykresów do końca renderowania. Wszystkie animacje wykresów zostały wyłączone.
C3 zajmowało około 1500-1800 ms na nowoczesnych urządzeniach z Androidem i iPhone'ach. iPhone działał o około 100 ms lepiej niż Android.
Chart.js zajęło około 400-800 ms. Android działał około 300 ms lepiej niż iPhone.
Nic dziwnego, SVG jest wolniejszy. W zależności od przypadku użycia może być zbyt wolny.
Na komputerze stacjonarnym renderowanie w c3 trwało około 150-200 ms, a charts.js około 80-100 ms. Uruchomienie tego samego testu w emulatorze Androida i iPhone'a dało taki sam wynik jak na komputerze stacjonarnym. Tak więc spowolnienie na urządzeniach mobilnych jest zdecydowanie spowodowane ograniczeniami sprzętu / przetwarzania.
Mam nadzieję, że to pomoże
źródło
AKTUALIZACJA 2016
Ogólna zasada brzmi:
d3.js
- świetne do interaktywnych wizualizacjichart.js
- świetne do szybkiego i prostegoKilka innych bibliotek wykresów rośnie, więc kontynuuj testowanie i nie zapomnij przyczynić się do open source !
źródło
chart.js-
Używa znacznika płótna html5, który jest zależny od piksela, więc kiedy zmieniasz rozmiar wykresu generowanego przez chart.js, tracisz przejrzystość
-
Jest deklaratywny, co oznacza, że musisz po prostu zadeklarować wymagane dane wejściowe, aby wygenerować wykres
-
Krzywa uczenia się jest mniejsza
-
Rodzaje generowanych wykresów są predefiniowane i ograniczone
d3.js-
Używa svg, który jest niezależny od rozdzielczości, więc gdy zmienisz rozmiar wykresu wygenerowanego przez d3, nie stracisz przejrzystości
-
Jest to konieczne, oznacza, że musisz napisać logikę, aby wygenerować wykresy
-
Stroma krzywa uczenia się
-
Typy generowanych wykresów nie są wstępnie zdefiniowane i możesz utworzyć dowolny wykres
źródło