1

私のページには、クラス'checkboxViewset'のいくつかのdiv(約100程度)があります。以下のようにクラス名セレクターを使用して、divでボタンセット呼び出しを試みます。

$('.checkboxViewset').buttonset();

これは、ページ全体を保持することになります。そこで、以下のように各ループで代わりにIDをターゲットにして、セレクターを使用してこれを実行しようとしました。

$('[id^=viewBoxlatest_]').each(
     function (index)
     {
        $(this).buttonset();
     }
);

これでも、ページ上の他のすべてを保持することになります。ページ内の他のすべてのアクティビティを保留する代わりに、これらの呼び出しを非同期にする解決策はありますか?

4

1 に答える 1

1

あなたに多くの希望を与えないという危険を冒して…。

すべてのjavascriptステートメントは、同じイベントスレッドで(時系列で)その後に来る他のすべてのステートメントを「保持」し、潜在的に(javascriptはシングルスレッドであるため)将来のスレッド全体を「保持」すると言えます。

そのことを念頭に置いて、ここでのポイントは、.buttonset()他のすべてを維持するほどではなく、低速(100個のコンテナーに適用した場合)であり、代替プラグインを見つけて作成できない限り、その固有の低速は克服できないと思います。より速く実行されます。

見かけのパフォーマンスを向上させる最も現実的な希望は、実行順序を変更して、$('.checkboxViewset').buttonset();ステートメントが現在保持しているコードの後に​​実行されるようにすることです。

次のことを試してください:

  • ステートメントを、それが置かれているイベントハンドラーの一番下に移動します。
  • ステートメントを独自の遅延起動$(function(){...})ハンドラーに配置します。
  • 残りのjQueryを$(function(){...})ハンドラーに入れて、ステートメントを独自のwindow.onload = function(){...}ハンドラーに配置します。buttonset()ここでのペナルティは、スタイリングが適用される前に、ユーザーがスタイルなしコンテンツのフラッシュ(FOUC)を取得する可能性が高いことです。

編集:

別の考え方では、1つのdivに相当するボタンを提供し、それをスタイリングして.buttonset()から99回クローンを作成して100にすることができます。もちろん、このアプローチの実行可能性は、divが構造的に同一であり、それらを必要としないかどうかに依存します。独自のID/値/データ。

于 2012-06-15T09:16:37.040 に答える