为什么在clojurescript中使用nth会使我的代码增加74026%

Ste*_*lka 7 javascript clojure clojurescript

我一直在比较由clojurescript中的各种调用输出的生成的javascript,感觉就像踩着地雷.有些生成极其可读(甚至是缩小的高级模式)javascript,有些人认为这一个方法调用将需要看起来像clojure中运行的每个可能方法.

nth vs aget就是一个非常好的例子.这两个代码片段都输出数字5,但是一个需要77个字节来完成它而另一个需要57千字节.多达74026%

57 KiloBytes - nth

(ns fooModule)
(let [log js/console.log
    x (array 5)]
    (log (nth x 0)))
Run Code Online (Sandbox Code Playgroud)

77字节 - 年龄

(ns fooModule)
(let [log js/console.log
    x (array 5)]
    (log (aget x 0)))
Run Code Online (Sandbox Code Playgroud)

aget生成的代码非常易读.(手工格式化)

;(function(){
    var a=console.log,
        b=[5];
    a.a ? a.a(b[0]) : a.call( null, b[0] );
})();
Run Code Online (Sandbox Code Playgroud)

在一个要点中生成第n个代码https://gist.github.com/trashhalo/7781298 \

clojurescript 0.0-2014

Art*_*ldt 11

在这种情况下,这是由于死代码消除与ClojureScrip的序列交互.你的例子碰巧恰好使用了一个使用序列的东西,nth而没有别的东西.因此,在第一个例子中,seq库被删除,而在第二个例子中则没有.不要概括这个增长率,只有大约ClojureScript的总量,所以一旦你使用任何包含它的代码,你就会明智地踩到所有的地雷.