在测试一些 Specter 用例时,发现这是一个热点问题。
对 constantly 常用方法的综述显示,第 1 个参数期的用例是 `constantly` 在野外最常见的使用,因此只展开到两个参数。
性能测试
(use 'criterium.core)
(def f (constantly 1))
(bench (dotimes [_ 1000] (f)))
(bench (dotimes [_ 1000] (f 1)))
(bench (dotimes [_ 1000] (f 1 2)))
;; 结果
;; 参数数 从前 到后
;; 0 611.455589 纳秒 607.800747 纳秒 (预期没有变化)
;; 1 3.098828 微秒 611.116510 纳秒 (~5 倍 Improvement)
;; 2 3.508726 微秒 620.415032 纳秒 (~5 倍 improvement)
*补丁:* 0001-CLJ-2228-Improve-performance-of-constantly.patch
*预审者:* Alex Miller