清风徐来
Michael's Blog
Demo 学 Echo Part14 HTTP Gzip压缩

请输入图片描述

如果不采用Echo时,可以使用第三方库gziphandler,Echo直接用Gzip中间件。 HTTP Gzip 就是耗费一丢丢cpu,但是减少了网络传输的大小,从而提升传输速度也减少了带宽投入。 只要Rquest header中有Accept-Encoding: gzip, deflate就说明浏览器支持HTTP Gzip,现代浏览器估计没有不支持的。当然后端处理也需要响应头也要插入Content-Encoding: gzip才行。 么有采用HTTP Gzip看看传输大小:

package main

import (
    "io"
    "net/http"
    "os"
)

func main() {
    mux := new(http.ServeMux)

    mux.HandleFunc("/image", func(w http.ResponseWriter, r *http.Request) {
        f, err := os.Open("sample.png")
        if f != nil {
            defer f.Close()
        }
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }

        _, err = io.Copy(w, f)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
        }
    })

    server := new(http.Server)
    server.Addr = ":9000"
    server.Handler = mux

    server.ListenAndServe()
}

效果 before.png

用上Gzip

package main

import (
	"net/http"

	"github.com/labstack/echo"
	"github.com/labstack/echo/middleware"
)

func main() {
	e := echo.New()
	e.Use(middleware.Gzip())

	e.Static("/assets", "./assets")

	e.GET("/image", func(c echo.Context) error {
		return c.HTML(http.StatusOK, "<img src='assets/terminal.png'>")
	})

	e.Logger.Fatal(e.Start(":9000"))
}

效果: after.png 图片实际是43K,压缩成了33.9K了。


最后修改于 2019-08-17