ノードに絡んだメモリリークの問題がある。終了させるまでそのオブジェクトが解放されないというものだ。記事によればメモリリークには以下のようなパターンがあるという。ノードオブジェクトのプロパティをたどっていくと自分自身に行き着く場合。以下のようなパターンが考えられる。クロージャにまつわる循環参照クロージャはそのクロージャが定義されたスコープへの参照を持っている。参照を持っているということだ。いう循環参照ができてしまっている。対してイベントハンドラを結びつけることもメモリリークを招くらしい。解決策としては要素を文書ツリーに追加してからイベントハンドラを結びつけることが挙げられる。クロージャを使うことで柔軟な表現が可能になるので、それが使えないとなると困ってしまう。それらを解除するという方法をとっている。クロージャを直接要素に結び付けるのでなく、そのクロージャを実行する関数を作りそれを要素に結びつけるようにしている。クロージャを実行する関数は実際のクロージャを取得するためのハッシュキーしか持っていないので参照が途切れるというわけだ。メモリリークを引き起こしそうだが実はそうでないパターンもある。要素への参照を持っているわけではないので循環参照にはならないと考えられる。ノードオブジェクトではガベージコレクタの仕組みが異なるからである。ノードオブジェクトは参照カウンタにより管理されているので循環参照があるとメモリが解放されずに残ってしまうのである。コンポーネントとして実装されているので、その管理は参照カウンタで行われている。ありそうだし、事実あったようだ。)その他のブラウザの実装がどうなっているかは知らないが、同じような実装である可能性は否定できないので、クロージャやイベントハンドラなどを組み合わせて使う場合はメモリリークに気をつけたほうがいいかもしれない。突っ込んでもらいたい次第。中野さんはタスクマネージャを見ただけではメモリリークと断言できないといってるのだが。[コメント(0)|トラックバック(1)]コメントコメントをどうぞ※メールアドレスとURLの入力は必須ではありません。入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。※投稿には管理者が設定した質問に答える必要があります。興味のある事柄についてつづる。関係技術とかマンガ・アニメとか。掲載コードのラインセンスポリシーとか、はてなブックマーカによるこのブログ上の注目の記事とか。