mirror of
https://github.com/mdgriffith/elm-optimize-level-2.git
synced 2024-11-29 12:46:32 +03:00
rename command to elm-optimize-more
This commit is contained in:
parent
928be54743
commit
6464535d18
20
README.md
20
README.md
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
**Note, Experimental** - _This project is just starting. While we currently believe every adjustment to the resulting javascript should be safe and make things explicitly faster, it's hard to be 100% certain until we have a large number of projects using it successfully. So, beware!_
|
**Note, Experimental** - _This project is just starting. While we currently believe every adjustment to the resulting javascript should be safe and make things explicitly faster, it's hard to be 100% certain until we have a large number of projects using it successfully. So, beware!_
|
||||||
|
|
||||||
_And let us know how it goes by leaving [a comment in this issue](https://github.com/mdgriffith/elm-optimize/issues/15)._ :smiley:
|
_And let us know how it goes by leaving [a comment in this issue](https://github.com/mdgriffith/elm-optimize-more/issues/15)._ :smiley:
|
||||||
|
|
||||||
Elm is fast.
|
Elm is fast.
|
||||||
|
|
||||||
@ -25,13 +25,13 @@ There are two parts to this.
|
|||||||
## Installation and Usage
|
## Installation and Usage
|
||||||
|
|
||||||
```
|
```
|
||||||
npm install -g elm-optimize
|
npm install -g elm-optimize-more
|
||||||
```
|
```
|
||||||
|
|
||||||
Then you can use `elm-optimize` just as you would `elm-make --optimize`.
|
Then you can use `elm-optimize-more` just as you would `elm-make --optimize`.
|
||||||
|
|
||||||
```
|
```
|
||||||
elm-optimize Main.elm
|
elm-optimize-more Main.elm
|
||||||
```
|
```
|
||||||
|
|
||||||
will generate an `elm.js` file.
|
will generate an `elm.js` file.
|
||||||
@ -39,12 +39,12 @@ will generate an `elm.js` file.
|
|||||||
The only configurable option is what to name the generated js file.
|
The only configurable option is what to name the generated js file.
|
||||||
|
|
||||||
```
|
```
|
||||||
elm-optimize Main.elm --output app.js
|
elm-optimize-more Main.elm --output app.js
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note** — elm-optimize only generates a js file, it doesn't support generating HTML.
|
**Note** — elm-optimize-more only generates a js file, it doesn't support generating HTML.
|
||||||
|
|
||||||
**Another Note** — Before deploying your app, you should also minify it and gzip it. `elm-optimize` does not do that for you. [Check out this doc for a recommended setup.](notes/minification.md)
|
**Another Note** — Before deploying your app, you should also minify it and gzip it. `elm-optimize-more` does not do that for you. [Check out this doc for a recommended setup.](notes/minification.md)
|
||||||
|
|
||||||
## What's actually happening?
|
## What's actually happening?
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ A few are listed there as either incomplete or not attempted. That's future work
|
|||||||
|
|
||||||
## Benchmarks
|
## Benchmarks
|
||||||
|
|
||||||
**Note** — _These results are really exciting! However, it's not totally obvious that your project will see similar gains. Performance is a tricky beast! If you do see significant speedups in your project, [leave a comment here on this issue](https://github.com/mdgriffith/elm-optimize/issues/15), we love to see realworld cases._
|
**Note** — _These results are really exciting! However, it's not totally obvious that your project will see similar gains. Performance is a tricky beast! If you do see significant speedups in your project, [leave a comment here on this issue](https://github.com/mdgriffith/elm-optimize-more/issues/15), we love to see realworld cases._
|
||||||
|
|
||||||
In an effort to quantify these transformations, we've put together a number of benchmarks, including some from exisiting Elm packages such as `dillonkearns/elm-markdown`, `w0rm/elm-obj-file`, and `mdgriffith/elm-ui`.
|
In an effort to quantify these transformations, we've put together a number of benchmarks, including some from exisiting Elm packages such as `dillonkearns/elm-markdown`, `w0rm/elm-obj-file`, and `mdgriffith/elm-ui`.
|
||||||
|
|
||||||
@ -108,11 +108,11 @@ _For this project, contributions always start with communication before code!_
|
|||||||
|
|
||||||
That being said, there are a few areas that might be opportunities for contribution.
|
That being said, there are a few areas that might be opportunities for contribution.
|
||||||
|
|
||||||
1. Try `elm-optimize` on any current Elm project you have!
|
1. Try `elm-optimize-more` on any current Elm project you have!
|
||||||
|
|
||||||
We'd love to hear your results whether they be success, no effect, or caused a regression.
|
We'd love to hear your results whether they be success, no effect, or caused a regression.
|
||||||
|
|
||||||
If your project saw an explicit improvement or performance regression, [leave a comment on this issue](https://github.com/mdgriffith/elm-optimize/issues/15).
|
If your project saw an explicit improvement or performance regression, [leave a comment on this issue](https://github.com/mdgriffith/elm-optimize-more/issues/15).
|
||||||
|
|
||||||
For more serious issues, feel free to file a separate issue.
|
For more serious issues, feel free to file a separate issue.
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
We're basically following the same protocol as [described on the Elm Guide.](https://guide.elm-lang.org/optimization/asset_size.html) We use Terser, which is just an actively maintained fork of Uglify.
|
We're basically following the same protocol as [described on the Elm Guide.](https://guide.elm-lang.org/optimization/asset_size.html) We use Terser, which is just an actively maintained fork of Uglify.
|
||||||
|
|
||||||
After installing `elm-optimize`,
|
After installing `elm-optimize-more`,
|
||||||
|
|
||||||
Install a minifier like [`Terser`](https://www.npmjs.com/package/terser).
|
Install a minifier like [`Terser`](https://www.npmjs.com/package/terser).
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ npm install -g terser
|
|||||||
Then, you'll want to run these commands to minify and gzip your code before deploying.
|
Then, you'll want to run these commands to minify and gzip your code before deploying.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
elm-optimize Main.elm --output=app.js
|
elm-optimize-more Main.elm --output=app.js
|
||||||
terser app.js --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' | terser --mangle --output=app.min.js
|
terser app.js --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' | terser --mangle --output=app.min.js
|
||||||
|
|
||||||
gzip --keep --force app.min.js
|
gzip --keep --force app.min.js
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Overview of Transformations
|
# Overview of Transformations
|
||||||
|
|
||||||
This is an overview of the transformations for `elm-optimize`.
|
This is an overview of the transformations for `elm-optimize-more`.
|
||||||
|
|
||||||
Not all of them made the cut, but seeing that a transformation is not as effective as initially thought is really good information.
|
Not all of them made the cut, but seeing that a transformation is not as effective as initially thought is really good information.
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ MyFunction_fn(one two)
|
|||||||
|
|
||||||
## Results Summary
|
## Results Summary
|
||||||
|
|
||||||
- Included in `elm-optimize` tool\*\*
|
- Included in `elm-optimize-more` tool\*\*
|
||||||
- Potentially large positive effect on speed
|
- Potentially large positive effect on speed
|
||||||
- Likley small but positive effect on asset size
|
- Likley small but positive effect on asset size
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ There may be a nice trade off here of using `InlineMode.UsingConsFunc`, but only
|
|||||||
|
|
||||||
## Results Summary
|
## Results Summary
|
||||||
|
|
||||||
- Not included in the elm-optimize tool because it was hard to find a benchmark that reported numbers to justify it.
|
- Not included in the elm-optimize-more tool because it was hard to find a benchmark that reported numbers to justify it.
|
||||||
- Though maybe we just need to be better at benchmarking it
|
- Though maybe we just need to be better at benchmarking it
|
||||||
|
|
||||||
# Object Update
|
# Object Update
|
||||||
@ -258,7 +258,7 @@ Or we can use the spread operator inline:
|
|||||||
|
|
||||||
## Result Summary
|
## Result Summary
|
||||||
|
|
||||||
- Not included in elm-optimize tool
|
- Not included in elm-optimize-more tool
|
||||||
- Again, all of these tricks rely on either the spread operator or `Object.assign`, both of which are not supported in IE.
|
- Again, all of these tricks rely on either the spread operator or `Object.assign`, both of which are not supported in IE.
|
||||||
- The most promising approach was inlining the call completely with `{...old, field: newValue}`.
|
- The most promising approach was inlining the call completely with `{...old, field: newValue}`.
|
||||||
- Gave a `501%` boost in chrome!
|
- Gave a `501%` boost in chrome!
|
||||||
@ -302,11 +302,11 @@ If Elm's `==` is applied to any primitive such as:
|
|||||||
|
|
||||||
Then we can inline the definition directly as JS strict equality: `===`.
|
Then we can inline the definition directly as JS strict equality: `===`.
|
||||||
|
|
||||||
Right now `elm-optimize` will infer if something is a primitive if a literal is used.
|
Right now `elm-optimize-more` will infer if something is a primitive if a literal is used.
|
||||||
|
|
||||||
## Results Summary
|
## Results Summary
|
||||||
|
|
||||||
- Included in `elm-optimize` tool.
|
- Included in `elm-optimize-more` tool.
|
||||||
- Looks to have the some impact on code that does a lot of equality comparisons, like parsing.
|
- Looks to have the some impact on code that does a lot of equality comparisons, like parsing.
|
||||||
|
|
||||||
The `_Utils_eq` function is very likely deoptimized because it can take _any_ two values and either do a reference check, or do structural equality, which we also know takes a while.
|
The `_Utils_eq` function is very likely deoptimized because it can take _any_ two values and either do a reference check, or do structural equality, which we also know takes a while.
|
||||||
@ -355,7 +355,7 @@ This is still a benefit because the minified code is what ultimately needs to be
|
|||||||
|
|
||||||
## Results Summary
|
## Results Summary
|
||||||
|
|
||||||
- Not included in the `elm-optimize` tool
|
- Not included in the `elm-optimize-more` tool
|
||||||
- Comes with the caveat that the [code will not work on IE](https://caniuse.com/#feat=arrow-functions)
|
- Comes with the caveat that the [code will not work on IE](https://caniuse.com/#feat=arrow-functions)
|
||||||
|
|
||||||
We weren't able to pin down a benchmark where this reported a benefit in the numbers, though likely to explore this we need (1) A larger codebase, and (2)
|
We weren't able to pin down a benchmark where this reported a benefit in the numbers, though likely to explore this we need (1) A larger codebase, and (2)
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"elm-optimize": "./dist/index.js"
|
"elm-optimize-more": "./dist/index.js"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"prepublish": "tsc -p tsconfig.json",
|
"prepublish": "tsc -p tsconfig.json",
|
||||||
|
Loading…
Reference in New Issue
Block a user