10 comments

[ 907 ms ] story [ 780 ms ] thread
It would be cool if this could be used with standard NPM modules in an easy way.
Didn't know it was used so much out of Google, that's a lot of downloads and that just for NPM, I would guess maven and direct downloads are even bigger? not counting clojurescript and scalajs which bundle closure in their compiler.
The closure compiler is one of these engineering secrets that I wish more people knew about. The advanced compilation with dead code elimination [0] is insane. It needs a bit of extra work on top to fully utilise but you get a payoff that you can't achieve with other minifiers.

[0]: https://developers.google.com/closure/compiler/docs/api-tuto...

Clojurescript is what introduced me to the Closure compiler. It killed three birds with one stone: it unbloated the client build, saved me from writing validation logic twice in two different languages, and I can stop writing JavaScript.
There also an amazing tool[0] that processes TypeScript and adds JSDoc annotations for closure compiler, so it can optimize way much better[1]

[0]: https://github.com/angular/tsickle

[1]: https://github.com/google/closure-compiler/wiki/Type-Based-P...

How much of a speedup do you get by adding JSDoc type annotations?
It depends on the code base. When I've migrated from js code base with 100% gcc type coverage to TypeScript, gcc(without tsickle) in advanced mode stopped rewriting many methods into simple functions, didn't minified many symbols, with 100% type coverage gcc minified all symbols.

When I've tried synthetic UI benchmarks, code with 100% type coverage on desktop machines had the same performance, on old mobile phones it was 0-10% faster(depends on the use case).

Minified code size with 100% type coverage were slightly smaller on small projects, but with the API for building UI Components that I've used, minified code with 100% type coverage should be significantly smaller on a large project.