summaryrefslogtreecommitdiffstats
path: root/transform/chain.go
diff options
context:
space:
mode:
authorNoah Campbell <noahcampbell@gmail.com>2013-10-31 22:14:11 -0700
committerNoah Campbell <noahcampbell@gmail.com>2013-11-01 09:59:57 -0700
commit9af47f07d3f9700e233a98d7e84d85c3a30f9cd5 (patch)
tree13df4879bf1bf5f895d74029086dfce5a6b60c04 /transform/chain.go
parentf4cb8e1688b1459472413f3c85cb3b6297397020 (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.go28
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)
}