1

私は今週末、ウェブで以下を読みました。他のほとんどの人がこれを正しい(より良い)やり方だと考えているかどうか知りたいと思いました。

これは物事を行うための最良の(正しい)方法ではありません:

$(document).ready(function(){
    $('#magic')。click(function(e){
        $('#yayeffects')。slideUp(function(){
            //..。
        });
    });

    $('#happiness')。load(url +'#unicorns'、function(){
        //..。
    });
});

これが優れていること:

var PI = {
    onReady:function(){
        $('#magic')。click(PI.candyMtn);
        $('#happiness')。load(PI.url +'#unicorns'、PI.unicornCb);
    }、
    candyMtn:function(e){
        $('#yayeffects')。slideUp(PI.slideCb);
    }、
    slideCb:function(){...}、
    unicornCb:function(){...}
};

$(document).ready(PI.onReady);

ある人は次の人よりもパフォーマンスが良いですか?デバッグが簡単ですか?

考え?コメント?

4

2 に答える 2

1

多くの無名関数を含むスタックトレースがある場合、エラーが正確に発生した場所と、それが呼び出された場所を見つけるのにかなりの時間がかかります。したがって、秒に 1 を加えます。

イベント ハンドラー内のコードは、多くの場合、ハンドラーが登録されるコードとあまり関係がないため、別の関数/モジュールにする必要があります。プラス 1 秒。

リスナーに匿名関数を使用することも悪いです。このリスナーを削除する必要がある場合 (ほとんどの人は気にしません)、それらのみを削除でき、コードの他の部分から他のリスナーを誤って削除することを気にする必要がないからです。 . プラス 1 秒。

関連する機能を 1 つのオブジェクトに配置することが必ずしも最適とは限りません。さまざまな dom オブジェクトに対してリスナーの動作を使用する場合、ほとんどの場合、onReady 関数は不適切です。

パフォーマンスは気にしないでください。通常、リスナーはそれほど頻繁に呼び出されることはありません。そうである場合は、別の場所に問題がある可能性が高くなります。

于 2011-02-07T14:00:07.273 に答える
0

2 番目のバリアントは再利用可能です。slideCb および他のコントロールの他のイベントの他のハンドラーを再利用できます。

于 2011-02-07T13:41:59.570 に答える