dojo и кэш автономных приложений

Мы работаем над автономным приложением JavaScript с использованием Dojo и возможностей хранения и автономной работы, доступных в новых браузерах.

Приложение довольно большое, но кажется, что оно загружает большие файлы из кеша, и я вижу, что приложение действительно кэшируется. Использовали функции кеша приложений, и, насколько я и Chrome можем видеть, в кеше приложений нет ошибок.

Однако мы сталкиваемся с проблемами. Очевидно, Dojo не может загрузить ни свои языковые ресурсы, ни SMD-файл, описывающий службу, к которой мы подключаемся.

Эти проблемы хорошо видны в webkit-mobile, который является целевым браузером.

Есть идеи, что может быть не так?


person Morten    schedule 07.04.2011    source источник


Ответы (3)


Когда вы используете офлайн (скорее всего, мобильный), большую часть времени вам также понадобится оптимизированная сборка. Вы действительно не хотите отключать несколько десятков файлов.

Я не думаю, что XHR работает в автономном режиме, поэтому любой ресурс, который вы загружаете через XHR (включая скрипты, пакеты i18n и другие динамически загружаемые ресурсы, которые запускаются через href), вы должны хранить в localStorage, а затем вместо этого переходить для загрузки из loaclStorage. XHR в автономном режиме.

Теперь вам действительно нужно сделать оптимизированную сборку, если вы работаете на iPhone, iPad или устройстве Android. Также рассмотрите возможность использования компилятора Closure для дальнейшей оптимизации сборки. См. ссылку ниже.

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

person Stephen Chung    schedule 08.04.2011
comment
Это здорово, многие люди продолжают ссылаться на включение локализации в сборку. Однако я постоянно не могу понять, как это делается. - person Morten; 08.04.2011
comment
запуск инструмента оптимизации является обязательным для любого развертывания. использование dojo непосредственно из исходного дерева действительно только для режима разработки, хотя бы для сокращения количества запросов. - person peller; 09.04.2011
comment
XHR (сгенерированные загрузчиком Dojo или непосредственно в вашем коде) действительно работают, если используется кэш приложения HTML5. Это было основанием для вашего вопроса? Это было непонятно. - person peller; 09.04.2011
comment
@peller, запросы XHR работают с appcache? Странно, так как я пробовал это с iPad раньше и не смог загрузить его из кеша. Я, вероятно, должен изучить это снова - я просто предположил, что это не работает. +1. - person Stephen Chung; 10.04.2011

Проблема в том, что dojo выполняет несколько запросов инициализации XHR. Он подключается к сети, чтобы получить свой пакет локализации и любые файлы .smd для функции RPC.

XHR не может получить доступ к автономному кэшу приложений, даже если файлы пакета и smd доступны там, они не будут найдены, когда Dojo запрашивает их.

В качестве альтернативы можно оставить их за пределами файла манифеста, но это означает, что dojo все равно не запустится в автономном режиме.

Мы исправили проблему с файлом .smd, добавив объект спецификации службы, расположенный в файле .smd, непосредственно в конструктор dojo.rpc.Service. Это означало, что в додзё было все необходимое, и ему больше не нужно было это приносить.

Пакеты локализации были разные. В конце концов я позаботился о том, чтобы они были добавлены в конец dojo.js, позволив операторам dojo.provide позаботиться обо всем остальном. По сути, я модифицировал скрипт сборки (для нас это bat-файл), чтобы после сборки поместить сжатый пакет локализации в конец dojo.js.

Теперь додзе может запускаться в автономном режиме.

person Morten    schedule 10.04.2011
comment
Вы уверены, что XHR не может получить доступ к кешу автономных приложений? Вы уверены, что ресурсы были правильно перечислены в манифесте? Я помещаю ресурсы в свой раздел CACHE и извлекаю их с помощью XHR, включая сборки ресурсов. Вы не можете просто оставлять файлы за пределами манифеста, иначе вы получите ошибки HTTP, но если вы используете кэш приложений онлайн, вы можете перечислить каталоги в разделе NETWORK. - person peller; 13.04.2011
comment
У меня есть каждый файл для моего сайта в манифесте, я генерирую его с помощью скриптов. Для обоих указанных сценариев Dojo не может получить свой контент при запуске сайта на Android 2.2 в режиме полета. - person Morten; 13.04.2011
comment
Интересно. Я не пробовал Android, но обычно это работает для меня в настольных браузерах (chrome, safari, ff) - person peller; 13.04.2011

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

person peller    schedule 08.04.2011