Вы можете заменить 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))))
Тогда всякий раз, когда вы загружаете файл с объявлением 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
clojure.tools.namespace может также иметь некоторые полезные функции для этого.