diff options
author | Noah Campbell <noahcampbell@gmail.com> | 2013-10-31 22:14:11 -0700 |
---|---|---|
committer | Noah Campbell <noahcampbell@gmail.com> | 2013-11-01 09:59:57 -0700 |
commit | 9af47f07d3f9700e233a98d7e84d85c3a30f9cd5 (patch) | |
tree | 13df4879bf1bf5f895d74029086dfce5a6b60c04 /transform/chain.go | |
parent | f4cb8e1688b1459472413f3c85cb3b6297397020 (diff) |
Improve rendering time
50% speedup. Fix #91
to run the benchmark:
go test -test.run=NONE -bench=".*" -test.benchmem=true ./transform/ > new.txt
to compare the results:
/usr/local/go/misc/benchcmp baseline.txt new.txt
Speedup and memory improvements
benchmark old ns/op new ns/op delta
BenchmarkChain 101219 50453 -50.15%
BenchmarkTransform 51625 45531 -11.80%
benchmark old allocs new allocs delta
BenchmarkChain 222 103 -53.60%
BenchmarkTransform 135 106 -21.48%
benchmark old bytes new bytes delta
BenchmarkChain 23919 10998 -54.02%
BenchmarkTransform 11858 10665 -10.06%
Diffstat (limited to 'transform/chain.go')
-rw-r--r-- | transform/chain.go | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/transform/chain.go b/transform/chain.go index 1d50e8f2f..a4929b70d 100644 --- a/transform/chain.go +++ b/transform/chain.go @@ -1,29 +1,25 @@ package transform import ( - "bytes" + htmltran "code.google.com/p/go-html-transform/html/transform" "io" ) -type chain struct { - transformers []Transformer -} +type chain []*htmltran.Transform -func NewChain(trs ...Transformer) Transformer { - return &chain{transformers: trs} +func NewChain(trs ...*htmltran.Transform) chain { + return trs } func (c *chain) Apply(w io.Writer, r io.Reader) (err error) { - in := r - for _, tr := range c.transformers { - out := new(bytes.Buffer) - err = tr.Apply(out, in) - if err != nil { - return - } - in = bytes.NewBuffer(out.Bytes()) + + var tr *htmltran.Transformer + + if tr, err = htmltran.NewFromReader(r); err != nil { + return } - _, err = io.Copy(w, in) - return + tr.ApplyAll(*c...) + + return tr.Render(w) } |