Использование сжатия в 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