我想做一些关于clojure文件加载速度的时间.有没有办法挂钩加载器来获取这些信息?
我想获得这样的信息:
ie. A depends on B depends on C
A -> starting to load at T(a0)
B -> starting to load at T(b0)
C -> starting to load at T(c0)
C -> loaded at T(c1), time taken 50ms
B -> loaded at T(b1), time taken 100ms
A -> loaded at T(a1), time taken 200ms
Run Code Online (Sandbox Code Playgroud)
你可以取代clojure.core/load-lib(或像类似的功能load-one或load)与记录了一个包装功能部件/次,每调用:
(alter-var-root
#'clojure.core/load-lib
(fn [f]
(fn [prefix lib & options]
(println lib "loading...")
(let [start (System/nanoTime)
result (apply f prefix lib options)
elapsed (double (/ (- (System/nanoTime) start) 1000000))]
(println lib "loaded in" elapsed "ms")
result))))
Run Code Online (Sandbox Code Playgroud)
然后,无论何时加载带ns声明的文件,或使用require/ use等,您都会看到如下输出:
(require 'clojure.spec.test.alpha)
clojure.spec.test.alpha loading...
clojure.pprint loading...
clojure.pprint loaded in 0.159361 ms
clojure.spec.alpha loading...
clojure.spec.alpha loaded in 0.108056 ms
clojure.spec.gen.alpha loading...
clojure.spec.gen.alpha loaded in 0.116731 ms
clojure.string loading...
clojure.string loaded in 0.241387 ms
clojure.spec.test.alpha loaded in 103.37399 ms
=> nil
Run Code Online (Sandbox Code Playgroud)
clojure.tools.namespace也可能有一些有用的功能.