私は非常にパフォーマンスに制約のあるデバイスに取り組んでいます。AJAX リクエストのオーバーヘッドのため、テキストと画像のアセットをブラウザに積極的にキャッシュするつもりですが、デバイスごとのキャッシュ サイズをテキストと画像のサイズと同じくらい小さく設定する必要があり1MB
ます9MB
。画面、グラフィカル アプリケーション。
デバイスは簡単にメモリ制限に達するため、アプリケーションのサイズを管理する方法について非常に注意する必要があります: コード ファイルのサイズ、同時 HTTP リクエストの数、イベント ディスパッチ時の JS プロセッサ サイクルの数、CSS リフローの制限など。テキスト アセットと画像用にサイズが制限されたキャッシュを開発する方法です。
テキストについては、 for オブジェクトを使用して独自のキャッシュをロールし、サイズを概算しました。アプリケーションは手動でキャッシュ エントリを取得/設定します。構成可能な上限に達すると、クラスのガベージ コレクションは からまでのサイズで行われ、最後にアクセスされたプロパティに重みが付けられます (つまり、何かが最近アクセスされた場合、そのオブジェクトの最初の収集はスキップされます)。JSON.encode().length
'string'.length
gcLimit
gcTarget
Image()
画像については、インターフェイス要素をプリロードし、DOM 要素を削除してオブジェクトを永続的に保存しないことで、ブラウザーがガベージ コレクション自体を処理できるようにするつもりです。プリロードについては、おそらくもう一度自分でロールバックします-FiNGAHOLiC の ImgPreloader とthisのように模倣する例があります。「ダウンロード ウィンドウ サイズ」や「最大キャッシュ リクエスト数」などの機能を念頭に置いて、デバイスが過負荷にならないようにする必要があります。
これは、このような制約のある環境で作業する大きな課題であり、Backbone などの一般的なフレームワークは「最大コレクション サイズ」をサポートしていません。SO の他の場所では、ユーザー5MB
は HTML5 localStorag
e の制限を引用していますが、私の目標はセッションの永続性ではないため、その利点はわかりません。
もっと良い解決策があるかもしれないと感じずにはいられません。アイデア?
編集:@ Xotic750:IndexedDBにうなずいてくれてありがとう。残念ながら、このアプリは Opera/Presto 上に構築された標準の Web ページです。さらに良いことに、このプラットフォームは持続性を提供しません。ロックとハードプレイス :-/。