ref: be4ca217466d86acb47d935798e3bc824206c74d
parent: be96aacb116d7f585f368ee056a2e2282e68970b
author: bep <bjorn.erik.pedersen@gmail.com>
date: Sun May 3 18:42:56 EDT 2015
absurlreplacer: remove superfluous code ``` benchmark old ns/op new ns/op delta BenchmarkAbsURL 18381 17946 -2.37% BenchmarkAbsURLSrcset 19531 19236 -1.51% BenchmarkXMLAbsURLSrcset 19316 19046 -1.40% BenchmarkXMLAbsURL 9818 9561 -2.62% benchmark old allocs new allocs delta BenchmarkAbsURL 24 24 +0.00% BenchmarkAbsURLSrcset 29 29 +0.00% BenchmarkXMLAbsURLSrcset 27 27 +0.00% BenchmarkXMLAbsURL 12 12 +0.00% benchmark old bytes new bytes delta BenchmarkAbsURL 3139 3139 +0.00% BenchmarkAbsURLSrcset 2354 2374 +0.85% BenchmarkXMLAbsURLSrcset 2584 2574 -0.39% BenchmarkXMLAbsURL 1864 1871 +0.38% ``` See #1059
--- a/transform/absurlreplacer.go
+++ b/transform/absurlreplacer.go
@@ -17,11 +17,6 @@
matchStateFull
)
-const (
- matchPrefixSrc int = iota
- matchPrefixHref
-)
-
type contentlexer struct {content []byte
@@ -47,12 +42,12 @@
}
var prefixes = []*prefix{- &prefix{r: []rune{'s', 'r', 'c', '='}, f: checkCandidateSrc},+ &prefix{r: []rune{'s', 'r', 'c', '='}, f: checkCandidateBase},+ &prefix{r: []rune{'h', 'r', 'e', 'f', '='}, f: checkCandidateBase}, &prefix{r: []rune{'s', 'r', 'c', 's', 'e', 't', '='}, f: checkCandidateSrcset},- &prefix{r: []rune{'h', 'r', 'e', 'f', '='}, f: checkCandidateHref}}+}
type absURLMatcher struct {- prefix int
match []byte
quote []byte
replacementURL []byte
@@ -128,25 +123,28 @@
l.start = l.pos
}
-func (a absURLMatcher) isSourceType() bool {- return a.prefix == matchPrefixSrc
-}
-
-func checkCandidateSrc(l *contentlexer) {+func checkCandidateBase(l *contentlexer) { for _, m := range l.matchers {- if !m.isSourceType() {+ if !bytes.HasPrefix(l.content[l.pos:], m.match) {continue
}
- l.replaceSimple(m)
- }
-}
-
-func checkCandidateHref(l *contentlexer) {- for _, m := range l.matchers {- if m.isSourceType() {- continue
+ // check for schemaless URLs
+ posAfter := l.pos + len(m.match)
+ if posAfter >= len(l.content) {+ return
}
- l.replaceSimple(m)
+ r, _ := utf8.DecodeRune(l.content[posAfter:])
+ if r == '/' {+ // schemaless: skip
+ return
+ }
+ if l.pos > l.start {+ l.emit()
+ }
+ l.pos += len(m.match)
+ l.w.Write(m.quote)
+ l.w.Write(m.replacementURL)
+ l.start = l.pos
}
}
@@ -153,10 +151,6 @@
func checkCandidateSrcset(l *contentlexer) {// special case, not frequent (me think)
for _, m := range l.matchers {- if m.isSourceType() {- continue
- }
-
if !bytes.HasPrefix(l.content[l.pos:], m.match) {continue
}
@@ -207,29 +201,6 @@
}
}
-func (l *contentlexer) replaceSimple(m absURLMatcher) {- if !bytes.HasPrefix(l.content[l.pos:], m.match) {- return
- }
- // check for schemaless URLs
- posAfter := l.pos + len(m.match)
- if posAfter >= len(l.content) {- return
- }
- r, _ := utf8.DecodeRune(l.content[posAfter:])
- if r == '/' {- // schemaless: skip
- return
- }
- if l.pos > l.start {- l.emit()
- }
- l.pos += len(m.match)
- l.w.Write(m.quote)
- l.w.Write(m.replacementURL)
- l.start = l.pos
-}
-
func (l *contentlexer) replace() {contentLength := len(l.content)
var r rune
@@ -308,15 +279,15 @@
return &absURLReplacer{ htmlMatchers: []absURLMatcher{- {matchPrefixSrc, dqHTMLMatch, dqHTML, base},- {matchPrefixSrc, sqHTMLMatch, sqHTML, base},- {matchPrefixHref, dqHTMLMatch, dqHTML, base},- {matchPrefixHref, sqHTMLMatch, sqHTML, base}},+ {dqHTMLMatch, dqHTML, base},+ {sqHTMLMatch, sqHTML, base},+ {dqHTMLMatch, dqHTML, base},+ {sqHTMLMatch, sqHTML, base}}, xmlMatchers: []absURLMatcher{- {matchPrefixSrc, dqXMLMatch, dqXML, base},- {matchPrefixSrc, sqXMLMatch, sqXML, base},- {matchPrefixHref, dqXMLMatch, dqXML, base},- {matchPrefixHref, sqXMLMatch, sqXML, base},+ {dqXMLMatch, dqXML, base},+ {sqXMLMatch, sqXML, base},+ {dqXMLMatch, dqXML, base},+ {sqXMLMatch, sqXML, base},}}
}
--
⑨