jQuery UIでメモリリークに悩まされる

プロジェクトでjQuery1.3.2とjQuery UI1.7.2を使っている。

UIで使っているのは、dialogとタブくらい。
dialogは、ほぼ全部の画面でボタンを押すと表示させている。登録ボタンの「登録しますがよろしいですか?」や入力内容に変更があった場合に「編集内容を破棄しますがよろしいですか?」みたいな内容を表示させている。

IE8ではあまり増加しないけど、IE6と7ではボタンを押すたびにメモリが増加していって、動きがもっさりしてくる。

メモリリークを調べるために「sIEve0.0.8」を使っている。Drip0.5よりもこっちの方がよさそう。さらっとだけどリークしている場所を教えてくれる。

原因は色々ありそうだけど、UIのdialogの影響が大きそう。

jQuery UIのTracをあさっていると色々メモリリーク関連のチケットが出てくる。いくつかパッチを当てたらだいぶマシにはなってきた。まだこのままリリースするにはちょっと厳しいけど。

今調べていたらいくつか気になるチケットがあった。

Huge memory leaks for all widgets in IE6のパッチは既に当ててたんだけど、IE8でもメモリリークするって書いてある。

あと、Including ui.datepicker.js causes a memory leak in IE6は今見つけたんだけど、ui.datepicker.jsが含まれているとメモリリーク起こすみたい。確かにsIEveで調べていたら、使っていないdateipckerが掛かっていてなんでだろって思ってたんだよね。全部入りのjquery-ui-1.7.2.custom.min.jsを使っているのが悪いみたい。明日対応しよう。

今上がっているjQuery UIのチケットは1.8で解決されるのが多いので、1.8が出たらそっちに乗り換えたほうがよさそう。まだ、1.8a1とかだからリリースされるのは当分先っぽいけど。jQuery UIはまだメモリリークが結構発生するみたいなので、採用する場合は、事前に使う機能がTracのチケットに上がっていないかを眺めてから決めたほうが無難。

最近はメモリリークのほかにクライアント側の性能問題に悩まされている。IE8だとそれなりに動くんだけど、IE6だと目も当てられない。その話しはまた今度。