UglifyJS performance
Marcus Lagergren
marcus.lagergren at oracle.com
Mon Dec 15 14:30:39 UTC 2014
No it’s great! Having the reproducer is all we need! Thanks.
/M
> On 15 Dec 2014, at 15:17, Austin Jackson <themacphage at gmail.com> wrote:
>
> Sorry if I'm not being much help, I hope I can supply as much information as I can.
>
>
> ------------
>
> Austin Jackson
> themacphage at gmail.com <mailto:themacphage at gmail.com>
>
> On Dec 15, 2014, at 8:15 AM, Marcus Lagergren <marcus.lagergren at oracle.com <mailto:marcus.lagergren at oracle.com>> wrote:
>
>> Yeah I’ve seen your bootstrap code. I’m curious about the uglify libraries, but don’t worry. We’ll analyze them.
>>
>> /M
>>
>>> On 15 Dec 2014, at 15:14, Austin Jackson <themacphage at gmail.com <mailto:themacphage at gmail.com>> wrote:
>>>
>>> I honestly don't know. This is my first time using Nashorn, and I don't know what algorithms and phases go on in Uglify itself. Perhaps they use JSON internally to keep track of things. Being that it's meant for a more "native" JavaScript engine I wouldn't doubt it. Me myself? I haven't purposely tried to use any JSON.
>>>
>>>
>>> ------------
>>>
>>> Austin Jackson
>>> themacphage at gmail.com <mailto:themacphage at gmail.com>
>>>
>>> On Dec 15, 2014, at 8:10 AM, Marcus Lagergren <marcus.lagergren at oracle.com <mailto:marcus.lagergren at oracle.com>> wrote:
>>>
>>>> This produces a recording that shows where individual method time is spent (among other things). It can be inspected with the jmc tool in $JAVA_HOME/bin.
>>>> I did multiple runs with the same hot code, and I still have a slowdown. Some things stick out, such as manual calling of accessors, instead of compiling them to method handles ones and for all. We’ll dig further.
>>>>
>>>> Do you have any idea if you do a lot of JSON stuff in there?
>>>>
>>>> /M
>>>>
>>>>> On 15 Dec 2014, at 15:09, Austin Jackson <themacphage at gmail.com <mailto:themacphage at gmail.com>> wrote:
>>>>>
>>>>> Chisel runs timing inside itself via calculating the difference of system time before and after, however it may not be as useful as the JVM arguments you just showed me. :)
>>>>>
>>>>>
>>>>> ------------
>>>>>
>>>>> Austin Jackson
>>>>> themacphage at gmail.com <mailto:themacphage at gmail.com>
>>>>>
>>>>> On Dec 15, 2014, at 7:36 AM, Marcus Lagergren <marcus.lagergren at oracle.com <mailto:marcus.lagergren at oracle.com>> wrote:
>>>>>
>>>>>> Hi Austin!
>>>>>>
>>>>>> Is this particular timing when you are uglifying the jquery test script that you supplied? I do a full Nashorn run, and I indeed see a slowdown that probably shouldn’t be there. There are several sources of overhead and no _huge_ single low hanging fruit, as far as I can tell (damn).
>>>>>>
>>>>>> To figure this out, I did a run to produce a Mission Control recording and inspected it.
>>>>>>
>>>>>> java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=recording.jfr,stackdepth=1024 - -jar chisel.jar compile uglify -i test-files/jquery-2.1.1.js -o output.js
>>>>>>
>>>>>> There is field guard overhead, and there are a few megamorphic fields, but none of this take up more than 15% of the runtime.
>>>>>>
>>>>>> I’ll file this a bug and have someone dive deeper.
>>>>>>
>>>>>> Thanks a lot for the report! Much appreciated.
>>>>>>
>>>>>> /M
>>>>>>
>>>>>>> On 15 Dec 2014, at 04:15, Austin Jackson <themacphage at gmail.com <mailto:themacphage at gmail.com>> wrote:
>>>>>>>
>>>>>>> Hello! I’m Austin and I like Nashorn.
>>>>>>>
>>>>>>> I was prompted by @lagergren <https://twitter.com/lagergren/status/543526837293711360 <https://twitter.com/lagergren/status/543526837293711360>> to share something with you all that might be of use. I love the work that you all have done with Nashorn making it easy to write JavaScript code and utilize standard Java classes — it’s absolutely great!
>>>>>>>
>>>>>>> I, personally, have been using Nashorn to try and run NodeJS modules under it, particularly UglifyJS2.
>>>>>>>
>>>>>>> All the files I mention following this are available in a Github release below of my app I’m hoping to use Nashorn with. There is a executable Jar file with the correct directories and instructions on how to run on the website below. The source code is available here below, also.
>>>>>>>
>>>>>>> My app is currently a test that wraps UglifyJS2 with bindings in net.austin.chisel.wrappers.UglifyWrapper.java. You can ignore the LESS stuff because that runs on Rhino and isn’t my library (it’s here <https://github.com/marceloverdijk/lesscss-java <https://github.com/marceloverdijk/lesscss-java>>).
>>>>>>>
>>>>>>> The important thing is that when I run UglifyJS2 natively under NodeJS (V8), then the compile time is around 1 second more or less (I had no way to time it, that I knew of), but when I run my wrapper, it takes around 47.5 seconds to do the same! However, the resulting copies are verbatim and Nashorn functioned entirely correct, just a big performance problem. @lagergren <https://twitter.com/lagergren/status/544231448900034561 <https://twitter.com/lagergren/status/544231448900034561>> said this might be a warm-up issue.
>>>>>>>
>>>>>>> For clarity, I’m running what I believe to be the newest public release of the JDK/JRE. I’m on OS X Yosemite. When I run java -version I get this:
>>>>>>>
>>>>>>> java version "1.8.0_25"
>>>>>>> Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
>>>>>>> Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
>>>>>>>
>>>>>>> Github release: https://github.com/MacPhage/chisel/releases/tag/v0.0.1 <https://github.com/MacPhage/chisel/releases/tag/v0.0.1> <https://github.com/MacPhage/chisel <https://github.com/MacPhage/chisel>>
>>>>>>> Binaries (direct ZIP): chisel-0.0.1-bundle.zip <https://github.com/MacPhage/chisel/releases/download/v0.0.1/chisel-0.0.1-bundle.zip <https://github.com/MacPhage/chisel/releases/download/v0.0.1/chisel-0.0.1-bundle.zip>>
>>>>>>> Source code (direct ZIP): Source code (zip) <https://github.com/MacPhage/chisel/archive/v0.0.1.zip <https://github.com/MacPhage/chisel/archive/v0.0.1.zip>>
>>>>>>> Github source code at specified commit: https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22 <https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22><https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22 <https://github.com/MacPhage/chisel/tree/e81ddee8e339d3717beda1ed8a675568be245c22>>
>>>>>>>
>>>>>>>
>>>>>>> If you have any more questions regarding my setup, please tweet me @au5ton <https://twitter.com/au5ton <https://twitter.com/au5ton>> or email themacphage at gmail.com <mailto:themacphage at gmail.com> .
>>>>>>>
>>>>>>>
>>>>>>> ------------
>>>>>>>
>>>>>>> Austin Jackson
>>>>>>> themacphage at gmail.com <mailto:themacphage at gmail.com> <mailto:themacphage at gmail.com <mailto:themacphage at gmail.com>>
More information about the nashorn-dev
mailing list