:pretty-print false
:optimize-constants true
:static-fns true
このページはcljs.js/eval-strやその他の自己ホスト機能を活用したい、または必要とするClojureScriptプロジェクトを作成したいユーザー向けのアドバイスを記載しています。
|
デプロイされたアーティファクトの最終サイズが重要なWebアプリケーションを構築している場合は、このページに記載されている機能を使用しないでください。 |
cljs.jsの名前空間を含むビルドで:optimization :simpleまで活用できます。その他の推奨設定
:pretty-print false
:optimize-constants true
:static-fns true
:optimize-constantsはコードサイズに重要であり、ソースのすべてのリテラルキーワードと記号は単一のルックアップテーブルにコンパイルされます。
:static-fns trueは、特にSafari/JavaScriptCoreをターゲットにしている場合に重要です。(詳細はCLJS-1381を参照してください)。
使いやすさを優先して、デフォルトではcljs.js/empty-stateはcljs.coreの解析キャッシュをcljs.jsの名前空間に直接ダンプします。これにより、最終的なアーティファクトのサイズが2倍になります。コンパイラビルドオプションで:dump-core falseを設定することで、これを無効にできます。
つまり、自分でコアの解析をロードする必要があります。コア解析キャッシュをダンプするのは簡単です。ClojureScriptプロジェクトでClojure REPLをロードし、次のような操作を行います。
(require '[clojure.java.io :as io]
'[cognitect.transit :as transit])
(import [java.io ByteArrayOutputStream])
(def out-path
"../../assets/js/cljs/core.cljs.cache.aot.json")
(def out (ByteArrayOutputStream. 1000000))
(def writer (transit/writer out :json))
(def cache
(read-string
(slurp (io/resource "cljs/core.cljs.cache.aot.edn"))))
(transit/write writer cache)
(spit (io/file out-path) (.toString out))
その後、ClojureScriptソースでこのキャッシュをロードできます。たとえば、次のようなものになる可能性があります。
(def st (cljs.js/empty-state))
;; path to Transit encoded analysis cache
(def cache-url "/assets/js/cljs/core.cljs.cache.aot.json")
(defn main []
(http/get cache-url
(fn [json]
(let [rdr (transit/reader :json)
cache (transit/read rdr json)]
(cljs.js/load-analysis-cache! st 'cljs.core cache)
;; ...
))))
このシンプルな最適化により、約2.7MBの生成されたJavaScriptが削除されます。
執筆者: David Nolen