Практическая польза от использования готовых словарей при сжатии текстовых данных, упомянутого в предшествующем сообщении, различна для двух возможных сценариев использования.
Во-первых, когда какой-нибудь вспомогательный файл сайта (стиль CSS или код JS) отредактирован, тогда новая версия его обыкновенно бывает гораздо больше по объёму, нежели величина одного только набора внесённых правок — того списка затронутых строк (прибавленных, измѣнённыхъ, стёртых), который пользователи систем контроля версий обычно называют словом «дифф» или «патч». Слѣдовательно, если у большинства постоянных посѣтителей такого сайта в кэше у браузера осталась предшествующая версия файла, то можно использовать её в качестве готового словаря и тѣмъ достигнуть мощной силы сжатия — передаваемый «сжатый файл» в этом случае фактически представляет собою всего только «дифф» (он же «патч»), да ещё дополнительно доужатый кодировщиком. По-видимому, всё то же сáмое можно сказать и об RSS-потоках (и об их аналогах Atom), в которых чаще всего новая новость (напримѣръ, блогозапись) и вытесняемая ею старая новость совокупно бывают во много раз меньше общего объёма потока.
Во-вторых, когда рѣчь идётъ ужé не о вспомогательных файлах, а об основных HTML-страницах, то в них часто есть повторяющиеся куски:
• в шапке у каждой страницы часто одни и те же ссылки на стили, на скрипты, на значок (favicon) и проч.,
• в подвале у каждой страницы часто одни и те же дисклеймеры да копирайты,
• какой-нибудь подзаголовок всегда окаймляется одним и тѣмъ же кодом (мѣняется только сам текст заголовка),
• какой-нибудь тип иллюстраций всегда окаймляется одним и тѣмъ же кодом (мѣняется только имя файла и текст подписи),
• какой-нибудь навигационный блок повторяется на каждой странице почти таким же, как и на других — разве что в нём подсвѣчивается текущая страница или подраздѣлъ,
• какой-нибудь код обратной связи повторяется на каждой странице почти таким же, как и на других,
• для экономии обращений на сёрвер многие сайты оформляют мелкие значки как спрайты — их код очень похож и отсылает к одному и тому же графическому файлу, отличаясь только координатами или идентификатором желаемого спрайта.
Но если в первом сценарии перемѣнная часть («дифф», он же «патч») была кратно меньше постоянной, то во втором постоянная часть (общие куски страниц, во всей совокупности их) обычно меньше остального (перемѣннаго) тѣла страницы. Слѣдовательно, во втором сценарии рост силы сжатия от использования готового словаря — это рост «на проценты», а не «в разы».
Ещё одно послѣдствіе — необходимость ѿдѣльно подготавливать именно словарь как таковой (файл, содержащий одни только общие части страниц). Как правило, нельзя брать примѣръ съ предшествующаго сценария и использовать в роли готового словаря существующий файл (напримѣръ, давно не измѣнявшуюся страницу сайта): ожидаемая экономия траффика (от сжатия остальных страниц) может оказаться меньше, чѣмъ расходы на скачивание страницы-словаря — напримѣръ, когда постоянныя куски страниц (которые одни полезны в качестве словаря) в среднем в N раз меньше объёма страниц, а типичный посѣтитель сайта в среднем заходит меньше, чѣмъ на N страниц (то есть большинство приходит на двѣ или три страницы, которыя-то и нужны им, а затѣмъ быстро уходит навсегда). Очень рѣдко страница-словарь способна «доставаться бесплатно» за счёт того, что оказывается не просто давно не мѣнявшеюся, но и часто посѣщаемою (а оттого ужé лежит в кэше у большинства посѣтителей, не требует расхода траффика перед употреблением в качестве словаря).
А вот как раз с генераторами готовых словарей ещё не успѣли нормально наладить дѣло за полгода работы стандарта:
➊ Если на сборище файлов, по которым создаётся словарь общих частей, указывать в форме «*.html», а не в форме пути к подкаталогу, то zstd выдаёт такое сообщение об ошибке, по которому нельзя понять причину ея.
➋ Brotli вообще не предлагает готовую сборку генератора словарей (а планы такие были).
➌ Онлайновый генератор «Compression Dictionary Transport Dynamic Dictionary Tester» не грохнется ли, если сдѣлается популярным?
Во-первых, когда какой-нибудь вспомогательный файл сайта (стиль CSS или код JS) отредактирован, тогда новая версия его обыкновенно бывает гораздо больше по объёму, нежели величина одного только набора внесённых правок — того списка затронутых строк (прибавленных, измѣнённыхъ, стёртых), который пользователи систем контроля версий обычно называют словом «дифф» или «патч». Слѣдовательно, если у большинства постоянных посѣтителей такого сайта в кэше у браузера осталась предшествующая версия файла, то можно использовать её в качестве готового словаря и тѣмъ достигнуть мощной силы сжатия — передаваемый «сжатый файл» в этом случае фактически представляет собою всего только «дифф» (он же «патч»), да ещё дополнительно доужатый кодировщиком. По-видимому, всё то же сáмое можно сказать и об RSS-потоках (и об их аналогах Atom), в которых чаще всего новая новость (напримѣръ, блогозапись) и вытесняемая ею старая новость совокупно бывают во много раз меньше общего объёма потока.
Во-вторых, когда рѣчь идётъ ужé не о вспомогательных файлах, а об основных HTML-страницах, то в них часто есть повторяющиеся куски:
• в шапке у каждой страницы часто одни и те же ссылки на стили, на скрипты, на значок (favicon) и проч.,
• в подвале у каждой страницы часто одни и те же дисклеймеры да копирайты,
• какой-нибудь подзаголовок всегда окаймляется одним и тѣмъ же кодом (мѣняется только сам текст заголовка),
• какой-нибудь тип иллюстраций всегда окаймляется одним и тѣмъ же кодом (мѣняется только имя файла и текст подписи),
• какой-нибудь навигационный блок повторяется на каждой странице почти таким же, как и на других — разве что в нём подсвѣчивается текущая страница или подраздѣлъ,
• какой-нибудь код обратной связи повторяется на каждой странице почти таким же, как и на других,
• для экономии обращений на сёрвер многие сайты оформляют мелкие значки как спрайты — их код очень похож и отсылает к одному и тому же графическому файлу, отличаясь только координатами или идентификатором желаемого спрайта.
Но если в первом сценарии перемѣнная часть («дифф», он же «патч») была кратно меньше постоянной, то во втором постоянная часть (общие куски страниц, во всей совокупности их) обычно меньше остального (перемѣннаго) тѣла страницы. Слѣдовательно, во втором сценарии рост силы сжатия от использования готового словаря — это рост «на проценты», а не «в разы».
Ещё одно послѣдствіе — необходимость ѿдѣльно подготавливать именно словарь как таковой (файл, содержащий одни только общие части страниц). Как правило, нельзя брать примѣръ съ предшествующаго сценария и использовать в роли готового словаря существующий файл (напримѣръ, давно не измѣнявшуюся страницу сайта): ожидаемая экономия траффика (от сжатия остальных страниц) может оказаться меньше, чѣмъ расходы на скачивание страницы-словаря — напримѣръ, когда постоянныя куски страниц (которые одни полезны в качестве словаря) в среднем в N раз меньше объёма страниц, а типичный посѣтитель сайта в среднем заходит меньше, чѣмъ на N страниц (то есть большинство приходит на двѣ или три страницы, которыя-то и нужны им, а затѣмъ быстро уходит навсегда). Очень рѣдко страница-словарь способна «доставаться бесплатно» за счёт того, что оказывается не просто давно не мѣнявшеюся, но и часто посѣщаемою (а оттого ужé лежит в кэше у большинства посѣтителей, не требует расхода траффика перед употреблением в качестве словаря).
А вот как раз с генераторами готовых словарей ещё не успѣли нормально наладить дѣло за полгода работы стандарта:
➊ Если на сборище файлов, по которым создаётся словарь общих частей, указывать в форме «*.html», а не в форме пути к подкаталогу, то zstd выдаёт такое сообщение об ошибке, по которому нельзя понять причину ея.
➋ Brotli вообще не предлагает готовую сборку генератора словарей (а планы такие были).
➌ Онлайновый генератор «Compression Dictionary Transport Dynamic Dictionary Tester» не грохнется ли, если сдѣлается популярным?