Publicsuffixes gz для чего этот файл

Обновлено: 05.07.2024

Вы наверняка встречали файлы с расширением .tar, .zip или .gz . А знаете ли вы, чем они отличаются, почему мы их используем, и какой формат наиболее эффективен?

Различия между tar, .zip и .gz

Если вам некогда вникать в подробности, то вот краткое и понятное объяснение:

  • .tar — архивный файл без сжатия
  • .zip — (как правило) сжатый архивный файл
  • .gz — файл (архивный или не архивный), который сжали с помощью gzip

История развития архивов

Эта история началась в далёких 70х, как и многое из того, что связано с Unix системой и ей подобными . Морозное январское утро 1979 года ознаменовалось появлением утилиты tar в составе дистрибутива Unix V7.

Утилита tar была разработана для эффективной записи большого количества файлов на магнитные ленты. Большинство современных пользователей Linux незнакомы с ленточными накопителями. Тем не менее, tar архивы (они же tarballs) до сих пор широко используются, когда нужно упаковать несколько файлов или даже древо каталога целиком (или целый «лес» 🙂 в один файл.

Главное, что нужно запомнить о tar файле ― что это просто архив, без сжатия. Другими словами, если вы архивируете 100 файлов по 50kb, то на выходе получите архив размером около 5000kb. Используя только tar, единственное на что можно рассчитывать это экономия пространства за счёт файловой системы. Например, файл длинной 1 байт использует 4kb дискового пространства, а 1000 таких файлов займёт уже 4Mb, а tar архив с этими файлами займёт всего 1Mb.

Стоит отметить, что tar не единственный стандартный инструмент Unix для создания архивов. Программисты вероятно знакомы с форматом ar, так как он используется для создания статических библиотек, которые являются по сути архивами скомпилированных файлов. Но ar позволяет создать архив из чего угодно. Например, пакеты .deb в системе Debian не что иное, как архивы ar. А пакеты mpkg в MacOS X — это cpio архивы, сжатые с помощью gzip. Но эти форматы не стали так популярны у пользователей, как tar. Вероятно, потому что использовать команды tar удобнее и проще.

Архивы — это хорошо, но с началом эры персональных компьютеров, люди поняли, что, сжимая данные можно существенно экономить память. Поэтому, спустя десять лет после появления tar, уже в мир MS-DOS, пришёл формат архива с возможностью сжатия — zip. Наиболее распространённый алгоритм сжатия в zip — это Deflate, который использует алгоритмы LZ77 . Формат zip многие годы страдал от обременений патентами компании PKWARE.

В то же время был создан gzip, который также использовал алгоритм LZ77, но для бесплатного использования, не нарушая патент PKWARE.

Gzip создавался только для сжатия файлов, согласно ключевому понятию в философии Unix ― « Делай что-то одно, но делай это хорошо ». Таким образом, чтобы создать сжатый архив ― сначала вам нужно создать архив, например с помощью утилиты tar, а после этого сжать его. Так получается файл .tar.gz (иногда сокращается до .tgz, из-за соблюдения давно забытых ограничений в имени файла MS-DOS).

По мере развития компьютерных наук создавались и другие алгоритмы, для более эффективного сжатия. Например реализация алгоритма Барроуза — Уилера в bzip2 (отсылка к .tar.bz2 архивам). Или более новый формат xz, в котором реализован алгоритм LZMA . Этот алгоритм используется в архиваторе 7zip.

Доступность и ограничения

Сегодня вы можете без проблем использовать любой формат архивных файлов как в Linux, так и в Windows.

Благодаря нативной поддержке формата zip в Windows, zip особенно актуален для кроссплатформенного применения. Порой, zip файл можно встретить в неожиданных местах. Например, этот формат использовала компания Sun для архивов JAR, в которых распространяется скомпилированное приложение Java. Файлы OpenDocument (.odf, .odp …) в офисных приложениях, на самом деле являются zip архивами. Если вам интересно, распакуйте один из них и посмотрите, что внутри:

sh$ unzip some-file.odt
Archive:some-file.odt
extracting: mimetype
inflating: meta.xml
inflating: settings.xml
inflating: content.xm
[. ]
inflating: styles.xml
inflating: META-INF/manifest.xml

Несмотря на всё вышесказанное, в UNIX-мире я бы предпочёл использовать tar архивы, потому что формат zip недостаточно надёжно поддерживает все метаданные файловой системы Unix. Дело в том, что формат zip определяет лишь небольшой набор обязательных атрибутов файла для каждой записи: имя файла, дата изменения, право доступа. Кроме этих базовых атрибутов, архиватор может хранить и другие метаданные, в дополнительном поле заголовка zip. Но, поскольку дополнительное поле зависит от реализации, нет никаких гарантий, что вы получите тот же набор метаданных, даже в совместимых архиваторах. Давайте проверим это на примере:

sh$ ls -lsn data/team
total 0
0 -rw-r--r-- 1 1000 2000 0 Jan 30 12:29 team

sh$ zip -0r archive.zip data/

sh$ zipinfo -v archive.zip data/team

The central-directory extra field contains:
- A subfield with ID 0x5455 (universal time) and 5 data bytes.
The local extra field has UTC/GMT modification/access times.
- A subfield with ID 0x7875 (Unix UID/GID (any size)) and 11 data bytes:
01 04 e8 03 00 00 04 d0 07 00 00.

Как видите, в дополнительном поле хранится информация о владельце (UID/GID). Если вы умеете читать шестнадцатеричный код, то можно заметить, что в этом архиве используется порядок байтов little-endian (от младшего к старшему) для хранения метаданных. «e803» это «03e8», что означает «1000» ― UID файла. А «07d0» это «d007», что означает «2000» ― GID файла.

В этом конкретном случае инструмент info-ZIP , который я использую в системе Debian, сохранил некоторые полезные метаданные в дополнительном поле. Но это не значит, что любой архиватор запишет те же данные в дополнительном поле. И нет гарантий, что другой архиватор сможет прочитать эти данные.

Таким образом существует две причины, по которым до сих пор используют tarballs. Это либо просто старая привычка, либо те причины, о которых я говорил выше, когда zip не может полностью заменить tar. Особенно если для вас важно сохранить все стандартные метаданные файла.

Тест на эффективность: Tar vs Zip vs Gz

Здесь я сравниваю эффективность сжатия. Я учитываю только сэкономленное пространство, без учёта затраченного времени. Как правило, чем эффективней алгоритм сжатия, тем больше ресурсов ЦП он требует.

Чтобы сравнить эффективность алгоритмов, я использовал файлы в популярных форматах размером около 100Mb. В таблице результаты, которые я получил в системе Debian Stretch (все размеры я узнал командой du -sh):

Есть куча советов как убыстрить отдачу сайта – это и статика через nginx и кластеризация и куча еще всяческих хитрых технологий. Однако во всех книжках, советующих как можно повысить загрузку сайтов можно найти две постоянно повторяющиеся темы – «склеивание CSS/JS» и «включение сжатия».

Склейка
Все просто – если например у Вас на страничке 3 CSS файла и 5 JS, браузеру при загрузке придется создавать 8 соединений и выкачивать по ним данные, а как известно, лучше несколько больших файлов чем множество мелких. Связано это с тем, что на каждую установку соединения браузер тратит время и зачастую немаленькое – до 40% времени загрузки.

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

Как говорят «никогда не переписывайте то, что можно просто вырезать и наклеить» ;)

Сжатие
Чем меньше объем «прокачиваемых» файлов, тем соответственно меньше время тратится на загрузку. Даже если эти файлы сжаты и мы тратим некторое время на распаковку – при современных вычислительных мощностях на клиенте эта временная затрата практически не существенна.
Большинство современных браузеров поддерживают метод сжатия deflate, иногда называемый gzip по имени стандартной *nix утилиты, осуществляющей это дело.

Что можно и нужно сжимать в веб? Любые текстовые запросы, как то: JS / CSS / JSON / HTML.

Есть замечательный модуль для Апача mod-deflate, которым можно прямо из .htaccess указать чего сжимать и чего не сжимать, очень прост в использовании, но увы и ах! – обычно запрещенный на стандартных хостингах по причине того, что они (хостеры) опасаются за свое процессорное время.
Доля разумного в этом конечно есть – этот модуль жмет все «на лету» и если не принять некоторых хитростей, каждый раз грузя страничку для нового пользователя он будет
заново пережимать все CSS / JS и т.д.

Если же у вас VDS и Вы – сам себе хозяин – используйте mod-deflate, ибо он хорошо отлажен и примеров применения в сети масса.

А мы вернемся к обычным хостигам – есть ли выход? Даже если Вас съели, у вас всегда есть два выхода — есть выход и здесь. Причем эта задача очень хорошо ложиться на предыдущую – сейчас объясню почему.

Большинство JS / CSS и других текстов – это статика, т.е. они не меняются в процессе функционирования сайта — есть смысл их объеденить, чтобы удовлетворить пункту о «склейке» + сразу же сжать.

Полученные файлы мы положим в некий кэш, откуда наш Апач будет их брать и отдавать. Причем процесс мы автоматизируем через mod-rewrite.

  1. запрашивается некий файл со специального URL
  2. если клиент поддерживает сжатие и сжатый файл такого типа есть в нашем кэше – отдаем и завершаем обработку
  3. если же сжатие не поддерживается и есть просто файл такого типа – отдаем его и заканчиваем обработку
  4. иначе запускаем наш обработчик

В данном случае мы убиваем еще одного зайца — файлы будут отдаваться через PHP всего один раз — при формировании, а дальше будет все как у больших :) статику должен и будет отдавать веб-сервер.

В принципе можно сделать так, чтобы папка совпадала с URL-ом, тогда чуть упростится конфиг mod-rewrite но будет не так интересно, вобщем упростить всегда можно :)

Надеюсь, что в корне Вашего сайта уже живет файл .htaccess с содержанием типа такого:


RewriteEngine On
RewriteBase /
RewriteRule ^.*$ index.php [QSA,L]

Ну либо похожий. Основное условие, что если mod-rewrite не нашел чего сделать с пришедшим URL, он в конце концов вызовет какой-то скриптовый файл.
В данном случае – index.php

Для добавления нашего алгоритма пропишем в .htaccess следующее:

Добавляем поддержку сжатых файлов .gz, а также .jz.gz и .css.gz

ForceType "text/css"
Header set Content-Encoding: gzip
</ FilesMatch >

Добавляем правило отдачи наших файлов (разыменовывание URL в физическую папку)


RewriteCond % = 1
RewriteCond % ^/glue/(.+)$
RewriteCond %/static/glue/%1 -f
RewriteRule . - [L]

Добавляем проверку на поддержку клиентом сжатия


RewriteCond % ^/glue/(.+)$
RewriteCond %/static/glue/%1.gz -f
RewriteCond % ^.*?gzip.*$ [NC]
RewriteCond % !^konqueror [NC]
RewriteRule ^siteglue/(.*)$ /static/glue/$1.gz [L,E=GZ: 1 ]

Если сжатие не поддерживается


RewriteCond % ^/glue/(.+)$
RewriteCond %/static/glue/%1 -f
RewriteRule . static/glue/%1 [L,E=GZ: 1 ]

Теперь возьмемся за нашу самую главную магию – автоматическое формирование этих самых файлов.

Здесь еще одна есть хитрость, в данном случае скорее — еще одна условность – в файлах html мы будем писать запросы к css или js в следующтим виде:
«/glue/1.css—2.css—3-4-5.css», где «-» — это замена «/», а «--» – это разделитель файлов.

Кроме того в именах могут быть только английские буквы, цифры и символ «_», по мне — этого более, чем достаточно.

Конечно же, это условности и Вы можете выбрать себе другие правила и другие разделители. Например можно использовать «,» или что-либо еще.
Однако я выбрал «-» из-за того что это вполне нормальный и часто встречающийся символ URL и с ним врядли могут быть всякие дурацкие проблемы типа вырезания его кривыми скриптами на проксях по пути от Вас до клиента.

В файле в index.php (или что там у вас запускается согласно .htaccess?) добавляем обработчик, который проверяет URL на соответствие нашему «/glue/.*» и в случе совпадения делает echo( Glue::generate( $str ) ), где $str — то, что у нас идет в URL после последнего слэша, т.е. для «/glue/a.js» это будет «a.js»

Сам класс Glue вот такой


class Glue <
static $allowedExt = array (
"js" => array ( "check" => "/^js/.*?.js$/" , "delimeter" => ";n" , "mime" => “text / javascript” ) ,
"css" => array ( "check" => "/^css/.*.css$/" , "delimeter" => "n" , "mime" => “text / css” ) ,
) ;

static function generate ( $str ) <
if ( ! $str ) return null ; //не нашли URL

$files = array ( ) ;
preg_replace ( "/((?:[a-z0-9_.]+-)+[a-z0-9_.]+.([a-z0-9]+))(?:--|$)/ie" , " $files []=str_replace( '-', '/', " 1 ")" , $str ) ;
if ( count ( $files ) == 0 ) return null ; //не нашли ни одного файла в URL

$srcF = “ / static ” ; //наша папка, откуда берется статика
$dstF = “ / glue” ; //папка, нашего кэша

$cext = substr ( strrchr ( $files [ 0 ] , '.' ) , 1 ) ;
if ( $cext === false ) return null ; //не смогли определить расширение

$fd = null ;
foreach ( self :: $allowedExt as $k => $v ) <
if ( $k == $cext ) <
$fd = $v ;
break ;
>
>
if ( ! $fd ) return null ; //не нашли среди доступных расширений

$usedNames = array ( ) ;
$fdC = & $fd [ "check" ] ;
$fdD = & $fd [ "delimeter" ] ;
foreach ( $files as $name ) <
$ext = substr ( strrchr ( $name , '.' ) , 1 ) ;
if (
$ext === false ||
in_array ( $name , $usedNames ) ||
$ext != $cext ||
! preg_match ( $fdC , $name )
) return null ; //не смогли найти расширения, файл ч таким именем уже есть или расширение отличается от первоначального либо имя не удовлетваряет проверке

$usedNames [ ] = $name ;
$filec = file_get_contents ( " / " ) ;
if ( ! $filec ) return null ; //не смогли найти или прочитать файл
$content .= $content != "" ? $fdD . $filec : $filec ;
>


//сохранили файл
file_put_contents ( " / " , $content ) ;

//сохранили сжатый файл
$gzip = gzencode ( $content , 9 ) ;; //gzdeflate( $content, 9 );
if ( $gzip ) file_put_contents ( "/ / .gz" , $gzip ) ;

//мы должны отдать по данному запросу содержимое и mime-тип
header ( "Content-type: " . $fd [ "mime" ] , true ) ;
return $content ;
>
>

Опять же, здесь лишь иллюстрируется один из способов КАК это сделать — не нравится статический класс — Вы можете выбрать любой другой способ — с блэкджеком и дамами не тяжелого поведения ;)

Вот в принципе все, осталось пробежаться по файлам проекта – все таки остался кусочек «ручной» работы :( — и прописать вместо кучи скриптов один, но по правилам, описанным чуть Выше.

Все – при первом запросе автоматически все соберется и начнет отдаваться.

Еще одно маленькое дополнение – а что делать с контентом, отдаваемым PHP?
Его тоже надо сжать!

Для этого в то месте где Вы отдаете файлы текстового вида, там где отдается сформированный контент – например так echo( $content );


if ( isClientSupportGzip ( ) ) <
ob_start ( "ob_gzhandler" ) ;
echo ( $content ) ;
ob_end_flush ( ) ;
> else echo ( $content ) ;

Это будет сжимать отдаваемый динамический контент, если клиент поддерживает сжатие. Функция, его проверяющая, взята с просторов интернета и выглядит так:


function isClientSupportGzip ( ) <
if ( headers_sent ( ) || connection_aborted ( ) ) return false ;
if ( stripos ( getenv ( "HTTP_ACCEPT_ENCODING" ) , "gzip" ) === false ) return false ;
if ( stripos ( getenv ( "HTTP_USER_AGENT" ) , "konqueror" ) !== false ) return false ;
return true ;
>

Для девелоппинга рекомендую завести некую константу режима разработки и в случае установки ее в 1 просто не записывать файлы в кэш и не сжимать динамику – не придется при каждом изменении в каком-либо js файле лазить и очищать нашу директорию с кэшем.

Вот и все – мы чуть-чуть разогнали свой сайт ) По моим наблюдениям прирост в скорости отдачи может составлять 30-40%.

Если есть какие-либо корректировки, предложения или критика – милости прошу в комменты – буду очень признателен, ибо как говорится – век учись )

Быстрых Вам сайтов, максимального сжатия и радостных клиентов ;)

Если вы используете какую либо библиотеку, например jquery, на всех страницах своего проекта с одним и тем же местом расположения, рекомендую все-таки вынести ее в отельный файл, то же касается единого css – т.о. она быстрее скэшируется, браузером.

При склейке JS помните особенность – склеивать надо через «;», т.к. в предыдущем файле после последней строчки может не оказаться «;»

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

Если у Вас в сайт в самой непопулярной кодировке, чтобы все было шоколадно, замените
ForceType «text/javascript» на ForceType «text/javascript; content=windows-1251»
и добавьте: AddCharset windows-1251 .js и AddCharset windows-1251 .css

И еще маленький совет, придерживайтесь одинаковой очередности в указании склеиваемых файлов, ибо технически «/glue/a.js—b.js» и «/glue/b.js—a.js» это одно и тоже, а на практике вы получите два файла в кэше…

Из комментариев

Imenem и TrueDrago подсказали, что оптимальный уровень для deflate компрессии не 9, а 6

GZ – расширение, которое присваивается архивам, созданным при помощи приложения Gnu Zipped. Из названия понятно, чьей заслугой является разработка данного проекта. Изначально стандарт создавали для работы в рамках операционной системы Unix. В частности, для того, чтобы можно было пользоваться рассылкой файлов по электронной почте, предварительно уменьшив их размер. В настоящее время в сети довольно много архиваторов для открытия GZ. Учитывая сложность алгоритма GNU, количество хороших конверторов, которые бы работали с алгоритмами стандарта, не вредя воспроизведению содержимого, значительно меньше. Рассмотрим лучшее приложение для работы с указанным стандартом файлов – GZ. Стоит сразу сказать, что у формата есть существенный недостаток – нельзя объединять несколько архивов в один. Поэтому для начала необходимо воспользоваться приложением TAR. В результате конечный файл может получить двойное расширение – tar.gz или .tgz.


Как открыть файл формата .gz?

В большинстве случаев расширение файла .gz содержит набор одного файла, применяемого в операционной системе Unix. Реже архив включает несколько сжатых папок, предварительно соединенных TAR. Если не знаете, чем открыть GZ, можете воспользоваться оригинальным программным обеспечением или приложением WindowsZIP. Второй вариант является приоритетным, потому что поддерживает конвертирование в другие стандарты архивов и обладает обширным набором функций для работы с такими стандартами. Стоит добавить, что изначально GZ функционировал на базе алгоритма DEFLATE, который представляет собой комбинацию двух кодировок: LZ77 и Huffman. Модель была представлена Jean-loup Gailly и Mark Adler в 1993 году. Позже стандарт был подвержен ряду преобразований, в результате чего получил увеличенную сферу применения.

По сегодняшний день пользуется популярность в рамках пересылки по электронной почте. К числу самых известных расширений относятся .tgz. Распаковать такие архивы мы предлагаем с помощью нашего программного обеспечения. Утилита подходит для ОС Windows, Linux, а также Mac.

Программа WindowsZIP для открытия GZ файлов

При помощи утилиты WindowsZIP пользователи имеют возможность не только открывать файлы .gz, но и преобразовывать другие расширения. Программное обеспечение предполагает взаимодействие со всеми типами архивов. Вдобавок, наше ПО позволяет задавать гибкие настройки параметров. Доступно до двадцати форматов для сохранения архивов. Если не знаете, как открыть GZ, достаточно дважды кликнуть по файлу. Впрочем, управление понятно даже для начинающих юзеров благодаря продуманному менеджеру расширений и конвертеру.

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

чем открыть формат GZ

Способ 1: PeaZip

Мощный и в то же время легковесный архиватор со множеством функций и поддерживаемых форматов.

Альтернативный метод открыть файл в PeaZip

Найти файл в Проводнике PeaZip

У этой программы множество достоинств, в том числе бесплатность и наличие портативной версии (которую не нужно устанавливать на компьютер). Однако присутствуют и недостатки, ключевой из которых – баги с поддержкой кириллицы. Ошибок можно избежать, если в пути к архиву не будет русских букв и сам GZ-файл не будет содержать их в названии.

Способ 2: PicoZip

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

Второй способ открыть файл в PicoZip

Файл в проводнике через PicoZip

Открытый файл в PicoZip

Степень сжатия архива PicoZip

Достоинств у этой программы, как и недостатков, немного. К первым отнесем возможность просмотреть степень сжатия архива внизу рабочего окна.

Недостатком же можно считать платность приложения – триал-версия работоспособна только 21 день.

Способ 3: WinZip

WinZip от корпорации Corel – одна из самых распространенных программ-архиваторов. Поддержка формата GZ, таким образом, выглядит для этого приложения вполне естественной.

Открыть WinZip

Наверняка, WinZip – самый современный архиватор во всех смыслах, начиная от интерфейса и заканчивая возможностями. Современность программы с другой стороны является и её недостатком – она достаточно ресурсоемкая и интерфейс несколько перегружен. Ну и высокая цена, а также ограничение срока действия пробной версии могут отпугнуть многих.

Способ 4: 7-Zip

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

Несмотря на минималистичный интерфейс и кажущуюся простоту, 7-Zip один из самых мощных архиваторов. Как и большинство свободного ПО, он не слишком удобен, однако к неудобству можно привыкнуть – тем более, что алгоритмы сжатия данных в этой программе считаются одними из лучших в мире.

Способ 5: WinRAR

Знаменитая и самая популярная программа для работы с архивами тоже способна открывать архивы в формате GZ.

Подводя итог, обратим ваше внимание на такой факт – онлайн-сервисы для работы с заархивированными файлами пока еще далеки от удобства отдельно устанавливаемых решений. Преимущество standalone-программ над веб-вариантами очевидно, когда дело доходит до архивов, которые зашифрованы или защищены паролями. Так что приложение-архиватор еще долго будет входить в «джентльменский набор» софта, который устанавливается на чистую ОС. Благо, выбор очень богатый – начиная от гиганта WinRAR и заканчивая простым, но функциональным PeaZip.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: