- Notifications
You must be signed in to change notification settings - Fork 50
Description
I can't seem to bring the code size down with a barely empty project through dead-code elimination alone, even when following the installation instructions to the letter.
The template used was reagent-figwheel with only devtools and reagent as dependencies. I've fiddled with the goog.DEBUG flag, and then removed devtools from the :require and :dependencies vectors.
| Type | Size |
|---|---|
:dependencies + :require + goog.DEBUG true | 1.9 MB |
:dependencies + :require + goog.DEBUG false | 1.5 MB |
:dependencies + :require + no mention at all | 1.6 MB |
:dependencies + no :require + no mention at all | 763 KB |
no :dependencies + no :require + no mention at all | 763 KB |
The first two rows followed the instructions from the release notes. There's a single mention of (devtools/install!) within a (when ^boolean js/goog.DEBUG ...) block. The other three had this line removed manually.
Google Closure's shaved 400kb of the build, but that's still a 800kb increase for a :require without a single mention of devtools! Is this the best I can expect from dead code elimination?
Here's the code used for the builds (e.g. lein new reagent-figwheel +devtools):
;################## ;### profile.cljs (defproject devtools-dce "0.1.0-SNAPSHOT" :dependencies [[org.clojure/clojure "1.8.0"] [org.clojure/clojurescript "1.9.229"] [reagent "0.6.0"] [binaryage/devtools "0.8.2"]] [...] :cljsbuild {:builds [{:id "min" :source-paths ["src/cljs"] :compiler {:main devtools-dce.core :optimizations :advanced :output-to "resources/public/js/compiled/app.js" :output-dir "resources/public/js/compiled/min" :closure-defines {goog.DEBUG false} :pseudo-names true ;; added to exacerbate size difference :pretty-print false}} ]}) ;############## ;## core.cljs (ns devtools-dce.core (:require [reagent.core :as reagent] [devtools.core :as devtools] )) [...] (defn dev-setup [] ;; inlining into `main` made no difference (when ^boolean js/goog.DEBUG (enable-console-print!) (println "dev mode") (devtools/install!) )) (defn ^:export main [] (dev-setup) (reload))