質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1935閲覧

nuxt.jsでページ遷移を繰り返すとcanvasが重くなっていく

okpk

総合スコア38

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/08/15 04:46

編集2019/08/15 04:50

Nuxt.jsを使ってwebサイトを作っていますが、
TOPページにpixi.jsによって作られたcanvas要素があり、
ページ遷移をして再びTOPページに戻ってくるたびに挙動が重くなっていきます。

イベントリスナーが重なって重くなることはあると思うのですが、
canvas要素に対しては何をクリアしたら良いのかわかりません。

html

1<template> 2 <main> 3 <div id="canvasWrapper" class="canvas"></div> 4 </main> 5<template>

js

1const app = new PIXI.Application({ 2 width: canvasWidth, 3 height: canvasHeight, 4 autoResize: true, 5 autoDensity: true, 6 resolution: devicePixelRatio 7}); 8$("#canvasWrapper").append(app.view)

mountedで、このようにしてcanvas要素を生成して、挿入しており、
なんとなくdestroyedのタイミングでappをクリア?したら良いのかなとは想像はできるのですが、、
アドバイスいただけましたら幸いです。
よろしくお願いします。

// 追記

js

1app.loader 2 .add(slieds) 3 .add("ripple", "/img/top/ripple.png") 4 .add("displacement", "/img/top/ripple2.jpg") 5 .load((loader, resources) => { 6 }

loaderを用いて画像などのリソースを読んでいるのですが、
loaderが悪さしている可能性などもあるのでしょうか。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PIXI.jsは使ったことがないので間違っているかもしれませんが、
こことか見るとremoveChild使えとかdestroyメソッド使えとか色々言われていますね。

PIXI - destroy

あとは、StackOverflowの回答とか見ると、removeChild使ってcanvas自体を削除してもう一回作り直せみたいなこと書いてますね。Vueでこんな事やっちゃていいのかどうか怪しいですが・・・

https://stackoverflow.com/questions/18456160/how-to-destroy-reload-the-canvas-in-html-5

実際MDNとか見ても対象のDOMをメモリから削除できそうではあります

一度ここらへんを試してみて挙動を確認してみてはどうでしょう?

あともしかすると公式サイトのメモリリークを回避するページはメモリリークの測定方法とかも乗ってるので参考になるかもしれません

投稿2019/08/15 10:56

KuwabataK

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okpk

2019/08/28 05:45

回答ありがとうございます。 destroyedフックでcanvasやcontainerなどインスタンスを生成している部分を一通りdestroy()してみると挙動が改善されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問