关键字函数可以加快。当在执行 XHR 时动态创建关键字时,这很重要。
此次补丁现在更接近 Clojure(使用子字符串),并且优化了字符串的传递。
结果
`
(enable-console-print!)
(let [sims 1000000]
(dotimes [_ 2]
(doseq [x ["foo" "foo/bar" [nil "foo"] ["foo" "bar"] [:foo :bar] [nil :foo]]]
(prn "Testing keyword with: " x)
(if (vector? x)
(do (simple-benchmark [[a0 a1] x] (set! js/FOOO (keyword a0 a1)) sims)
(simple-benchmark [[a0 a1] x] (set! js/FOOO (keyword2 a0 a1)) sims))
(do (simple-benchmark [] (set! js/FOOO (keyword x)) sims)
(simple-benchmark [] (set! js/FOOO (keyword2 x)) sims))))))
"测试关键字: " "foo"
[], (set! js/FOOO (keyword x)), 1000000次运行,194毫秒
[], (set! js/FOOO (keyword2 x)), 1000000次运行,71毫秒
"测试关键字: " "foo/bar"
[], (set! js/FOOO (keyword x)), 1000000次运行,260毫秒
[], (set! js/FOOO (keyword2 x)), 1000000次运行,104毫秒
"测试关键字: " [nil "foo"] [[a0 a1] x], (set! js/FOOO (keyword a0 a1)), 1000000次运行,278毫秒
[[a0 a1] x], (set! js/FOOO (keyword2 a0 a1)), 1000000次运行,188毫秒
"测试关键字: " ["foo" "bar"] [[a0 a1] x], (set! js/FOOO (keyword a0 a1)), 1000000次运行,379毫秒
[[a0 a1] x], (set! js/FOOO (keyword2 a0 a1)), 1000000次运行,215毫秒
"测试关键字: " [:foo :bar] [[a0 a1] x], (set! js/FOOO (keyword a0 a1)), 1000000次运行,351毫秒
[[a0 a1] x], (set! js/FOOO (keyword2 a0 a1)), 1000000次运行,207毫秒
"测试关键字: " [nil :foo] [[a0 a1] x], (set! js/FOOO (keyword a0 a1)), 1000000次运行,376毫秒
[[a0 a1] x], (set! js/FOOO (keyword2 a0 a1)), 1000000次运行,37毫秒
`