评论者:thheller
抱歉重新打开。
我在对我的代码进行性能分析时注意到了在性能输出的警告中有关cljs.core/str的相关信息。
Chrome 报错:”未优化。参数值上下文错误”,进一步查看 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 和数组的混合方法看起来有点诡计多端?
我不太确定总体影响,但鉴于 cljs.core/str 在我的配置文件中排名相当高,我认为应该进一步调查。