I don't know what the official position is, but I use :advanced on nodejs a
bunch.

Take care,
Moe

On Mon, Jan 25, 2016 at 4:36 AM, Roc King <ownwater...@gmail.com> wrote:

> Hi all!
>
> It seems unclear from the quick start wiki page[1]. But in Clojurescript
> Unraveled[2], it says that :optimizations :none is *mandatory* for nodejs.
>
> Can we relay on advanced optimizations when targeting nodejs(currently or
> in the future)?
>
> Thanks in advance.
>
>
> Some reasons(other than runtime performance) to use advanced optimizations:
>
> . fast startup time and small memory footprint
> . easy to deployment
> . hard to reverse engineering
>
> without them, clojurescript + nodejs are not so attractive than clojure +
> jvm.
>
>
> The hello world program from the quick start wiki page will take half a
> second without optimizations:
>
> $ env time -f '%E %M' node none.js >/dev/null
> 0:00.50 232320
>
> It is 4x slower and uses 4x memory than the empty nodejs program:
>
> $ env time -f '%E %M' node </dev/null
> 0:00.13 59264
>
> and is worse than clojure-jvm plus some tweaks for options:
>
> $ env time -f '%E %M' java -jamvm -XX:+TieredCompilation
> -Xbootclasspath/a:$HOME/.m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar
> clojure.main - <<< '(println "hello clojure-jvm")' >/dev/null
> 0:00.50 175024
>
> And how could we deploy those things?
>
> $ du -shc none.js out
> 4.0K    main.js
> 2.7M    out
> 2.8M    total
> $ find none.js out -type f | wc -l
> 26
>
> Without dead code removal, it will be even worse for non-trival programs.
>
>
> :optimizations :simple will solve the deployment problem and will reduce
> startup time and memory footprint. But it is still 2x slower and uses 3x
> memory than the empty nodejs program:
>
> $ env time -f '%E %M' node simple.js >/dev/null
> 0:00.30 174912
> $ du -sh simple.js
> 708K    simple.js
>
> And there are some bugs(timeout in core.async, in particular) under simple
> optimizations. Again, there is no dead code removal in simple
> optimizations. The Library Problem[3] still exists in clojurescript +
> nodejs.
>
>
> Under advanced optimizations, it will use 1.2x time and memory:
>
> $ env time -f '%E %M' node advanced.js >/dev/null
> 0:00.16 73552
> $ du -sh advanced.js
> 84K     advanced.js
>
> With the help of dead code removal, we paid for what we actually use.
>
>
> The hello world program and the build options are the same as in the wiki
> page[1]:
>
> (ns hello-world.core
>   (:require [cljs.nodejs :as nodejs]))
> (nodejs/enable-util-print!)
> (defn -main [& args]
>   (println "Hello world!"))
> (set! *main-cli-fn* -main)
>
> (cljs.build.api/build "src"
>   {:main 'hello-world.core
>    :output-to "none.js"
>    :target :nodejs})
>
> simple.js and advanced.js are built using the following options:
>
> (cljs.build.api/build "src"
>   {:main 'hello-world.core
>    :output-to "simple.js"
>    :optimizations :simple
>    :target :nodejs})
>
> (cljs.build.api/build "src"
>   {:main 'hello-world.core
>    :output-to "advanced.js"
>    :optimizations :advanced
>    :optimize-constants true
>    :static-fns true
>    :target :nodejs})
>
> version of nodejs and java are 0.12 and 1.7 respectively:
>
> $ node -v
> v0.12.9
>
> $ java -version
> java version "1.7.0_55"
> OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1~0.12.04.2)
> OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
>
>
> [1]:
> https://github.com/clojure/clojurescript/wiki/Quick-Start/7f2360af24953303b282771870085620a83f0711#user-content-running-clojurescript-on-nodejs
>
> [2]:
> https://web.archive.org/web/20150716040442/http://funcool.github.io/clojurescript-unraveled#none
>
> [3]:
> https://github.com/clojure/clojurescript/wiki/Rationale#user-content-the-library-problem
>
> --
> Note that posts from new members are moderated - please be patient with
> your first post.
> ---
> You received this message because you are subscribed to the Google Groups
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojurescript+unsubscr...@googlegroups.com.
> To post to this group, send email to clojurescript@googlegroups.com.
> Visit this group at https://groups.google.com/group/clojurescript.
>

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojurescript+unsubscr...@googlegroups.com.
To post to this group, send email to clojurescript@googlegroups.com.
Visit this group at https://groups.google.com/group/clojurescript.

Reply via email to