用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來繪制。