Clojure 2024年调查问卷中分享您的想法!

欢迎!请参阅关于页面以获取更多有关如何使用此服务的详细信息。

0
ClojureScript

关键字函数可以被加速。这在执行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毫秒
`

4 答案

0

评论者:aralo

改变了以下函数的行为

((juxt namespace name) (keyword "foo/bar/hmm")) => [nil "foo"] (.-fqn (keyword "foo/bar/hmm")) => "foo/bar/hmm" ((juxt namespace name) (keyword2 "foo/bar/hmm")) => ["foo" "bar/hmm"] (.-fqn (keyword2 "foo/bar/hmm")) => "foo/bar/hmm"

Clojure 1.9

((juxt namespace name) (keyword "foo/bar/hmm")) => ["foo" "bar/hmm"]

所以:太好了

0

评论者:mfikes

将 CLJS-2120.patch 添加到补丁接收器(i)

0

评论者:mfikes

CLJS-2120.patch 通过 CI 和 Canary 检查(/)

0
参考: https://clojure.atlassian.net/browse/CLJS-2120(由 aralo 报告)
...