评论由:thheller发表
对不起再次重新打开。
我在对我的代码进行一些性能分析时,注意到性能分析输出中有关cljs.core/str的警告。
Chromes 抱怨: "未优化。参数值上下文值不佳",进一步查看goog.string.buildString实现
goog.string.buildString = function(var_args) { return Array.prototype.join.call(arguments, ''); };
由于我们从不调用它超过一个参数,这可能不是最好的实现选择。
也许可以跳过调用并内联化,如
`
(defn str
"如果无参数,则返回空字符串。如果有一个参数x,则返回
x.toString(). (str nil) 返回空字符串。如果有超过
一个参数,则返回参数的str值连接起来。"
([] "")
([x] (if (nil? x)
""
(.join #js [x] "")))
([x & ys]
(loop [sb (StringBuffer. (str x)) more ys]
(if more
(recur (. sb (append (str (first more)))) (next more))
(.toString sb)))))
`
我没有跟进这个问题,但为什么我们不使用 .toString? buildString/array方法看起来有点不规范?
我不太确定整体影响,但鉴于cljs.core/str在我的配置文件中出现的频率很高,我认为这个问题应该进一步调查。