Додзе и кэш автономного приложения

Мы работали над приложением 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 для дальнейшей оптимизации вашей сборки. Смотрите ссылку ниже.

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

Вы видели эту статью в IBM? Кажется, чтобы охватить проблему, которую вы имеете.

Используете ли вы файл манифеста для кэша приложения HTML5? Если это так, вам нужно явно перечислить файлы и каталоги для кэширования. Как и все другие ресурсы, ваши встроенные пакеты локализации должны учитываться в вашем манифесте, либо в разделе CACHE, либо в разделе NETWORK.

Другие вопросы по тегам