Improve abs url replacement speed
authorbep <bjorn.erik.pedersen@gmail.com>
Mon, 16 Feb 2015 09:48:15 +0000 (10:48 +0100)
committerspf13 <steve.francia@gmail.com>
Mon, 16 Feb 2015 13:24:42 +0000 (08:24 -0500)
commitf1fec88c308631ab9618b9a2b6dba9c714b087c1
tree1cdae7bc240c695f520bda4991810a80405498d6
parent27c03a6dd0bd003c77cdd4ded19ca8c3033e6476
Improve abs url replacement speed

This commit replaces the multuple `bytes.Containts` and `bytes.Replace` with a custom replacer that does one pass through the document and exploits the fact that there are two common prefixes we search for, `src=` and `href=`.

This is both faster and consumes less memory. There may be even better algos to use here, but we must leave some room for improvements for future versions.

This should also make it possible to solve #816.

```
benchmark              old ns/op     new ns/op     delta
BenchmarkAbsUrl        25795         22597         -12.40%
BenchmarkXmlAbsUrl     17187         11166         -35.03%

benchmark              old allocs     new allocs     delta
BenchmarkAbsUrl        60             33             -45.00%
BenchmarkXmlAbsUrl     30             16             -46.67%

benchmark              old bytes     new bytes     delta
BenchmarkAbsUrl        5844          4167          -28.70%
BenchmarkXmlAbsUrl     3754          2069          -44.89%
```

Fixes #894
.gitignore
transform/absurl.go
transform/absurlreplacer.go [new file with mode: 0644]
transform/chain_test.go