From 455df1075205d5fcda184410575e535e605c8f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 25 Feb 2016 21:31:22 +0100 Subject: [PATCH] Optimize replaceShortcodeTokens We can of course skip reading the entire byte slice again and again. This was a slip in the original implementation; functionally the same, but is slightly faster, esp. for larger data sets with many shortcodes: ``` benchmark old ns/op new ns/op delta BenchmarkReplaceShortcodeTokens-4 15505 14753 -4.85% benchmark old allocs new allocs delta BenchmarkReplaceShortcodeTokens-4 1 1 +0.00% benchmark old bytes new bytes delta BenchmarkReplaceShortcodeTokens-4 3072 3072 +0.00% ``` --- hugolib/shortcode.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go index 3ceef54ef..a1e0cc35d 100644 --- a/hugolib/shortcode.go +++ b/hugolib/shortcode.go @@ -506,7 +506,7 @@ func replaceShortcodeTokens(source []byte, prefix string, replacements map[strin // This and other cool slice tricks: https://github.com/golang/go/wiki/SliceTricks source = append(source[:j], append(newVal, source[end:]...)...) - + start = j k = bytes.Index(source[start:], pre) }