Laravel/Php - How to serve gzipped content from S3 – Nivesh's blog
Published on

Laravel/Php - How to serve gzipped content from S3

Authors

Until last month, our apps were serving JavaScript files from s3 without any compression and one of our customer asked us if we can enable gzip compression on the assets being served.

As much as I researched, I found there is no out of the box gzip compression for the files on Amazon S3, Digital Ocean Spaces or Vultr Objects etc. So I decided to gzip compress the content of file on my server's end and then upload the compressed version to s3.

Here's what my code looks like now (Laravel Example)

$disk = config('filesystems.cloud'); // Returns s3

$settings = $shop->app_settings(); // Returns an array of all the settings

$content = view()->make('scripts.settings', compact('settings'))->__toString(); // Loads a view with all the settings

$gzippedContent = gzencode($content); // gzip compress the content

$fileName = 'settings/' . $shop->domain . '.js';

// Here we upload the file to S3
$response = \Storage::disk($disk)->put($fileName, $content, [
    'visibility'     => 'public',
    'ContentType'    => 'application/javascript',
    'ContentEncoding'=> 'gzip',
]);

The only thing I had to do was just use a simple Php function gzencode() and send ContentEncoding along with the put request.

As the result, the file size is now reduced by almost 40% and the app loads way faster than before.

I've got more coming...

Want to hear from me when I add new post? Sign up for my newsletter and I'll email you every time I post a new article. (I'll never share your email and only send you updates about new articles.)