Расширение Chrome хранит большие объемы данных

Я ищу эффективный способ хранения больших объемов данных в моем расширении Chrome. У меня есть несколько текстовых файлов, которые составляют около 1-2 МБ. Мне бы хотелось, чтобы мое расширение Chrome "кэшировало" их локально, поэтому мне не нужно каждый раз получать их. Я нашел syncFileSystem, но это доступно только для упакованных приложений.

При попытке установить это расширение были предупреждения:

syncFileSystem разрешен только для упакованных приложений, но это расширение.

Каков наилучший способ хранения данных такого рода в расширении Chrome?

manifest.json

{
    "manifest_version": 2,
    "name": "__MSG_name__",
    "version": "1.0",
    "default_locale": "en",
    "description": "__MSG_description__",
    "icons" : {
        "16" : "img/logo_enabled_16.png",
        "48": "img/logo_enabled_48.png",
        "128": "img/logo_enabled_128.png"
    },
    "browser_action": {
        "default_icon": "img/logo_enabled_48.png",
        "default_title": "__MSG_browser_action_title__",
        "default_popup":"options.html"
    },
    "background": {
        "scripts": [
            "js/chrome.js",
            "js/filter.js",
            "js/background.js"
        ],
        "persistent": true
    },
    "content_scripts": [{
        "matches": [
            "http://*/*",
            "https://*/*"
        ],
        "js": [
            "js/docReady.js",
            "js/content.js"
        ]
    }],
    "offline_enabled":true,
    "options_ui": {
        "chrome_style": true,
        "page":"options.html"
    },
    "permissions": [
        "activeTab",
        "tabs",
        "webRequest",
        "webRequestBlocking",
        "webNavigation",
        "storage",
        "syncFileSystem",
        "http://*/*",
        "https://*/*"
    ],
    "short_name": "__MSG_shortName",
    "minimum_chrome_version":"45.0.2454.101",
    "web_accessible_resources":[
        "css/bootstrap.min.css",
        "js/jquery.min.js",
        "js/chrome.js",
        "js/bootstrap.min.js"
    ]
}

1 ответ

Решение

Только WebSQL, IndexedDB, chrome.storage.local и файловая система HTML5 (изолированная файловая система) могут превысить ограничение в 5 МБ через "unlimitedStorage" разрешение

manifest.json: "permissions": ["unlimitedStorage"]

Предоставляет неограниченную квоту для хранения данных на стороне клиента HTML5, таких как базы данных и файлы локального хранилища. Без этого разрешения расширение или приложение ограничено 5 МБ локального хранилища.

Заметки:

  • W3C осуждает WebSQL в пользу более медленной IndexedDB, но я думаю, что он останется в Chrome по той очевидной причине, что он быстрее и более гибок из-за того, что основан на SQL.
  • chrome.storage.local это самый простой в использовании, но он может быть не самым быстрым с большими объектами, сделайте несколько тестов, если важна скорость.
  • Используйте библиотеку Javascript Zip/LZMA для сжатия / распаковки текстовых файлов, если выигрыш является значительным.
Другие вопросы по тегам