2009-09-17 3 views
6

私はajaxですべてをロードするjquery U.Iタブを使用している問題があります。今、私は今、あなたがタブをクリックするたびに、そのタブに部分的なビューが読み込まれます。jqueryはウェブサイトの速度を落としていますか?

ここでは、jqueryを使用してそのタブに必要なすべてのイベントと、使用しているjqueryプラグインをバインドするjavascriptファイルを示します。

タブがロードされるたびに、それらのスクリプトがすべてロードされます。それが10回クリックされた場合、それらのスクリプトは10回上に読み込まれ、今度は私のボタンが同じイベントの10個を持つようになります。誰かがそのボタンをクリックすると、10個のイベントはすべて同じことを行います。

私は、すべてのスクリプトを移動してメインページに置き、jquery.liveまたは他の解決策を使用するための解決策を見つける必要があります。

UIタブのjqueryキャッシングを使用しようとしましたが、タブAが変更されたときにタブAが変更されてしまい、タブBを再読み込みする必要がありますが、今のところ同じ問題にぶつかる。

答えて

6

Read here jQueryのイベントデリゲートをカバーする素敵なプレゼンテーションです。

この時上記の表情を読んだ後:

// using jQuery 1.4.2 
(function($){ 
    // You can cache the container you plan on using for event delegation. 
    // If using $(document).ready(...) to call the below functions 
    //  your "container" element should already exist in the DOM 
    // (the .specialAjaxLink elements don't have to exist yet). 
    var container = $("#container"); 

    // whenever an element with the class "specialAjaxLink" is clicked 
    // while inside your container element execute the handler on them. 
    container.delegate(".specialAjaxLink", "click", function(){ 
     // do something amazing... 
     solveWorldHunger(this); 
     // stop propagation and prevent default... 
     return false; 
    }); 
}(jQuery)); 

あなたはGmail、ドキュメント、またはGoogleの波のような複雑なアプリを作成している場合を除き、上記の方法を使用するときにパフォーマンスの問題を心配する必要はありません。

2

私は常に、原則として、(アンバインド呼び出し)バインドの前に()

+0

私はフォローしていませんか?私はいくつかの例を見ることができますか?プラグインとはどのように動作しますか?これを「生きて」するのは速くても遅くてもかまいませんか? – chobo2

+0

また、すべてをアンバインドするために離れていますか? – chobo2

+0

remove()およびbind()の前にunbind()を呼び出すと、同じ要素の複数のバインディングを防ぐことができます。何かが作成され、たくさん削除された場合(ライブアニメーションのホバー効果など)、ライブの方が好きです – Mike

0

代わりに)(.liveを使用するのではなく、代わりにイベントの委任を使用することを検討してください。コンテナ内のイベントを聴いてから、タグと属性を調べて、どのように処理するかを決めます。

DOMに複数の要素を追加する場合は、はるかに効率的です。

+0

私は次の例がないので、いくつかの例が必要になります。 – chobo2

+0

ここにクイックリンクがあります - 少しスクロールダウンhttp://www.learningjquery.com/2008/03/working-with-events-part-1 – ScottE

+0

私は何を見ているべきかわかりません。 – chobo2

関連する問題