Как обслуживать автономные манифесты кеша приложений для интернационализированных веб-сайтов?

У меня есть веб-сайт, где URL-адреса содержат информацию о локали, а заголовок Accept-Language клиента (или поле выбора на каждой странице) выбирает язык и перенаправляет на локализованный URL-адрес для текущей страницы. URL-адрес на английском языке по умолчанию: http://example.com/ языковые стандартные версии страниц сайта содержат значение языкового стандарта: http://example.com/de/ или http://example.com/es/ и т. д.

Я хотел бы получить совет о том, как обращаться с указанием манифестов кэша автономного приложения в этой ситуации. Я хотел бы, чтобы локализованные версии автономных страниц кэшировались на основе URL-адреса пользователя. т. е. пользователь, попадающий на страницу на английском языке, а затем выбирающий испанский, будет (повторно?) загружать URL-адреса на испанском языке, указанные в манифесте на испанском языке.

Должен ли я называть файл манифеста по-разному для корневой страницы для каждой локали (например, en.manifest, es.manifest)? Или, если я использую манифест с тем же именем в корневом URL-адресе для каждой локали, будет ли он перечитан, если пользователь перейдет на страницу с другой локалью (и, вероятно, с файлом манифеста другого размера - веб-сервер укажет, что не кэширует файл манифеста (с))? Или мне нужно явно загружать специфичный для локали манифест через JavaScript, если пользователь меняет локали?

Я обеспокоен тем, что посетитель начнет загрузку URL-адресов, указанных в манифесте на английском языке по умолчанию, а затем выберет предпочитаемую локаль и не инициирует чтение манифеста, специфичного для новой локали, и не загрузит URL-адреса для манифеста выбранной локали.

Я сделал некоторые поиски, но не нашел никаких обсуждений этой ситуации.


person saschwarz    schedule 07.12.2011    source источник


Ответы (1)


Я не уверен, что это существует достаточно долго для того, чтобы быть общепризнанной передовой практикой, но я попытаюсь ответить на ваши вопросы.

т. е. пользователь, попадающий на страницу на английском языке, а затем выбирающий испанский, будет (повторно?) загружать URL-адреса на испанском языке, указанные в манифесте на испанском языке.

Я полагаю, но в настоящее время не могу подтвердить, что если у вас есть файлы, перечисленные как в en.manifest, так и в es.manifest, то в браузере будет сохранена только одна копия этого файла. Поэтому включите все общие файлы в каждый манифест, чтобы вам не пришлось беспокоиться о том, что люди сначала попадут на домашнюю страницу, чтобы загрузить два манифеста. Пока весь ваш статический контент имеет заголовки с истекающим сроком действия в далеком будущем, браузер должен заполнять кэш приложений вещами из своего локального кеша, а не извлекать их снова.

Должен ли я называть файл манифеста по-разному для корневой страницы для каждой локали (например, en.manifest, es.manifest)?

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

Или, если я использую манифест с тем же именем в корневом URL-адресе для каждой локали, будет ли он перечитан, если пользователь перейдет на страницу с другой локалью (и, вероятно, с файлом манифеста другого размера - веб-сервер укажет, что не кэширует файл манифеста (с))?

Манифест будет перечитываться при каждом обновлении. Это приведет к тому, что весь кеш будет выброшен и загружен повторно. От этого никуда не деться, лучший подход — не обновлять файлы манифеста слишком часто.

Или мне нужно явно загружать специфичный для локали манифест через JavaScript, если пользователь меняет локали?

Насколько мне известно, вы не можете загрузить другой файл манифеста с помощью JavaScript, только тот, который связан со страницей, на которой вы сейчас находитесь, с помощью атрибута manifest.

person robertc    schedule 08.12.2011
comment
спасибо за Ваш ответ. В итоге я создал отдельные файлы манифеста для каждого языка с именем манифеста, отражающим локаль (es.manifest, en.manifest и т. д.). Я использую Django и наследование шаблонов для управления файлами манифестов и совместного использования общего содержимого в манифестах. - person saschwarz; 07.01.2012