2007年11月11日日曜日

JQuery でごりごりJavascriptのプログラムを書いていたときに、



急にFireFoxの挙動がおかしくなり困ったことに。


画面の更新を何回かすると、アプリごと落ちる現象です。(更新回数とかは不規則)


Exception Interface Code:0xc00000005 Flags:0x00000000 Record: 0x0000000000000000 。。。。


詳細を見ると上記のようなエラーコードとか、モジュールの情報とかいろいろ詳でてくるんだけど


細かくちまちま調べる気になれず、何が起こったかを調べるより


Javascriptを順番にコメントアウトしてどの記述が影響しているのかを調べるほうに注力しました。


結論から言うと以下のコードは、落ちる可能性がある。(原因は不明)


リスト1



$(function($){

(function($){
コード1。。。
})($);

(function($){
コード2。。。
})($);

(function($){
  コード3。。。
 })($);

});


以下のように書き直すと、問題解決しました。


リスト2



$(function($){
コード1。。。
});

$(function($){
コード2。。。
});

$(function($){
  コード3。。。
});


どちらも、HTML読み込み完了後にJavascriptが実行されるような記述です。(JQuery参照)


リスト1のように、とりあえず内容別に名前空間を分けて書きたいなぁと、


深い意味も考えず書き始めました。


最初のコード1までは特に問題なく、コード2を書き足したあたりから、


不穏な動きが始まりコード3を書き足したときにようやく何かがおかしいなぁと思い始めた次第です。


(特にコードの量が増えると、落ちる頻度があがるような気がしました。)


もともと、FireFoxにFireBug、YSlow、Greasemonkeyなどのアドオンを


複数インストールしていた関係もあって、


FireFoxの挙動がおかしく強制終了するようなことはしょっちゅうありました。


プログラムを書いているときも、そういう別原因の要素が働いているのかとも思い、


納期もあるしあんまり原因追求へ脱線している時間もないと放置していたわけです。


(たまにIEで確認したりするときも問題はなかったので、余計放置していました。)


しかし、他のPCのFireFoxでも落ちる現象を確認したときは


さすがに自分のコードが原因だと確信しました。


Javascriptを書いているときって環境依存の部分の検出ってほんとに


めんどくさいし、手間のかかることだから蓋をしておきたくなりますよね。


でも、見つけた時は、あきらめてとりかかるしかない。。。


(もちろん、見つかっていない部分も探さないといけないですけどね。)


結局、現象はおさまりましたが、JQuery(Javascript)の勉強不足で


原因というのは分かっていません。


ただ、いろいろ調べてみて自分自身、原因特定の糸口もつかめず苦労したので


同じような現象になったかたがおられたら、とりあえずでもいいので


上記のように書き直してみて、現象がおさまれば幸いと思った次第です。


(書き直しによる解決は、あくまで自己責任でお願いします)


原因の調査はできるときにしたいと思いますが、誰か教えてくれる


親切な人がいましたら、是非ともトラックバックやコメントでお願いします。





0 件のコメント: