Может ли JavaScript определить, поддерживает ли браузер пользователя gzip? - PullRequest
9 голосов
/ 23 августа 2011

Могу ли я использовать JavaScript, чтобы определить, поддерживает ли браузер пользователя сжатый контент (на стороне клиента, не node.js или аналогичный)?

Я пытаюсь поддержать следующий крайний случай:
Существует множество возможных файлов, которые можно загрузить в конкретное веб-приложение, и было бы лучше загружать их по мере необходимости, так как приложение запускается, а не загружать их все изначально. Я хочу обслужить эти файлы с S3 с большой датой истечения срока действия кеша. Поскольку S3 не поддерживает файлы gzip для клиентов, которые его поддерживают , я хочу разместить две версии каждого файла - одну обычную и одну gzip с content-type, установленным на application/gzip. Браузер, конечно, должен знать, какие файлы запрашивать. Если JavaScript может определить, поддерживает ли браузер сжатый контент, браузер сможет запрашивать правильные файлы.

Возможно ли это?

Ответы [ 2 ]

15 голосов
/ 23 августа 2011

Javascript не может, но вы можете использовать Javascript для определения, поддерживает ли браузер содержимое gzip или нет.

Я прокомментировал выше и просто хотел бы повторить, вы все равно должны использовать CloudFront, который делает содержимое gzip,Если вы используете S3, то нет никаких причин, по которым вы бы не хотели использовать CloudFront, однако, чтобы ответить на ваш вопрос ...

В этом сообщении блога подробно описывается, как вы обнаружите, если браузерподдерживает Gzip.

http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html

Вот краткая сводка:

1) Создайте небольшой файл gzip gzipcheck.js.jgz и сделайте его доступным в CloudFront,Этот файл должен содержать одну строку кода:

gzipEnabled = true;

2) Используйте следующий код, чтобы попытаться загрузить и запустить этот файл.Возможно, вы захотите поместить его в раздел HTML HEAD перед любым другим кодом Javascript.

<script type="text/javascript" src="gzipcheck.js.jgz">
</script>

Если файл загружается, он устанавливает флаг gzipEnabled, который указывает, поддерживает ли браузер gzip.

4 голосов
/ 09 мая 2012

Хорошо Cloudfront не загружает контент автоматически.Пока Amazon решает сделать автоматическое сжатие gzip в S3, а в Cloudfront необходимо использовать следующий обходной путь.

  • В дополнение к обычной версии, создайте версию файла в формате gzip и загрузите ее на S3.Если имя файла style.css, то версия gzipped должна называться style.css.gz.
  • Добавьте в файл заголовок с ключом = Content-Encoding & value = gzip к файлу.Это необходимо для того, чтобы браузеры понимали, что контент кодируется с помощью gzip.Заголовок можно добавить с помощью S3 api или популярных файловых менеджеров S3, таких как Cloudberry, Bucket Explorer и т. Д.
  • Также добавьте правильный заголовок Content-Type для файла.например, для style.css это должно быть Content-Type: text / css.
  • . На веб-странице обычно включайте файл
  • Используйте вышеупомянутый javascript для определения, поддерживает ли браузер кодировку gzip.Если найдено значение true, замените имя файла, например style.css, на style.css.gz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...