binaryage / binaryage/cljs-devtools

Is dead code elimination really working?

Đang mở
#37 11 bình luận 0 reaction 0 người được giao Xem trên GitHub
cljs-bug help wanted
Ngôn ngữ chính
Clojure
Star
1.1k
Fork
51
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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](https://github.com/gadfly361/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](https://github.com/binaryage/cljs-devtools/releases/tag/v0.5.3). 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`):
```clojure
;##################
;### 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))
```

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Bắt đầu với cấu hình build trong profile.cljs và namespace cùng điểm vào dev-setup trong core.cljs, sử dụng template reagent-figwheel và các thiết lập advanced-optimization được liệt kê. Tái hiện năm build và so sánh kích thước đầu ra của chúng; hoàn thành có nghĩa là giải thích liệu dependency devtools không được sử dụng có bị loại bỏ hay không, đồng thời ghi lại hoặc sửa kết quả quan sát được.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
clojure
Lĩnh vực
build-system
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.