Додзе и кэш автономного приложения
Мы работали над приложением JavaScript с поддержкой автономного режима, используя Dojo и возможности хранения и автономного режима, доступные в новых браузерах.
Приложение довольно большое, но, похоже, оно загружает файлы большего размера из кеша, и я вижу, что приложение находится в кеше. Мы использовали функции кэша приложений, и, насколько я и Chrome, в кэше приложений нет ошибок.
Однако мы сталкиваемся с проблемами. Очевидно, Dojo не может загружать свои языковые ресурсы или файл SMD, описывающий службу, к которой мы подключаемся.
Эти проблемы хорошо видны на webkit-mobile, который является целевым браузером.
Есть идеи, что может быть не так?
4 ответа
Проблема в том, что додзё выполняет несколько инициализационных XHR-запросов. Он выходит в Интернет, чтобы получить свой пакет локализации и любые файлы.smd для функции RPC.
XHR не может получить доступ к автономному кэшу applicationCache, даже если файлы bundle и smd доступны там, но их не будет обнаружено, когда Dojo запрашивает их.
Альтернативой является оставить их вне файла манифеста, но это означает, что dojo все равно не запустится в автономном режиме.
Мы исправили проблему с файлом.smd, добавив объект спецификации сервиса, расположенный в файле.smd, непосредственно в конструктор dojo.rpc.Service. Это означало, что у додзё было все, что ему нужно, и больше не нужно было его брать.
Локализация расслоений была разной. В конце я позаботился о том, чтобы они были добавлены в конец dojo.js, позволяя операторам dojo.provide позаботиться обо всем остальном. По сути, я изменил скрипт сборки (файл bat для нас), чтобы после сборки поместить сжатый пакет локализации в конец dojo.js.
Теперь додзе можно начать в автономном режиме.
Когда вы используете автономный режим (скорее всего, мобильный), в большинстве случаев вам также понадобится оптимизированная сборка. Вы действительно не хотите отключить несколько десятков файлов.
Я не думаю, что XHR работает в автономном режиме, поэтому любой ресурс, который вы загружаете через XHR (который включает в себя скрипты, пакеты i18n и другие динамически загружаемые ресурсы, которые запускаются через href), следует хранить в localStorage, а затем вместо этого выполнять ветвление для загрузки из loaclStorage XHR в автономном режиме.
Теперь вам действительно нужно сделать оптимизированную сборку, если вы работаете на iPhone, iPad или Android-устройстве. Также подумайте об использовании Closure Compiler для дальнейшей оптимизации вашей сборки. Смотрите ссылку ниже.
Вы видели эту статью в IBM? Кажется, чтобы охватить проблему, которую вы имеете.
Используете ли вы файл манифеста для кэша приложения HTML5? Если это так, вам нужно явно перечислить файлы и каталоги для кэширования. Как и все другие ресурсы, ваши встроенные пакеты локализации должны учитываться в вашем манифесте, либо в разделе CACHE, либо в разделе NETWORK.