echarts監控容器ResizeObserver

2021-10-24 19:27:56 字數 2697 閱讀 9544

當resize遇到節流

記得銷毀

我們在使用echarts繪圖的時候往往需要我們監控瀏覽器或者圖表容器的寬高來實現echarts圖表的resize()功能。這裡總結了幾種方法來實現

最常見的就是監控瀏覽器視窗的大小

window.

addeventlistener

('resize'

,this

.chartresize)

其中

this

.echartsobj =

this

.$echarts.

init

(document.

getelementbyid

('testid'))

...chartresize()

,

這種方法自然是有用的,但是有些場景不適用。

如果我們有個可以收縮的側邊欄,當我們收縮側邊欄的時候其實瀏覽器視窗大小是沒有變化的,但由於我們的頁面是響應式的,所以內容區域容器大小是變化的,所以這個時候我們要監控的就是容器大小來實現echarts圖表的resize()

web api提供了乙個方法resizeobserver來實現

const resizeobserver =

newresizeobserver((

)=>

this

.chartresize()

)resizeobserver.

observe

(document.

getelementbyid

('testid'

)

npm提供了乙個庫element-resize-detector,同樣可以幫助我們實現這個功能

import elementresizedetector from

'element-resize-detector'

...let erd =

elementresizedetector()

erd.

listento

(document.

getelementbyid

('testid'),

this

.chartresize)

我們在使用以上功能時,可能會結合節流,比如我們的側邊欄的收縮使用了css3transition過渡效果的時候,這時候可能展開一次,會執行多個this.chartresize(),這就需要我們使用節流來提供效能。

安裝:

npm i lodash
element-resize-detector中使用節流很簡單:

import elementresizedetector from

'element-resize-detector'

...let erd =

elementresizedetector()

erd.

listento

(document.

getelementbyid

('testid'

), _.

throttle

(this

.chartresize)

,300

)

但是,如果我們在resizeobserver中這樣使用就不起效果:

const resizeobserver =

newresizeobserver((

)=>

)resizeobserver.

observe

(document.

getelementbyid

('testid'

)

那麼要如何實現節流呢?自己寫乙個節流總可以吧(參考之前的文章如何理解js中的函式節流和防抖):

canresize:

true

...const resizeobserver =

newresizeobserver((

)=>

this

.canresize =

false

settimeout((

)=>

,300)}

)resizeobserver.

observe

(document.

getelementbyid

('testid'

)

銷毀可以選擇在beforedestroy生命鉤子中進行,通常很容易忘記,所以可以選擇在監聽的地方隨手銷毀:

...

resizeobserver.

observe

(document.

getelementbyid

('testid'

)this

.$once

('hook:beforedestroy',(

)=>

)

docker容器監控

容器具有以下特性 容器是短期存活的,並且可以動態排程 容器的本質是程序,而不是乙個完整作業系統 由於容器非常輕量,容器的建立和銷毀也會比傳統虛擬機器更加頻繁。docker 容器的監控方案有很多,除了 docker 自帶的docker stats命令,還有很多開源的解決方案,例如 sysdig cad...

TIG監控平台監控docker容器

influxdb是乙個時序資料庫,用來記錄監控資訊。開放8083和8086兩個埠 8083是influxdb的web管理端,8086是資料傳輸埠 初始建立資料庫telegraf供telegraf儲存資料 telegraf是負責收集docker資訊並 到influxdb的工具,通過簡單的配置即可監控d...

容器監控實踐 Heapster

該專案將被廢棄 retired heapster是kubernetes旗下的乙個專案,heapster是乙個收集者,並不是採集 流程 1.heapster首先從apiserver獲取集群中所有node的資訊。2.通過這些node上的kubelet獲取有用資料,而kubelet本身的資料則是從cadv...