###### tags: `konva`, `canvas`, `javascript`
# 【自學筆記】konva入門 - Cache
`Konva`是個`HTML5 Canvas JavaScript`的框架,透過`2d context`的擴展實現各種圖形功能,正好可以實現最近工作需求,就來研究看看囉
---
[範例程式](https://codepen.io/niodoshaba-the-flexboxer/pen/Baraypr)
### Konva的Cache
當專案中的Konva的圖形複雜起來了,整體的效率也會被影響
Konva提供了`cache`的方式,通過使用`cache()`將節點轉換為圖像,大幅改善效能問題
範例為用`cache`繪製星星,而不是個別單獨繪製
```htmlembedded=
<body>
<div id="container"></div>
</body>
```
```javascript=
var stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight,
});
var layer = new Konva.Layer();
var star = new Konva.Star({
innerRadius: 20,
outerRadius: 50,
fill: 'red',
x: 60,
y: 60,
draggable: true,
});
layer.add(star);
stage.add(layer);
// 把star存到cache
star.cache();
var clone;
for (var n = 0; n < 10; n++) {
// 把star clone下來,並修改x,y軸,然後用迴圈重複渲染
clone = star.clone({
x: Math.random() * stage.width(),
y: Math.random() * stage.height(),
});
clone.cache();
layer.add(clone);
}
```
>Cache可以用於所有層級,包含`Stage`、`Layer`、`Shape`
:::danger
cache()要求設定與執行的代碼,必須要在同個網域的伺服器上
:::
---
*參考資料: https://konvajs.org/docs/*
*新手工程師的筆記,純粹記錄學了些啥東西
如果有前輩高人讀了我的文,文中有任何錯誤再麻煩指教指教*