Skip to content
This repository has been archived by the owner on Feb 24, 2024. It is now read-only.

Add in GZIP compression to file serving #1969

Merged
merged 2 commits into from
Apr 17, 2020

Conversation

vincentchu
Copy link
Contributor

Compressing static assets like CSS/JS files can lead to big performance improvements. While this is typically done by a frontend proxy like Apache or Nginx, some providers like Heroku do not offer this and instead rely on the server to implement content compression.

The existing middleware API allows a developer to add compression except for files served via ServeFiles (static assets) where compression would be most useful. In this case, ServeFiles creates a separate http.Handler that is outside of the middleware stack.

To solve this problem for statically-served sites, wrap the file server's http.Handler with Gorilla's CompressionHandler. This handler just checks the request's Accept-Encoding header to enable or disable compression. See: https://godoc.org/github.com/gorilla/handlers#CompressHandler

This change should be invisible to users with the only difference being the return of gzipped responses if the appropriate Accept-Header is sent. In my production environment this led to ~2/3rds reduction in bundle sizes.

/cc @paganotoni

Fixes #1968

@vincentchu vincentchu requested a review from a team as a code owner April 16, 2020 18:18
paganotoni
paganotoni previously approved these changes Apr 16, 2020
Copy link
Member

@paganotoni paganotoni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested it locally and works very nice.

@paganotoni paganotoni added this to the v0.16.6 milestone Apr 16, 2020
@paganotoni paganotoni requested review from stanislas-m and a team April 16, 2020 20:43
@paganotoni paganotoni removed this from the v0.16.6 milestone Apr 16, 2020
Copy link
Member

@stanislas-m stanislas-m left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While this is typically done by a frontend proxy like Apache or Nginx, some providers like Heroku do not offer this and instead rely on the server to implement content compression.

Totally agree, but like you said, some people still want to handle that using their frontend proxy. :) Can you add an option to disable it?

@vincentchu
Copy link
Contributor Author

Totally agree, but like you said, some people still want to handle that using their frontend proxy. :) Can you add an option to disable it?

Done!

@vincentchu vincentchu requested a review from stanislas-m April 16, 2020 22:04
@paganotoni paganotoni merged commit 4a6755c into gobuffalo:development Apr 17, 2020
@paganotoni
Copy link
Member

Thanks @vincentchu!

paganotoni added a commit that referenced this pull request Apr 21, 2020
* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

* Merging master (#1936)

* v0.16.1 (#1929)

* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>

* Add stack trace to ErrPanic event for easier debugging and monitoring (#1930)

Co-authored-by: Canh Nguyen <[email protected]>

* Modifies our docker file to pull buffalo binary from releases. (#1935)

* fixing docker image to use github binary

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>

* Update js template to support font awesome (#1933)

* v0.16.1 (#1929)

* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>

* Add stack trace to ErrPanic event for easier debugging and monitoring (#1930)

Co-authored-by: Canh Nguyen <[email protected]>

* Update js template to support font awesome

The latest version of font-awesome requires the js file to also be present for a glyph to work.  To see this work, add this code to any page template:

```html
<h3>
<a href=#" target="_blank"><i class="fab fa-twitter-square share" aria-hidden="true"></i></a>
</h3>
```

Without this JS file, the glyph will not render.

Co-authored-by: Antonio Pagano <[email protected]>
Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>

* Fixes generated package.json and resources generator (#1944)

* v0.16.1 (#1929)

* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>

* Add stack trace to ErrPanic event for easier debugging and monitoring (#1930)

Co-authored-by: Canh Nguyen <[email protected]>

* Modifies our docker file to pull buffalo binary from releases. (#1935)

* fixing docker image to use github binary

* Bump pop version (#1937)

* adding resource and new app generator fixes

* fixing buffalo generator to use v5 of pop

* updating popper and removing repeated version of webpack-manifest

* updating old tooling on the JS side

* updating webpack version

* updating node dependencies on fixture to remove github warnings

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>

* updating dockerfile to use v0.16.3

* packing

* Adding new template for codeclimate code analysis (#1946)

* adding new template for codeclimate code analysis

* packing

* Updates our coke app package.json and Yarn (#1947)

* updating package.lock on the lock sample

* removing old pop plugin

* adding task to the fixers

* removing the fixer part

* Removes old buffalo-pop plugin (#1948)

* removes old buffalo-pop plugin

* naming change

* using filepath for auto render files (#1951)

* Bugfix c.Error http code (#1952)

* fixes error code not being logged

* adding tests for the status code when error handled fires

* Allows to set test timeout (#1953)

* allowing to pass timeout to the test command

* packing

* Fixes plush to use now plush/v4 (#1954)

* Adding packr files (#1956)

* Missing comments on the Plugins struct (#1958)

* Adding packr files

* adding a couple of comments missing

* fixing mispell package (#1960)

* Task #1941 (#1943)

* covering non id cases on the route name generator

* fixing broken tests

* adding a few more test cases

* moving to just use a string for simplified ID

* bumping version

* packing

* use go 1.14 for building goreleaser binaries (#1962)

* adds an extra file to our releases that will be pulled by our docker images build process (#1964)

* cleaning some docker issues (#1966)

* Fix GO111MODULE value in build Docker images (#1970)

* Add in GZIP compression to file serving (#1969)

* Add in GZIP compression to file serving

* Add option to control gzip

* Added genny support for CircleCI as a CI provider. (#1972)

* Added genny support for CircleCI as a CI provider.

* Updated circleci template

* Also fixed Travis and GitLab templates

* removing helpers from the Go template Engine (#1971)

* adding next version

* packing

* making codeclimate ignore packr files

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>
Co-authored-by: Cory LaNou <[email protected]>
Co-authored-by: Vlad Artamonov <[email protected]>
Co-authored-by: Vincent Chu <[email protected]>
Co-authored-by: James Turnbull <[email protected]>
paganotoni added a commit that referenced this pull request May 25, 2020
* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

* Merging master (#1936)

* v0.16.1 (#1929)

* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>

* Add stack trace to ErrPanic event for easier debugging and monitoring (#1930)

Co-authored-by: Canh Nguyen <[email protected]>

* Modifies our docker file to pull buffalo binary from releases. (#1935)

* fixing docker image to use github binary

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>

* Update js template to support font awesome (#1933)

* v0.16.1 (#1929)

* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>

* Add stack trace to ErrPanic event for easier debugging and monitoring (#1930)

Co-authored-by: Canh Nguyen <[email protected]>

* Update js template to support font awesome

The latest version of font-awesome requires the js file to also be present for a glyph to work.  To see this work, add this code to any page template:

```html
<h3>
<a href=#" target="_blank"><i class="fab fa-twitter-square share" aria-hidden="true"></i></a>
</h3>
```

Without this JS file, the glyph will not render.

Co-authored-by: Antonio Pagano <[email protected]>
Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>

* Fixes generated package.json and resources generator (#1944)

* v0.16.1 (#1929)

* merge changes from buffalo-cli into main repo

* cache deps before building and copying source (#1884)

cache deps before building and copying source so that we don't need to re-download as much
and so that source changes don't invalidate our downloaded layer

* Generator resource action test breaks with unused imports fixes #1893 (#1894)

* Generator resource action test breaks with unused imports fixes #1893

* break packr cache

* fix broken test

* update deps (#1896)

* update deps

* update envy

* update meta

* switch to tags/v3 for consistency (#1901)

* update helpers/tags

* update validate

* try to fix mismatched imports (#1921)

* fixes more broken semantic import paths (#1925)

* adding a few packages to replace

* Replace Azure badge with Github actions badge (#1920)

Co-authored-by: Antonio Pagano <[email protected]>

* changing the packages to be replaced (#1928)

* changing the packages to be replaced

* adding back gobuffalo/uuid change

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>

* Add stack trace to ErrPanic event for easier debugging and monitoring (#1930)

Co-authored-by: Canh Nguyen <[email protected]>

* Modifies our docker file to pull buffalo binary from releases. (#1935)

* fixing docker image to use github binary

* Bump pop version (#1937)

* adding resource and new app generator fixes

* fixing buffalo generator to use v5 of pop

* updating popper and removing repeated version of webpack-manifest

* updating old tooling on the JS side

* updating webpack version

* updating node dependencies on fixture to remove github warnings

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>

* updating dockerfile to use v0.16.3

* packing

* Adding new template for codeclimate code analysis (#1946)

* adding new template for codeclimate code analysis

* packing

* Updates our coke app package.json and Yarn (#1947)

* updating package.lock on the lock sample

* removing old pop plugin

* adding task to the fixers

* removing the fixer part

* Removes old buffalo-pop plugin (#1948)

* removes old buffalo-pop plugin

* naming change

* using filepath for auto render files (#1951)

* Bugfix c.Error http code (#1952)

* fixes error code not being logged

* adding tests for the status code when error handled fires

* Allows to set test timeout (#1953)

* allowing to pass timeout to the test command

* packing

* Fixes plush to use now plush/v4 (#1954)

* Adding packr files (#1956)

* Missing comments on the Plugins struct (#1958)

* Adding packr files

* adding a couple of comments missing

* fixing mispell package (#1960)

* Task #1941 (#1943)

* covering non id cases on the route name generator

* fixing broken tests

* adding a few more test cases

* moving to just use a string for simplified ID

* bumping version

* packing

* use go 1.14 for building goreleaser binaries (#1962)

* adds an extra file to our releases that will be pulled by our docker images build process (#1964)

* cleaning some docker issues (#1966)

* Fix GO111MODULE value in build Docker images (#1970)

* Add in GZIP compression to file serving (#1969)

* Add in GZIP compression to file serving

* Add option to control gzip

* Added genny support for CircleCI as a CI provider. (#1972)

* Added genny support for CircleCI as a CI provider.

* Updated circleci template

* Also fixed Travis and GitLab templates

* removing helpers from the Go template Engine (#1971)

* adding next version

* packing

* making codeclimate ignore packr files

* adding direct version on the docker build

* fixing plugin installation

* bumping version

* Binding refactoring (#1975)

* refactoring binding a bit

* adding tests for null time decoder

* removing unneeded variable

* little bit of name changes

* moving RequestTypeBinder interface

* adding some missing comments

* advancing on Marks recommendations. 1st step is to reduce the indirect behavior on the interface

* back to locks

* adding lock on Exec

* adding those missing tests

* moving time formats to the decoders section

* added autoprefixer for bootstrap compilation (#1990)

* Add batch mail sending (#1815)

* Add batch mail sending

* fix formatting

* fix batch send

* fix single mail check

Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: Antonio Pagano <[email protected]>

* Updates jQuery Dependency (#1995)

* updating jquery and bootstrap to pass a security warning we have in the repo

* changing docker version for next release

* packing

* removing extra file from the releaser

* adding some missing comments

* removing unused fields

Co-authored-by: Mark Bates <[email protected]>
Co-authored-by: Dr Nic Williams <[email protected]>
Co-authored-by: HD Moore <[email protected]>
Co-authored-by: Stanislas Michalak <[email protected]>
Co-authored-by: xuancanh <[email protected]>
Co-authored-by: Canh Nguyen <[email protected]>
Co-authored-by: Cory LaNou <[email protected]>
Co-authored-by: Vlad Artamonov <[email protected]>
Co-authored-by: Vincent Chu <[email protected]>
Co-authored-by: James Turnbull <[email protected]>
Co-authored-by: arunsworld <[email protected]>
Co-authored-by: Ilya Krasheninnikov <[email protected]>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants