Почему HTTP основан на тексте, а не на каком-то сжатом методе? Почему JS не сжимается? - PullRequest
1 голос
/ 23 июля 2011


Я прослушал несколько пакетов в своем браузере Google Chrome - и обнаружил, что:

  1. HTTP-запросы отправляются в виде текста - фактически отправляя GET BLABLABLA
  2. JS принимается как текст
  3. HTML \ images и т. Д. Передаются в виде какого-либо сжатого метода.

Мой вопрос: почему HTTP и JS передаются без сжатия?
Я думаю, что полностью сформированный HTTP-запрос может быть сжат до 3 ~ 5 байт, не включая файлы cookie, и учитывая, что выбор страницы также сжат (например, site.com/thisisanicefile.html> site.com/ABC)
Также -почему JS передается как обычный текст, а не как массив токенов (языки программирования преобразуются в массив токенов перед выполнением - то же самое относится и к языкам сценариев)?
Спасибо - Марк

Ответы [ 3 ]

10 голосов
/ 23 июля 2011

Для HTTP : ну, вот как определяется протокол. Протокол основан на тексте. Упрощает реализацию без необходимости беспокоиться о таких вещах, как порядок байтов.

Содержимое (html, javascript, images, ...) можно отправлять сжатым, это вопрос кодирования «согласования» между браузером и сервером (оба должны поддерживать его). См. Страницу HTTP Compression в Википедии, чтобы узнать, как это работает.

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

Вам также необходимо скомпилировать код JS, прежде чем вы сделаете его доступным на своем веб-сервере (еще одна задача сборки / развертывания), или скомпилировать его на лету (потеря ЦП), и это не избавит от необходимости полноценный интерпретатор исходного кода в браузере без ограничения языка (не более eval / генерация кода на внешнем интерфейсе, если он не может обработать JS-источник).

2 голосов
/ 23 июля 2011

HTTP-заголовок никогда не сжимается - просто нет протокола для сжатия HTTP-заголовка.Я полагаю, что в этом нет необходимости, это не значит, что заголовок - это очень большая часть вашего сайта размером более 100 КБ.

Для отдельных HTTP-запросов поведение зависит от конфигурации сервера и клиента.Если клиент не скажет, что он счастлив принять gzip / дефлированный контент, сервер не будет сжиматься.Если клиент так говорит, то сервер может выбрать сжатие в зависимости от его конфигурации.(Например, для Apache вам нужно настроить mod_deflate).

Например, для сервера было бы совершенно разумно не сжимать JPEG и PNG, поскольку они уже сжимаются.Сервер также может не захотеть сжимать что-либо, обрабатываемое обработчиком PHP, и предпочитать оставить это на усмотрение обработчика или нет.(Так, например, если обработчик доставляет PDF, он может сжать, но если он доставляет MP3, он не будет.)

Краткий ответ: все зависит.

0 голосов
/ 23 июля 2011

... преждевременная оптимизация - корень всего зла

(с) Вы знаете, кто

Заголовки должны быть всегда в виде текста - только тела могут быть сжаты. Также можно распаковать тела JS - увидим настройки веб-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...