瀏覽器四種可視化方案html/css、svg、canvas、webgl比較


用CSS實現柱狀圖其實很簡單,原理就是使用網格布局(Grid Layout)加上線性漸變,缺點不能用數據直接對應,需要換算轉化。

SVG元素和HTML元素一樣,在輸出圖形前都需要經過引擎的解析、布局計算和渲染樹生成。
無論是使用HTML/CSS還是SVG,它們都屬於聲明式繪圖。

Canvas2D不同,它是瀏覽器提供的一種可以直接用代碼在一塊平面的“畫布”上繪制圖形的API,使用它來繪圖更像是傳統的“編寫代碼”,簡單來說就是調用繪圖指令,然后引擎直接在頁面上繪制圖形。這是一種指令式的繪圖系統。
Canvas能夠直接操作繪圖上下文,不需要經過HTML、CSS解析、構建渲染樹、布局等一系列操作。因此單純繪圖的話,Canvas比HTML/CSS和SVG要快得多。
Canvas並沒有區分“A柱子”、“B柱子”,這讓我們很難單獨對Canvas繪圖的局部進行控制。
舉個例子,我們可以先使用SVG生成某些圖形,然后用Canvas來渲染。這樣,我們就既可以享受SVG的便利性,又可以享受Canvas的高性能了。

WebGL不基於canvas,繪制比前三種方式要復雜一些,因為WebGL是基於OpenGL ES規范的瀏覽器實現的,API相對更底層,使用起來不如前三種那么簡單直接。
如果我們要繪制的圖形數量非常多,比如有多達數萬個幾何圖形需要繪制,而且它們的位置和方向都在不停地變化,那我們即使用Canvas2D繪制了,性能還是會達到瓶頸。這個時候,我們就需要使用GPU能力,直接用WebGL來繪制。

1、HTML+CSS 的優點是方便,不需要第三方依賴,甚至不需要 JavaScript 代碼。如果我們要繪制少量常見的圖表,可以直接采用 HTML 和 CSS。它的缺點是 CSS 屬性不能直觀體現數據,繪制起來也相對麻煩,圖形復雜會導致 HTML 元素多,而消耗性能。

2、SVG 是對 HTML/CSS 的增強,彌補了 HTML 繪制不規則圖形的能力。它通過屬性設置圖形,可以直觀地體現數據,使用起來非常方便。但是 SVG 也有和 HTML/CSS 同樣的問題,圖形復雜時需要的 SVG 元素太多,也非常消耗性能。

3、Canvas2D 是瀏覽器提供的簡便快捷的指令式圖形系統,它通過一些簡單的指令就能快速繪制出復雜的圖形。由於它直接操作繪圖上下文,因此沒有 HTML/CSS 和 SVG 繪圖因為元素多導致消耗性能的問題,性能要比前兩者快得多。但是如果要繪制的圖形太多,或者處理大量的像素計算時,Canvas2D 依然會遇到性能瓶頸。

4、WebGL 是瀏覽器提供的功能強大的繪圖系統,它使用比較復雜,但是功能強大,能夠充分利用 GPU 並行計算的能力,來快速、精准地操作圖像的像素,在同一時間完成數十萬或數百萬次計算。另外,它還內置了對 3D 物體的投影、深度檢測等處理,這讓它更適合繪制 3D 場景。


來源:https://time.geekbang.org/column/article/252076


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM