ChartGPU – WebGPU आधारित हाई-परफॉर्मेंस चार्ट लाइब्रेरी (1M points को 60fps पर render करना)
(github.com/ChartGPU)- WebGPU का उपयोग करके बड़े datasets को स्मूद तरीके से render करने वाली open source chart library है
- TypeScript में लिखी गई है और line·area·bar·scatter·pie·candlestick जैसे कई series types को support करती है
- hover highlight, tooltip, crosshair, zoom gestures, theme presets जैसी interactive features built-in हैं
- React integration package (chartgpu-react) के जरिए React environment में भी आसानी से इस्तेमाल की जा सकती है
- WebGPU accelerated rendering के साथ 60 frames per second स्तर का performance देती है, इसलिए large-scale data visualization के लिए उपयुक्त tool है
अवलोकन
- ChartGPU एक WebGPU आधारित हाई-परफॉर्मेंस chart rendering library है, जो बड़े पैमाने के data को स्मूद तरीके से visualize कर सकती है
- यह TypeScript में विकसित की गई है और MIT license के तहत जारी की गई है
npm install chartgpuकमांड से install किया जा सकता है
मुख्य फीचर्स
- WebGPU accelerated rendering के जरिए बड़े datasets में भी high FPS बनाए रखती है
- कई chart types का support: line, area, bar, scatter, pie, candlestick
- interactive features built-in: hover highlight, tooltip, crosshair
- data streaming updates का support (
appendData(...)) - X-axis zoom फीचर उपलब्ध (gestures और slider UI सहित)
- theme presets (
dark/light) और custom themes का support
आर्किटेक्चर
ChartGPU.create(...)canvas और WebGPU lifecycle को manage करता है, जबकि rendering coordination की जिम्मेदारी Render Coordinator संभालता है- इसकी आंतरिक संरचना निम्न layers से बनी है
- WebGPU Core: GPU adapter और device initialization, canvas configuration
- Render Coordinator: layout, scale, data upload, render pass management
- GPU Renderers: Grid, Area, Bar, Scatter, Line, Pie, Candlestick आदि प्रत्येक chart के लिए renderer
- Shaders(WGSL) : प्रत्येक renderer के अनुरूप shader files से बना
- Chart Sync: कई charts के बीच crosshair synchronization फीचर प्रदान करता है
React integration
- React के लिए chartgpu-react package उपलब्ध है
- install:
npm install chartgpu-react
ब्राउज़र support
- WebGPU enabled browser आवश्यक है
- Chrome 113+, Edge 113+, Safari 18+ supported
- Firefox पर फिलहाल development जारी है
1 टिप्पणियां
Hacker News की टिप्पणियाँ
मैं uPlot का maintainer हूँ। यह प्रोजेक्ट दिलचस्प लगा, इसलिए इसे जल्द गहराई से देखने वाला हूँ
1M डेमो को थोड़ी देर देखने पर लगा कि,
[[0,1],[1,3],[2,2]]जैसे data format में लाखों छोटे arrays बनाने पड़ते हैं, इसलिए इसे column-based data structure में बदलना बेहतर होगाजानकारी के लिए, uPlot का 2M data points demo भी है
LTTB sampling और idle CPU issue, दोनों ही सही points हैं। sampling demo में default रूप से enabled है, लेकिन
sampling: noneके साथ निष्पक्ष comparison किया जा सकता है। UI में toggle जोड़ने की योजना है।idle state में भी render loop लगातार चलते रहने वाली समस्या को ठीक किया जा सकता है। इसे बेहतर बनाकर केवल data change या interaction के समय render कराने की योजना है
line chart के मामले में, adjacent points के बीच pixel-level difference के आधार पर adaptive sampling करने पर ज़्यादातर points हटा देने के बाद भी visual difference नहीं दिखता।
1000-pixel चौड़ाई वाले chart पर 10 लाख points draw करना अप्रभावी है
जब data points बहुत ज़्यादा हों, तो हर pixel में आने वाले points की संख्या गिनकर brightness या color से intensity दिखाना बेहतर होता है
यह electronics की digital phosphor पद्धति जैसा है। उदाहरण के लिए यह लिंक देखें
खासकर scatter plot में cluster structure दिखाने के लिए यह उपयोगी है। इसे ideas list में जोड़ रहा हूँ
idle CPU usage patch पूरा कर लिया है।
1M benchmark example में “Benchmark mode” toggle जोड़ा है, ताकि benchmark functionality बनी रहे और inactive state में भी यह efficiently काम करे
FPS का 0 दिखना सामान्य है — जब render करने के लिए कुछ नहीं होता, तब frame draw नहीं होता। ज़रूरत पड़ने पर यह तुरंत maximum speed पर render करता है
community के जज़्बाती feedback से प्रभावित हूँ
मैं browser-based Link Graph analysis tool बना रहा हूँ (webvetted.com/workbench)
मुझे ऐसे graphs visualize करने हैं जिनमें हज़ारों nodes/edges हों, तो अगर यह 1M points संभाल सकता है, तो यह बहुत मददगार हो सकता है
लेकिन WebGPU rendering patterns graph visualization में भी अच्छी तरह लागू हो सकते हैं। scatter renderer पहले से हज़ारों instances संभाल रहा है, इसलिए edges जोड़ना भी structural रूप से कठिन नहीं होगा
पूछा गया कि graph functionality को ChartGPU में integrate करना बेहतर होगा, या इसे अलग GraphGPU library के रूप में रखना चाहिए
प्रभावशाली। लगा कि यह सबसे प्रभावशाली demos में से एक है
candlestick के लिए lines और bands draw करने की सुविधा जोड़ना अच्छा होगा। सिर्फ plotting ही नहीं, points को highlight करने की क्षमता भी होनी चाहिए
पहले मैंने WebGPU में कुछ ऐसा खुद बनाने की कोशिश की थी, लेकिन इस प्रोजेक्ट को देखकर इसे खुद इस्तेमाल करने का मन हो गया
मैं TimeLine का maintainer हूँ। ChartGPU का live streaming demo(लिंक) उम्मीद से कम smooth है
तुलना के लिए, main thread पर 2D canvas से बना यह demo काफ़ी ज़्यादा smooth चलता है
संबंधित files के लिए webgpu-pro.md और webgpu-expert.md देखें
1M points example में slider bug मिला (लिंक)
drag करते समय slider cursor के नीचे नहीं रहता और अनपेक्षित दूरी तक खिसक जाता है
यह data zoom slider के coordinate mapping issue से जुड़ा है, और इसे high priority पर ठीक किया जाएगा
बधाई, लेकिन 1M points finance domain में सामान्य स्तर है
जो rendering engine अभी विकसित कर रहे हैं, उसने पहले के 10 million points से performance को बढ़ाकर 100 million points तक पहुँचा दिया है
demo video देखें
Plotly तो कई साल पहले से ही WebGL के साथ 10 million से अधिक points संभाल सकता था
ऐसे समान features वाली libraries काफ़ी हैं
performance demo देखें