синхронизация загрузки исходных файлов clojure - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу показать, как быстро загружаются файлы 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

1 Ответ

0 голосов
/ 01 сентября 2018

Вы можете заменить 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 может также иметь некоторые полезные функции для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...