Перейти к основному содержимому

Использование сжатия в Object Storage

· 2 мин. чтения

Динамически сжимать файлы при раздаче из Object Storage не получится, но это сделать заранее.

Для этого надо сжать файлы локально и загрузить их в Object Storage с указанием соответствующего заголовка Content-Encoding. Браузеры автоматически распакуют сжатые файлы и отобразят их.

Gzip

Сжатие файлов в папке target_dir и сохранение их с расширением .gz.

rm -rf "./gz"
mkdir "./gz"
find ./target_dir -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' -o -name '*.xml' -o -name '*.svg' \) \
-exec /bin/sh -c 'gzip -v -f -9 -c "$1" > "`echo $1 | sed "s|./target_dir|./gz|"`"' /bin/sh {} \;

Загрузка

export BUCKET="test"
aws s3 sync --endpoint=https://storage.yandexcloud.net ./gz s3://$BUCKET \
--include "*.html" --acl "public-read" --content-encoding gzip \
--include "*.js" --acl "public-read" --content-encoding gzip \
--include "*.css" --acl "public-read" --content-encoding gzip \
--include "*.svg" --acl "public-read" --content-encoding gzip

Brotli

Установка brotli на MacOS

brew install brotli

Сжатие файлов в папке target_dir и сохранение их с расширением .br.

rm -rf "./br"
mkdir "./br"
find ./target_dir -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' -o -name '*.xml' -o -name '*.svg' \) \
-exec /bin/sh -c 'brotli -q 11 -o "`echo $1 | sed "s|./target_dir|./br|"`" "$1"' /bin/sh {} \;

Загрузка

export BUCKET="test"
aws s3 sync --endpoint=https://storage.yandexcloud.net ./br s3://$BUCKET \
--include "*.html" --acl "public-read" --content-encoding br \
--include "*.js" --acl "public-read" --content-encoding br \
--include "*.css" --acl "public-read" --content-encoding br \
--include "*.svg" --acl "public-read" --content-encoding br