compress

package module
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 27, 2019 License: Apache-2.0 Imports: 8 Imported by: 2

README

elton-compress

Build Status

Compress middleware for elton, it support gzip and br compress function by default.

  • BrCompressor brotli compress is better for http, most modern browser support it.
  • SnappyCompressor snappy compress is fast, but not aim for maximum compression. It's useful for Intranet.
package main

import (
	"bytes"

	"github.com/vicanso/elton"
	compress "github.com/vicanso/elton-compress"
)

func main() {
	d := elton.New()

	d.Use(compress.NewDefault())

	d.GET("/", func(c *elton.Context) (err error) {
		b := new(bytes.Buffer)
		for i := 0; i < 1000; i++ {
			b.WriteString("hello world\n")
		}
		c.SetHeader(elton.HeaderContentType, "text/plain; charset=utf-8")
		c.BodyBuffer = b
		return
	})

	d.ListenAndServe(":7001")
}

brotli

I use Pure Go Brotli instead of cbrotli, it is a little bit slow.

Test for encode html(113K) to br:

BenchmarkCBrotli-8    	     200	   9555795 ns/op
BenchmarkGoBrotli-8   	     100	  10703582 ns/op

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AcceptEncoding

func AcceptEncoding(c *elton.Context, encoding string) (bool, string)

AcceptEncoding check request accept encoding

func New

func New(config Config) elton.Handler

New create a new compress middleware

func NewDefault

func NewDefault() elton.Handler

NewDefault create a default compress middleware, support gzip

func NewWithDefaultCompressor

func NewWithDefaultCompressor(config Config) elton.Handler

NewWithDefaultCompressor create compress middleware with default compressor

Types

type BrCompressor

type BrCompressor struct{}

BrCompressor brotli compress

func (*BrCompressor) Accept

func (b *BrCompressor) Accept(c *elton.Context) (acceptable bool, encoding string)

Accept check accept econding

func (*BrCompressor) Compress

func (b *BrCompressor) Compress(buf []byte, level int) ([]byte, error)

Compress brotli compress

func (*BrCompressor) Pipe

func (b *BrCompressor) Pipe(c *elton.Context, level int) (err error)

Pipe brotli pipe

type Compressor

type Compressor interface {
	// Accept accept check function
	Accept(c *elton.Context) (acceptable bool, encoding string)
	// Compress compress function
	Compress([]byte, int) ([]byte, error)
	// Pipe pipe function
	Pipe(*elton.Context, int) error
}

Compressor compressor interface

type Config

type Config struct {
	// Level compress level
	Level int
	// MinLength min compress length
	MinLength int
	// Checker check the data is compressable
	Checker *regexp.Regexp
	// Compressors compressor list
	Compressors []Compressor
	// Skipper skipper function
	Skipper elton.Skipper
}

Config compress config

func (*Config) AddCompressor added in v0.1.1

func (conf *Config) AddCompressor(compressor Compressor)

AddCompressor add compressor

type GzipCompressor

type GzipCompressor struct{}

GzipCompressor gzip compress

func (*GzipCompressor) Accept

func (g *GzipCompressor) Accept(c *elton.Context) (acceptable bool, encoding string)

Accept accept gzip encoding

func (*GzipCompressor) Compress

func (g *GzipCompressor) Compress(buf []byte, level int) ([]byte, error)

Compress compress data by gzip

func (*GzipCompressor) Pipe

func (g *GzipCompressor) Pipe(c *elton.Context, level int) (err error)

Pipe compress by pipe

type SnappyCompressor

type SnappyCompressor struct{}

SnappyCompressor snappy compress

func (*SnappyCompressor) Accept

func (s *SnappyCompressor) Accept(c *elton.Context) (acceptable bool, encoding string)

Accept check accept encoding

func (*SnappyCompressor) Compress

func (s *SnappyCompressor) Compress(buf []byte, level int) ([]byte, error)

Compress snappy compress

func (*SnappyCompressor) Pipe

func (s *SnappyCompressor) Pipe(c *elton.Context, level int) (err error)

Pipe snappy pipe

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL