}
 }
 
-// TotalWords returns an int of the total number of words in a given content.
+// TotalWords counts instance of one or more consecutive white space
+// characters, as defined by unicode.IsSpace, in s.
+// This is a cheaper way of word counting than the obvious len(strings.Fields(s)).
 func TotalWords(s string) int {
+       n := 0
+       inWord := false
+       for _, r := range s {
+               wasInWord := inWord
+               inWord = !unicode.IsSpace(r)
+               if inWord && !wasInWord {
+                       n++
+               }
+       }
+       return n
+}
+
+// Old implementation only kept for benchmark comparison.
+// TODO(bep) remove
+func totalWordsOld(s string) int {
        return len(strings.Fields(s))
 }
 
 
        }
 }
 
+var totalWordsBenchmarkString = strings.Repeat("Hugo Rocks ", 200)
+
 func TestTotalWords(t *testing.T) {
-       testString := "Two, Words!"
-       actualWordCount := TotalWords(testString)
 
-       if actualWordCount != 2 {
-               t.Errorf("Actual word count (%d) for test string (%s) did not match 2.", actualWordCount, testString)
+       for i, this := range []struct {
+               s     string
+               words int
+       }{
+               {"Two, Words!", 2},
+               {"Word", 1},
+               {"", 0},
+               {"One, Two,      Three", 3},
+               {totalWordsBenchmarkString, 400},
+       } {
+               actualWordCount := TotalWords(this.s)
+
+               if actualWordCount != this.words {
+                       t.Errorf("[%d] Actual word count (%d) for test string (%s) did not match %d", i, actualWordCount, this.s, this.words)
+               }
+       }
+}
+
+func BenchmarkTotalWords(b *testing.B) {
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               wordCount := TotalWords(totalWordsBenchmarkString)
+               if wordCount != 400 {
+                       b.Fatal("Wordcount error")
+               }
+       }
+}
+
+func BenchmarkTotalWordsOld(b *testing.B) {
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               wordCount := totalWordsOld(totalWordsBenchmarkString)
+               if wordCount != 400 {
+                       b.Fatal("Wordcount error")
+               }
        }
 }