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だと目も当てられない。その話しはまた今度。