6

JqueryMobile と Phoenagap を使用して iPhone アプリを開発しました。すべてのファイルをコードで縮小し、未使用のファイルを削除しましたが、アプリはまだかなり遅いです。問題は. ボタンをタップすると、変形が開始されます。1秒後。ページ遷移をもっと早くしたい。

未使用のデバイス(カメラなど)も無効にしますが、それでも遅いですか。

誰でもこの問題で私を助けることができますか?

iPhone 4gでテストしています。

4

3 に答える 3

27

パフォーマンスを向上させるための指針

jQuery オブジェクトをキャッシュする

Ex: var header = $('#header');

次の代替案を検討してください。

  • jQuery.each()
  • 。見せる()
  • 。隠れる()
  • 。トグル()

に変更するdisplay:none方がはるかに高速です。多分ただ使用addClass('hidden')してremoveClass('hidden')

遅い jQuery メソッドの使用を最小限に抑える O(n^2)

  • 削除する()
  • html()
  • 空の()

次の方法もコストがかかります。

  • 追加()
  • プリペンド()
  • 前()
  • 後()

これらの操作メソッドの背後にあるプロセスは次のとおりです。入力文字列を消去し、文字列を DOM フラグメントに変換して、DOM に挿入します。

セレクターを最適化します。

演奏順:

  • id (一意性のため)
  • 鬼ごっこ
  • 名前、クラス (どちらもすべての DOM 要素の属性をチェックする必要があります)

具体的に取得し、できれば最初に親の ID を選択します。

    $('#test p.description').removeClass('hidden');
    instead of 
    $('.description').removeClass('hidden');

可能であれば、子孫セレクターの代わりに子セレクターを使用します。

    $('div > p').hide(); or $('div').children('p'); 
    instead of
    $('div p').hide(); or $('div').find('p'); 

コンテキスト検索を使用します。

    $('div').find('p');
    instead of
    $('div', 'p');

タグ セレクターを使用する代わりに .filter() を使用します。

    $('div.name').filter(':input');
    instead of
    $('div.name :input');

メモ化:

var myFunc = function (param) {
    if (!myFunc.cache.hasOwnProperty(param)) {
            var result = {};
            // ... expensive operation ...
            myFunc.cache[param] = result;
    }
    return myFunc.cache[param];
};

// cache storage
myFunc.cache = {};
于 2012-06-12T03:56:57.500 に答える
7

Brett Holt の回答は、アプリをより効率的にするための多くの優れたヒントを提供していますが、あなたが話している遅延の問題の一部は、アプリをレンダリングしている WebKit エンジンに関係していると思います。ダブルクリック イベントを可能にするために、クリックが登録されるまでに最大 300 ミリ秒の遅延が組み込まれています。

vclick私の調査によると、コンセンサスは「 」ではなく「 」イベントにバインドするようclickです。vclickオブジェクトをタップするとすぐに起動する必要があります。

私は自分のアプリで見つけたjquery.touchToClickというライブラリを使用してclickいますvclick。これにより、クリックイベントが非常に顕著に高速化されました。ただし、この問題を解決するための最も効率的な方法ではない可能性があることに注意してください。

LightningTouchjquery.touchToClickなどの代替ライブラリも見てきましたが、試したことはありません。

于 2012-11-23T05:59:01.930 に答える