當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)
我們在使用以上功能時,可能會結合節流,比如我們的側邊欄的收縮使用了css3
的transition
過渡效果的時候,這時候可能展開一次,會執行多個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...