Geolocation APIの検出コードがIE9でメモリリークを起こすらしい
「IE9でメモリリークするよ。でもカスタムビルドじゃ起こらないよ」というModernizrのissueから分かったもの。
カスタムビルドというのは、検出したい機能のコードだけを含んだModernizrを作ったりする機能。ふつうのModernizrを使うと全部検出しようとあれこれやっちゃって無駄なので、プロダクション用によい。あと、最近Modernizrはプラグイン形式を導入してて、本体にはバンドルしないけどカスタムビルド経由で組み込めるので、それもよい。
本題。それでたぶんこの「カスタムビルドでは起こらない」というのが発見につながったんだろう。Geolocation APIの検出コードが原因だったらしい。Paul Irishがまとめてくれている。
in summary this is all that causes the bug:
!!navigator.geolocation;
So this will cause the leak for anyone checking geolocation in IE9. This is not isolated to Modernizr.
というわけで、!!navigator.geolocation
が悪さをするらしいので、Modernizrに限った話じゃないと。ううむ。
二重否定が太字になってるのはなんだろう……
気になったのは、IE Teamからの返答によるとIE10PP5でも再現したらしいということ。でも報告したひとはIE10PP4では起こらないと。えええ。
リークするテストケースとリークしないテストケースが用意されてるので、Win8CP上のIE10PP5で試してみたところ、Metroモードでもデスクトップモードでもどちらも再現せず。間違いかな。
これはWindowsのIE9だけなんだろうか。Windows Phoneでも起こるならえらいことだろうけど、デスクトップブラウザ向けのWebアプリでGeolocation APIを使うものって、そんなにあるとも思えないし……厄介な話だけれど。