Включая base64 сжатые таблицы стилей / изображения в JavaScript?

Я знаю, что вы можете включить CSS и изображения, среди других типов файлов, которые были сохранены в форме base64 в файле JavaScript. Тем не менее, они довольно большие... и в сжатом виде они сокращают LOT, даже с накладными расходами ~33% от кодировки base64.

Без gzip-изображений изображения - это данные:image/gif;base64, данные:image/jpeg, данные:image/png, а css - это данные:text/css;base64. Какой тип MIME можно / нужно использовать, чтобы включить URI-коды данных CSS или изображений, которые распакованы? (Или если gzip+base64 не может работать, есть ли какое-либо другое сжатие, которое я могу сделать, чтобы уменьшить размер строки, сохраняя при этом данные, хранящиеся в javascript?)

..edit.. Я думаю, что вопрос неправильно поняли. Я не спрашиваю, должен ли я включать gzip-строки base64 в javascript. Да, я знаю, что в большинстве случаев лучше сжать javascript и другие файлы на стороне сервера. Но это не применимо для usercript; Пользовательский скрипт не имеет сервера и состоит только из одного файла. Firefox допускает директиву @require, а Opera и Chrome - нет, и проблемы безопасности локальных файлов вступают в игру при загрузке любых локальных файлов. Таким образом, все, что нужно скрипту, должно быть либо: 1) в сети (медленное), либо 2) встроенным в пользовательский скрипт (большой).

Теперь этот вопрос предполагает, что большое предпочтительнее медленного, но большое не обязательно означает, что мы полностью игнорируем, насколько велико; если это может быть меньше, это улучшение.

Таким образом, предполагая, что строка base64 встроена в javascript, вопрос заключается в том, как превратить ее во что-то значимое.

Или:

1) atob () может конвертировать сырой gzip в кодировке base64 в необработанный gzip внутри javascript. (Атоб не должен знать медиатип). Тогда возникает вопрос, как распаковать этот необработанный файл gssip css или файл изображения, чтобы полученный результат можно было вставить в документ.

или 2) при наличии надлежащего медиатипа браузеры, по крайней мере теоретически (согласно RFC datauri), должны иметь возможность загружать любой файл непосредственно из datauri. "" достаточно для загрузки таблицы стилей CSS без gzipped. Вопрос здесь заключается в том, какое сочетание атрибутов типа ссылки и типа данных datauri должно работать (и для каких браузеров оно будет работать)? Предпочтительно для пользовательского сценария это будет комбинация, которая работает в Opera, FF и Chrome.

1 ответ

В HTTP сжатие чаще всего применяется только для передачи, чтобы уменьшить полезную нагрузку, которая должна быть передана. Это делается с помощью поля заголовкаContent-Encoding.

Но data Схема URL очень ограничена, и вы можете указать только тип медиа:

dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data

Хотя вы можете использовать составное сообщение, большинство пользовательских агентов не поддерживают их в data URL-адрес. Также было бы сомнительно, что дополнительные данные для описания такого составного сообщения не будут больше, чем данные, которые вы сохраняете путем сжатия фактической полезной нагрузки.

Таким образом, сжатие данных в data URL возможен в теории, но неосуществим. Лучше просто сжать весь документ data URL встроен в.

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