mirror of
https://github.com/taigrr/wasm-experiments
synced 2025-01-18 04:03:21 -08:00
Add GZIP compression flag
This commit is contained in:
parent
5a5d3084d5
commit
aa3ec594b3
3
Makefile
3
Makefile
@ -74,9 +74,6 @@ test: clean
|
|||||||
clean:
|
clean:
|
||||||
rm -f ./html/*
|
rm -f ./html/*
|
||||||
|
|
||||||
serve:
|
|
||||||
go run main.go
|
|
||||||
|
|
||||||
install-test:
|
install-test:
|
||||||
go get github.com/agnivade/wasmbrowsertest
|
go get github.com/agnivade/wasmbrowsertest
|
||||||
mv $$GOPATH/bin/wasmbrowsertest $$GOPATH/bin/go_js_wasm_exec
|
mv $$GOPATH/bin/wasmbrowsertest $$GOPATH/bin/go_js_wasm_exec
|
||||||
|
16
README.md
16
README.md
@ -22,14 +22,22 @@ rm -f ./html/*
|
|||||||
GOOS=js GOARCH=wasm go build -o ./html/test.wasm ./hello/main.go
|
GOOS=js GOARCH=wasm go build -o ./html/test.wasm ./hello/main.go
|
||||||
cp $(go env GOROOT)/misc/wasm/wasm_exec.html ./html/index.html
|
cp $(go env GOROOT)/misc/wasm/wasm_exec.html ./html/index.html
|
||||||
cp $(go env GOROOT)/misc/wasm/wasm_exec.js ./html/wasm_exec.js
|
cp $(go env GOROOT)/misc/wasm/wasm_exec.js ./html/wasm_exec.js
|
||||||
$ make serve
|
$ go run main.go
|
||||||
go run main.go
|
|
||||||
2019/02/24 14:11:51 Serving on http://localhost:8080
|
2019/02/24 14:11:51 Serving on http://localhost:8080
|
||||||
```
|
```
|
||||||
|
|
||||||
Navigate to http://localhost:8080 to load the page. Some examples require opening
|
Navigate to http://localhost:8080 to load the page. Some examples require opening
|
||||||
the browser console to be seen.
|
the browser console to be seen.
|
||||||
|
|
||||||
|
## Gzip compression
|
||||||
|
|
||||||
|
Use the `-gzip` flag to enable on-the-fly gzip compression of the files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ go run main.go -gzip
|
||||||
|
2019/02/24 14:11:51 Serving on http://localhost:8080
|
||||||
|
```
|
||||||
|
|
||||||
## TinyGo targets
|
## TinyGo targets
|
||||||
|
|
||||||
To compile something with the TinyGo WebAssembly compiler, simply choose the
|
To compile something with the TinyGo WebAssembly compiler, simply choose the
|
||||||
@ -45,8 +53,7 @@ docker run --rm -v $$(pwd):/go/src/github.com/johanbrandhorst/wasm-experiments t
|
|||||||
"
|
"
|
||||||
cp $$(go env GOROOT)/misc/wasm/wasm_exec.html ./html/index.html
|
cp $$(go env GOROOT)/misc/wasm/wasm_exec.html ./html/index.html
|
||||||
sed -i -e 's;</button>;</button>\n\t<div id=\"target\"></div>;' ./html/index.html
|
sed -i -e 's;</button>;</button>\n\t<div id=\"target\"></div>;' ./html/index.html
|
||||||
$ make serve
|
$ go run main.go
|
||||||
go run main.go
|
|
||||||
2019/02/24 14:33:58 Serving on http://localhost:8080
|
2019/02/24 14:33:58 Serving on http://localhost:8080
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -57,6 +64,7 @@ TinyGo:
|
|||||||
- `hello`
|
- `hello`
|
||||||
- `channels`
|
- `channels`
|
||||||
- `js`
|
- `js`
|
||||||
|
- `tinygo-canvas`
|
||||||
|
|
||||||
## Experiments
|
## Experiments
|
||||||
|
|
||||||
|
3
go.mod
3
go.mod
@ -3,8 +3,9 @@ module github.com/johanbrandhorst/wasm-experiments
|
|||||||
go 1.12
|
go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/NYTimes/gziphandler v1.1.1
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
github.com/hajimehoshi/ebiten v1.9.3
|
github.com/hajimehoshi/ebiten v1.9.3
|
||||||
github.com/vugu/vugu v0.0.0-20190518235128-5a84f26390d1 // indirect
|
github.com/vugu/vugu v0.0.0-20190518235128-5a84f26390d1
|
||||||
golang.org/x/image v0.0.0-20190618124811-92942e4437e2
|
golang.org/x/image v0.0.0-20190618124811-92942e4437e2
|
||||||
)
|
)
|
||||||
|
7
go.sum
7
go.sum
@ -1,6 +1,10 @@
|
|||||||
|
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
|
||||||
|
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
|
||||||
|
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
|
||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||||
|
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/go-gl/glfw v0.0.0-20181213070059-819e8ce5125f h1:7MsFMbSn8Lcw0blK4+NEOf8DuHoOBDhJsHz04yh13pM=
|
github.com/go-gl/glfw v0.0.0-20181213070059-819e8ce5125f h1:7MsFMbSn8Lcw0blK4+NEOf8DuHoOBDhJsHz04yh13pM=
|
||||||
github.com/go-gl/glfw v0.0.0-20181213070059-819e8ce5125f/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20181213070059-819e8ce5125f/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
@ -33,9 +37,12 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
|
|||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
|
||||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/vugu/vugu v0.0.0-20190518235128-5a84f26390d1 h1:Iowi+7qqrJr/6RmZFIM8g6n6e8TENUNiOxex1xG/NHA=
|
github.com/vugu/vugu v0.0.0-20190518235128-5a84f26390d1 h1:Iowi+7qqrJr/6RmZFIM8g6n6e8TENUNiOxex1xG/NHA=
|
||||||
github.com/vugu/vugu v0.0.0-20190518235128-5a84f26390d1/go.mod h1:JXaMmpEMpofCzJj8TmSWeLDxAajs4a4wrac5VYwj4A8=
|
github.com/vugu/vugu v0.0.0-20190518235128-5a84f26390d1/go.mod h1:JXaMmpEMpofCzJj8TmSWeLDxAajs4a4wrac5VYwj4A8=
|
||||||
|
28
main.go
28
main.go
@ -1,21 +1,35 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/NYTimes/gziphandler"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var gz = flag.Bool("gzip", false, "enable automatic gzip compression")
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fs := http.FileServer(http.Dir("./html"))
|
flag.Parse()
|
||||||
log.Print("Serving on http://localhost:8080")
|
h := wasmContentTypeSetter(http.FileServer(http.Dir("./html")))
|
||||||
err := http.ListenAndServe(":8080", http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
|
if *gz {
|
||||||
if req.URL.Path == "/test.wasm" {
|
h = gziphandler.GzipHandler(h)
|
||||||
resp.Header().Set("content-type", "application/wasm")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.ServeHTTP(resp, req)
|
log.Print("Serving on http://localhost:8080")
|
||||||
}))
|
err := http.ListenAndServe(":8080", h)
|
||||||
if err != http.ErrServerClosed {
|
if err != http.ErrServerClosed {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func wasmContentTypeSetter(h http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if strings.HasSuffix(r.URL.Path, ".wasm") {
|
||||||
|
w.Header().Set("content-type", "application/wasm")
|
||||||
|
}
|
||||||
|
h.ServeHTTP(w, r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user