ECharts 4 有什么新特性璧微?

ECharts 在1月16日發(fā)布新版本 V4.0.0 了邑雅。我們老大當(dāng)天晚上就在微信上分享了這個“重磅”消息嗦玖,然后讓我們準(zhǔn)備新版本升級患雇。
那 ECharts 4 到底多了那些厲害的新特性呢?我先來分析分析宇挫。

現(xiàn)在打開ECharts官網(wǎng)苛吱,首頁就是一個滿屏“超大寫”的 4。夠簡潔也夠霸氣器瘪。

先看版本說明又谋,找到v4.0.0。主要變更有:

  1. 支持最高達(dá)千萬級數(shù)據(jù)量渲染娱局。
  2. ZRender SVG渲染引擎發(fā)布彰亥。
  3. 新增 dataset 組件。
  4. 發(fā)布旭日圖(sunburst)衰齐。
  5. 支持無障礙富互聯(lián)網(wǎng)應(yīng)用規(guī)范集任斋。
  6. labelitemstyle等配置被扁平化。
  7. 兩套內(nèi)置的顏色主題废酷。
  8. 支持legend.data不指定時瘟檩,自動根據(jù)系列生成。
  9. 支持類目軸(axis.type: 'category')中 axis.data不指定時澈蟆,自動根據(jù)數(shù)據(jù)生成墨辛。

這些更新中,大多數(shù)人會特別關(guān)注的就是前三個吧趴俘。而1和2都關(guān)系到圖表渲染性能睹簇,dataset則方便對數(shù)據(jù)的管理,聽著就讓人躍躍欲試了寥闪。

而其他的特性太惠,比如“支持無障礙富互聯(lián)網(wǎng)應(yīng)用規(guī)范集”,雖然方便了更多殘障人士訪問挺有意義疲憋,但是應(yīng)用場景不多凿渊,至少我們的項(xiàng)目還沒有考慮到這個需求。所以不做調(diào)研缚柳。

只分析分析前三個特性埃脏。

支持最高達(dá)千萬級數(shù)據(jù)量渲染

對于大數(shù)據(jù)量的渲染場景,支持了增量加載數(shù)據(jù)(支持用戶對數(shù)據(jù)分塊后加載)和漸進(jìn)渲染(支持交互的無阻塞)秋忙。

增量加載參考示例大量數(shù)據(jù)的lines-ny彩掐。
漸進(jìn)渲染參考示例lines-airline

這兩個例子翰绊,Chrome上表現(xiàn)還是不錯的佩谷。數(shù)據(jù)分塊加載旁壮,縮放平移也還流暢监嗜。

但是IE上就體驗(yàn)很差了,有的例子(比如lines-ny)直接報錯抡谐,無法運(yùn)行裁奇。

不過,要是數(shù)據(jù)量大麦撵,而且還是動態(tài)圖表刽肠,那就不好說了。比如1w節(jié)點(diǎn)2w7邊的NPM依賴圖免胃,在Chrome上也嚴(yán)重卡頓音五。

ZRender SVG渲染引擎

ECharts 4 支持 canvas / SVG雙引擎渲染了!還可以按照場景所需進(jìn)行切換羔沙!而且做法很方便躺涝。

SVG 和 Canvas 這兩種使用方式差異很大的技術(shù),能夠做到同時被透明支持扼雏,主要?dú)w功于 ECharts 底層庫 ZRender 的抽象和實(shí)現(xiàn)坚嗜,形成可互換的 SVG 渲染器和 Canvas 渲染器夯膀。

默認(rèn)還是Canvas渲染,如果要改成SVG苍蔬,就在init()時候設(shè)置renderer參數(shù)诱建。
init函數(shù) API:

(dom: HTMLDivElement|HTMLCanvasElement, theme?: Object|string, opts?: {
    devicePixelRatio?: number
    renderer?: string
    width?: number|string
    height? number|string
}) => ECharts

如果要指定使用SVG渲染圖表:

var myChart = echarts.init(dom,'',{renderer:'svg'});

實(shí)際效果如何呢?
我分別用普通小數(shù)據(jù)的區(qū)域圖area-simple和大量數(shù)據(jù)的航線地圖 lines-airline感受了一下碟绑。
Canvas 和 SVG 渲染出來效果是差不多的俺猿,修改也非常方便。

除了某些特殊的渲染可能依賴 Canvas:如炫光尾跡特效蜈敢、帶有混合效果的熱力圖等辜荠,絕大部分功能 SVG 都是支持的。此外抓狭,目前的 SVG 版中伯病,富文本、材質(zhì)功能尚未實(shí)現(xiàn)否过。

那順便也了解一下 Canvas 和 SVG 的區(qū)別:

  • 瀏覽器內(nèi)置縮放(ctrl -/+)時午笛,canvas會模糊,svg不會苗桂;
  • 對于移動端药磺,canvas不太友好,而svg內(nèi)存占用忻何啊癌佩;
  • 數(shù)據(jù)量大,交互較多時便锨,canvas占優(yōu)勢围辙,svg渲染器性能就差一點(diǎn)。

ECharts 官方建議這么選擇渲染器:

  • 在軟硬件環(huán)境較好放案,數(shù)據(jù)量不大的場景下(例如 PC 端做商務(wù)報表)姚建,兩種渲染器都可以適用,并不需要太多糾結(jié)吱殉。
  • 在環(huán)境較差掸冤,出現(xiàn)性能問題需要優(yōu)化的場景下,可以通過試驗(yàn)來確定使用哪種渲染器友雳。比如有這些經(jīng)驗(yàn):
    • 在須要創(chuàng)建很多 ECharts 實(shí)例且瀏覽器易崩潰的情況下(可能是因?yàn)?Canvas 數(shù)量多導(dǎo)致內(nèi)存占用超出手機(jī)承受能力)稿湿,可以使用 SVG 渲染器來進(jìn)行改善。大略得說押赊,如果圖表運(yùn)行在低端安卓機(jī)饺藤,或者我們在使用一些特定圖表如 水球圖 等,SVG 渲染器可能效果更好。
    • 數(shù)據(jù)量很大策精、較多交互時舰始,可以選用 Canvas 渲染器。

總的來說這個特性還是挺完美咽袜,畢竟別的JS可視化庫都是基于其中一種渲染丸卷。

新增 dataset 組件

相比起來,這個新特性實(shí)用多了询刹。直接來個例子:
以前谜嫉,數(shù)據(jù)是這樣聲明的:

option: {
    xAxis: {
        type: 'category',
        data: ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie']
    },
    yAxis: {}
    series: [
        {
            type: 'bar',
            name: '2015',
            data: [89.3, 92.1, 94.4, 85.4]
        },
        {
            type: 'bar',
            name: '2016',
            data: [95.8, 89.4, 91.2, 76.9]
        },
        {
            type: 'bar',
            name: '2017',
            data: [97.7, 83.1, 92.5, 78.1]
        }
    ]
}

這種方法雖然直觀,但是大多數(shù)情況下凹联,我們都需要處理數(shù)據(jù)之后沐兰,才能夠匹配這種形式。

有了ECharts 4的dataset蔽挠,可以這樣聲明了:

option = {
    legend: {},
    tooltip: {},
    dataset: {
        // 提供一份數(shù)據(jù)住闯。
        source: [
            ['product', '2015', '2016', '2017'],
            ['Matcha Latte', 43.3, 85.8, 93.7],
            ['Milk Tea', 83.1, 73.4, 55.1],
            ['Cheese Cocoa', 86.4, 65.2, 82.5],
            ['Walnut Brownie', 72.4, 53.9, 39.1]
        ]
    },
    // 聲明一個 X 軸,類目軸(category)澳淑。默認(rèn)情況下比原,類目軸對應(yīng)到 dataset 第一列。
    xAxis: {type: 'category'},
    // 聲明一個 Y 軸杠巡,數(shù)值軸量窘。
    yAxis: {},
    // 聲明多個 bar 系列,默認(rèn)情況下氢拥,每個系列會自動對應(yīng)到 dataset 的每一列蚌铜。
    series: [
        {type: 'bar'},
        {type: 'bar'},
        {type: 'bar'}
    ]
}

或者用對象數(shù)組:

option = {
    legend: {},
    tooltip: {},
    dataset: {
        // 這里指定了維度名的順序,從而可以利用默認(rèn)的維度到坐標(biāo)軸的映射嫩海。
        // 如果不指定 dimensions冬殃,也可以通過指定 series.encode 完成映射,參見后文出革。
        dimensions: ['product', '2015', '2016', '2017'],
        source: [
            {product: 'Matcha Latte', '2015': 43.3, '2016': 85.8, '2017': 93.7},
            {product: 'Milk Tea', '2015': 83.1, '2016': 73.4, '2017': 55.1},
            {product: 'Cheese Cocoa', '2015': 86.4, '2016': 65.2, '2017': 82.5},
            {product: 'Walnut Brownie', '2015': 72.4, '2016': 53.9, '2017': 39.1}
        ]
    },
    xAxis: {type: 'category'},
    yAxis: {},
    series: [
        {type: 'bar'},
        {type: 'bar'},
        {type: 'bar'}
    ]
};

總之給開發(fā)者增添了不少便利造壮。

總結(jié)

這次ECharts更新到版本V4渡讼,能讓大多數(shù)人感到很受用的應(yīng)該是骂束,添加了SVG渲染器,和使用dataset來傳入數(shù)據(jù)集成箫。

而聽上去很厲害的“支持最高達(dá)千萬級數(shù)據(jù)量渲染”展箱,卻不是那么完美,適用的場景有限蹬昌,而且在瀏覽器兼容性上也很糟糕混驰,而這又是絕大多數(shù)前端工程師和產(chǎn)品經(jīng)理都很在意的一點(diǎn)。所以還需要完善,不太適合直接投入生產(chǎn)環(huán)境栖榨。

另外昆汹,絕大多數(shù)時候,使用ECharts的項(xiàng)目都涉及不到的千萬級數(shù)據(jù)量渲染這種情況婴栽。開發(fā)者更關(guān)注的是常用的場景满粗,更專注一些常用的圖表,有沒有什么有意思的更新和優(yōu)化愚争。這一點(diǎn)有些遺憾映皆。

參考閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市轰枝,隨后出現(xiàn)的幾起案子捅彻,更是在濱河造成了極大的恐慌,老刑警劉巖鞍陨,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件步淹,死亡現(xiàn)場離奇詭異,居然都是意外死亡诚撵,警方通過查閱死者的電腦和手機(jī)贤旷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砾脑,“玉大人幼驶,你說我怎么就攤上這事∪鸵拢” “怎么了盅藻?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畅铭。 經(jīng)常有香客問我氏淑,道長,這世上最難降的妖魔是什么硕噩? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任假残,我火速辦了婚禮,結(jié)果婚禮上炉擅,老公的妹妹穿的比我還像新娘辉懒。我一直安慰自己,他們只是感情好谍失,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布眶俩。 她就那樣靜靜地躺著,像睡著了一般快鱼。 火紅的嫁衣襯著肌膚如雪颠印。 梳的紋絲不亂的頭發(fā)上纲岭,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音线罕,去河邊找鬼止潮。 笑死,一個胖子當(dāng)著我的面吹牛钞楼,可吹牛的內(nèi)容都是我干的沽翔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼窿凤,長吁一口氣:“原來是場噩夢啊……” “哼仅偎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雳殊,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤橘沥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夯秃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體座咆,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年仓洼,在試婚紗的時候發(fā)現(xiàn)自己被綠了介陶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡色建,死狀恐怖哺呜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箕戳,我是刑警寧澤某残,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站陵吸,受9級特大地震影響玻墅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壮虫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一澳厢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧囚似,春花似錦剩拢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽框都。三九已至搬素,卻和暖如春呵晨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背熬尺。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工摸屠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粱哼。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓季二,卻偏偏與公主長得像,于是被迫代替她去往敵國和親揭措。 傳聞我的和親對象是個殘疾皇子胯舷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容