欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue之使用echarts圖表setOption多次很卡問(wèn)題及解決

 更新時(shí)間:2023年07月01日 09:49:00   作者:ISM Web組態(tài)軟件  
這篇文章主要介紹了vue之使用echarts圖表setOption多次很卡問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用echarts圖表setOption多次很卡

項(xiàng)目場(chǎng)景

在開(kāi)發(fā)ISM組態(tài)軟件時(shí),使用echarts圖表,拖拽圖表很卡。

問(wèn)題描述

在vue中使用echarts使用setOption更新加載圖形很慢

原因分析

由于this.echartsView = echarts.init(view, null);初始化圖表時(shí),echartsView 變量是定義在data里,這就導(dǎo)致了圖表setOption和resize時(shí),canvas觸發(fā)了vue監(jiān)聽(tīng)而更新,而每一次的更新,導(dǎo)致加載變慢

解決方案

網(wǎng)上都是說(shuō)把變量定義在script里,是可以解決,但是這樣針對(duì)一個(gè)組件的情況,但是如果一個(gè)頁(yè)面有多個(gè)組件,這樣定義在script的變量是多個(gè)組件共享的,就會(huì)導(dǎo)致其他組件顯示不正常。

針對(duì)這個(gè)情況。直接在created里面定義this.echartsView

this.echartsView = null

或者直接

this.echartsView = echarts.init(view, null);

不要在data里面定義echartsView 就可以了。

echarts大數(shù)據(jù)多圖表繪制卡頓解決方案

頁(yè)面卡頓原因

1、頁(yè)面繪制的圖比較多,每一個(gè)圖例在沒(méi)有數(shù)據(jù)的時(shí)候它會(huì)創(chuàng)建一個(gè)定時(shí)器去渲染氣泡,頁(yè)面切換后,echarts圖例是銷(xiāo)毀了,但是這個(gè)echarts的實(shí)例還在內(nèi)存當(dāng)中,同時(shí)它的氣泡渲染定時(shí)器還在運(yùn)行。這就導(dǎo)致Echarts占用CPU高,導(dǎo)致瀏覽器卡頓,當(dāng)數(shù)據(jù)量比較大時(shí)甚至瀏覽器崩潰

2、數(shù)據(jù)量已經(jīng)大到瀏覽器卡死了

解決方法

1、在mounted()方法和destroy()方法之間加一個(gè)beforeDestroy()方法釋放該頁(yè)面的chart資源,我也試過(guò)使用dispose()方法,但是dispose銷(xiāo)毀這個(gè)圖例,圖例是不存在了,但圖例的resize()方法會(huì)啟動(dòng),則會(huì)報(bào)沒(méi)有resize這個(gè)方法,而clear()方法則是清空?qǐng)D例數(shù)據(jù),不影響圖例的resize,而且能夠釋放內(nèi)存,切換的時(shí)候就很順暢了,實(shí)現(xiàn)代碼如下:

beforeDestroy(){
? ? this.$refs.myChart && this.$refs.myChart.clear();
};

2、數(shù)據(jù)量已經(jīng)大到瀏覽器卡死,其實(shí)最好從設(shè)計(jì)上優(yōu)化,要么不要一個(gè)頁(yè)面展示那么多圖,要么讓服務(wù)端把數(shù)據(jù)做一下采樣,畢竟那么多的點(diǎn)也沒(méi)法看,另外echarts也提供了大數(shù)據(jù)量(百萬(wàn)以上)的渲染場(chǎng)景,分片加載數(shù)據(jù)和增量渲染。

在大數(shù)據(jù)量的場(chǎng)景下(例如地理數(shù)的打點(diǎn)),就算數(shù)據(jù)使用二進(jìn)制格式,也會(huì)有幾十或上百兆,在互聯(lián)網(wǎng)環(huán)境下,往往需要分片加載。

appendData 接口提供了分片加載后增量渲染的能力,渲染新加入的數(shù)據(jù)塊時(shí)不會(huì)清除原有已經(jīng)渲染的部分,實(shí)現(xiàn)代碼如下:

?var loadedChunkIndex = 0;
var chunkCount = rawData.length;//大數(shù)據(jù)被分了幾組list
function appendData() {
? ? if (loadedChunkIndex >= chunkCount) {
? ? ? ? return;
? ? }
? ? setTimeout(function () {
? ? ? ? chart.appendData({seriesIndex: 0, data: rawData[loadedChunkIndex]});
? ? ? ? loadedChunkIndex++;
? ? ? ? appendData();
? ? }, 300);
}
appendData();

注意事項(xiàng):

1、我們現(xiàn)在所有圖表組件中接口數(shù)據(jù)都是通過(guò)dataset參數(shù)實(shí)現(xiàn)的,對(duì)于巨大數(shù)據(jù)量的渲染(如百萬(wàn)以上的數(shù)據(jù)量),需要使用 appendData 進(jìn)行增量加載,這種情況不支持使用 dataset,需要使用series.data。

2、目前并非所有的圖表都支持分片加載時(shí)的增量渲染。目前支持的圖有:ECharts 基礎(chǔ)版本的 散點(diǎn)圖(scatter) 和 線圖(lines)。ECharts GL 的 散點(diǎn)圖(scatterGL)、線圖(linesGL) 和 可視化建筑群(polygons3D)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 總結(jié)Vue Element UI使用中遇到的問(wèn)題

    總結(jié)Vue Element UI使用中遇到的問(wèn)題

    這篇文章主要介紹了Vue Element UI使用中遇到的問(wèn)題,對(duì)ElementUI感興趣的同學(xué),可以參考下
    2021-05-05
  • 使用vuex緩存數(shù)據(jù)并優(yōu)化自己的vuex-cache

    使用vuex緩存數(shù)據(jù)并優(yōu)化自己的vuex-cache

    這篇文章主要介紹了使用vuex緩存數(shù)據(jù)并優(yōu)化自己的vuex-cache,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • vue中實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)組內(nèi)部元素

    vue中實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)組內(nèi)部元素

    這篇文章主要介紹了vue中實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)組內(nèi)部元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue項(xiàng)目使用jszip和file-saver批量打包壓縮圖片或附件方式

    vue項(xiàng)目使用jszip和file-saver批量打包壓縮圖片或附件方式

    這篇文章主要介紹了vue項(xiàng)目使用jszip和file-saver批量打包壓縮圖片或附件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue3?中實(shí)現(xiàn)元素拖拽功能

    Vue3?中實(shí)現(xiàn)元素拖拽功能

    這篇文章主要介紹了在Vue3中實(shí)現(xiàn)飄逸的元素拖拽,在本次案例中需要認(rèn)真思考對(duì)應(yīng)的幾個(gè)坐標(biāo)和移動(dòng)時(shí)坐標(biāo)如何更新,事件的使用要成對(duì)出現(xiàn),如何在這個(gè)拖拽的 Icon 上增加點(diǎn)擊事件時(shí)還需要多做一些處理,需要的朋友可以參考下
    2023-07-07
  • Vue之Axios的異步請(qǐng)求問(wèn)題詳解

    Vue之Axios的異步請(qǐng)求問(wèn)題詳解

    總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路,Axios是一個(gè)開(kāi)源的可以用在瀏覽器端和Node JS的異步通信框架,主要作用就是實(shí)現(xiàn)AJAX異步通信
    2023-02-02
  • 深入聊一聊虛擬DOM與diff算法

    深入聊一聊虛擬DOM與diff算法

    為什么vue等的這些mvvm框架比傳統(tǒng)的操作dom渲染頁(yè)面要快,下面這篇文章主要給大家介紹了關(guān)于虛擬DOM與diff算法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • vue全局使用axios的操作

    vue全局使用axios的操作

    這篇文章主要介紹了vue全局使用axios的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue keep-alive請(qǐng)求數(shù)據(jù)的方法示例

    vue keep-alive請(qǐng)求數(shù)據(jù)的方法示例

    本篇文章主要介紹了vue keep-alive請(qǐng)求數(shù)據(jù)的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • vue中實(shí)現(xiàn)多頁(yè)面應(yīng)用方式

    vue中實(shí)現(xiàn)多頁(yè)面應(yīng)用方式

    這篇文章主要介紹了vue中實(shí)現(xiàn)多頁(yè)面應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論