3

私は、内部でLocalStorageを悪用しているように見えるLESS CSS(より正確にはless.js)を使用しています。アプリをローカルで実行しているときにこのようなエラーが発生したことはありませんでしたが、アプリの一意の.lessファイルのリンクのすぐ上にあるすべてのページ表示で「永続ストレージの最大サイズに達しました」と表示されます。

これは、これまでのところFirefox12.0でのみ発生します。

これを解決する方法はありますか?

PS:主にlocalStorageスペースの使用量の計算に触発され、これが私がやったことです(これはプロトタイプに基づいており、カスタムの些細なLoggerクラスに依存しますが、これはコンテキストに簡単に適合させる必要があります):

"use strict";
var LocalStorageChecker = Class.create({
    testDummyKey: "__DUMMY_DATA_KEY__",
    maxIterations: 100,
    logger: new Logger("LocalStorageChecker"),
    analyzeStorage: function() {
        var result = false;
        if (Modernizr.localstorage && this._isLimitReached()) {  
            this._clear();
        }
        return result;
    },
    _isLimitReached: function() {
        var localStorage = window.localStorage;
        var count = 0;
        var limitIsReached = false;
        do {
            try {
                var previousEntry = localStorage.getItem(this.testDummyKey);
                var entry = (previousEntry == null ? "" : previousEntry) + "m";
                localStorage.setItem(this.testDummyKey, entry);
            }
            catch(e) {
                this.logger.debug("Limit exceeded after " + count + " iteration(s)");
                limitIsReached = true;
            }
        }
        while(!limitIsReached && count++ < this.maxIterations);
        localStorage.removeItem(this.testDummyKey);
        return limitIsReached;
    },
    _clear: function() {
        try {
            var localStorage = window.localStorage;
            localStorage.clear();
            this.logger.debug("Storage clear successfully performed");
        }
        catch(e) {
            this.logger.error("An error occurred during storage clear: ");
            this.logger.error(e);
        }
    }
});


document.observe("dom:loaded",function() {
    var checker = new LocalStorageChecker();
    checker.analyzeStorage();
});

PPS:UIのパフォーマンスへの影響はまだ測定していませんが、デコレータを作成して、X分ごとにのみストレージテストを実行できました(たとえば、ローカルストレージでの実行の最後のタイムスタンプを使用)。

4

2 に答える 2

1

これは、発生しているエラーの優れたリソースです。

http://www.sitepoint.com/building-web-pages-with-local-storage/#fbid=5fFWRXrnKjZ

ローカルストレージには十分なスペースしかなく、各ブラウザーで最大限に活用できるという洞察が得られます。問題を解決するために、localstorageからいくつかのデータを削除することを検討してください。

于 2012-05-15T22:28:48.910 に答える
1

Less.jsは、@importedされたコンテンツを永続的にキャッシュします。このスクリプトを使用して、キャッシュされているコンテンツをクリアできます。以下のスクリプトを使用して、関数destroyLessCache('/ path / to / css /')を呼び出すことができ、キャッシュされたcssファイルのlocalStorageをクリアします。

    function destroyLessCache(pathToCss) { // e.g. '/css/' or '/stylesheets/'
       if (!window.localStorage || !less || less.env !== 'development') {
            return;
       }
       var host = window.location.host;
       var protocol = window.location.protocol;
       var keyPrefix = protocol + '//' + host + pathToCss;
       for (var key in window.localStorage) {
          if (key.indexOf(keyPrefix) === 0) {
             delete window.localStorage[key];
          }
       }
    }
于 2012-05-15T22:34:41.923 に答える