相关疑难解决方法(0)

NodeJs比Clojure更快吗?

我刚开始学习Clojure.我注意到的第一件事就是没有循环.没关系,我可以重复一遍.那么让我们来看看这个函数(来自Practical Clojure):

(defn add-up
  "Adds up numbers from 1 to n"
  ([n] (add-up n 0 0))
  ([n i sum] 
    (if (< n i)
      sum
      (recur n (+ 1 i) (+ i sum)))))
Run Code Online (Sandbox Code Playgroud)

要在Javascript中实现相同的功能,我们使用如下循环:

function addup (n) {
  var sum = 0;
  for(var i = n; i > 0; i--) {
    sum += i;
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

定时时,结果如下:

input size: 10,000,000
clojure: 818 ms
nodejs: 160 ms

input size: 55,000,000
clojure: 4051 ms
nodejs: 754 ms

input size: 100,000,000
clojure: …
Run Code Online (Sandbox Code Playgroud)

javascript performance clojure node.js

31
推荐指数
4
解决办法
2万
查看次数

Clojure表现:REPL与uberjar

我想做一些实时图形渲染,并尝试每帧每像素进行多次计算.然后我很快发现这很慢并且从最基础开始:我可以多快地遍历所有像素?

我发现dotimes的速度相当快,但是当我在REPL中执行此操作时,速度非常慢:

user=> (dotimes [_ 10] (time (dotimes [_ 1e7] (+ 1 1))))
"Elapsed time: 409.177477 msecs"
"Elapsed time: 417.755502 msecs"
"Elapsed time: 418.939182 msecs"
"Elapsed time: 420.131575 msecs"
"Elapsed time: 419.83529 msecs"
"Elapsed time: 417.612003 msecs"
"Elapsed time: 420.749229 msecs"
"Elapsed time: 418.918554 msecs"
"Elapsed time: 414.403957 msecs"
"Elapsed time: 417.729624 msecs"
nil
user=>
Run Code Online (Sandbox Code Playgroud)

然后我把它放到Leiningen项目中.当我做"lein run"时,它同样缓慢.但是当我创建uberjar并使用java命令运行它时,速度要快得多:

% java -jar target/looping-0.1.0-SNAPSHOT-standalone.jar 
"Elapsed time: 122.006758 msecs"
"Elapsed time: 3.667653 msecs"
"Elapsed time: 3.60515 msecs"
"Elapsed time: 4.008436 msecs"
"Elapsed time: 3.961558 …
Run Code Online (Sandbox Code Playgroud)

performance clojure

9
推荐指数
1
解决办法
966
查看次数

标签 统计

clojure ×2

performance ×2

javascript ×1

node.js ×1