I have been testing functions in Node and Go to compare their performance. In almost every test, Go is much faster than Node, except when strings.Fields()
or strings.Split()
is used, then Node is 2-3 times as fast.
Go (2.14s):
start := time.Now()
var newWords []string
str := "asd asjhfa lsjdhalsdjhfa dhfald hfaljdh faldhfasjdhfalsdh asd alsdh alksdh alksdh alksd alkjsd fadlkj dalkjdh asdhfef afa d6a 5a85dfa s5da5d ad a6sd58ad5a8sd5f 8as5f as5 a8s5 8as6d5 8asd65f8as6d58 a5sd 8a5ds8f7 a6s5d"
for j := 0; j < 1000000; j++ {
words := strings.Split(str, " ")
wordsLen := len(words)
newWords = nil
for i := 0; i < wordsLen; i++ {
if words[i][:1] != "s" {
newWords = append(newWords, words[i])
}
}
}
dur := time.Since(start)
fmt.Println(newWords)
fmt.Println(dur)
Node (847ms):
let start = new Date()
let newWords = []
let str = "asd asjhfa lsjdhalsdjhfa dhfald hfaljdh faldhfasjdhfalsdh asd alsdh alksdh alksdh alksd alkjsd fadlkj dalkjdh asdhfef afa d6a 5a85dfa s5da5d ad a6sd58ad5a8sd5f 8as5f as5 a8s5 8as6d5 8asd65f8as6d58 a5sd 8a5ds8f7 a6s5d"
for (let j = 0; j < 1000000; j++) {
let words = str.split(' ')
let wordsLen = words.length
newWords = []
for (let i = wordsLen - 1; i >= 0; i--) {
if (words[i].substr(0, 1) !== 's') {
newWords.push(words[i])
}
}
}
console.log((new Date() - start) + 'ms')