Some comments: - When you say classes run slower, do you mean they take longer to execute, or do you mean they spend time on compilation too? - Does your non-snapshotted version use proxies too? Proxies are indeed significantly slower. - You should no longer need --ignition --turbo. This is the default with the newest V8. - What version of V8 are you using? - It's not expected that code in the snapshot is slower than code at runtime. But I expect that there is no code embedded in the snapshot in the first place. - Do you have a small repro I can play with? E.g. source to include in the snapshot and the code to run. Ideally pure JS that I can run in Node.
Cheers, Yang On Friday, February 16, 2018 at 3:33:11 PM UTC+1, Alexandru Dima wrote: > > Hi Yang, > > Thanks for answering! > > I only snapshot pure JS code (written in AMD form), and when the JS code > needs node modules (built-in, native, JS only, etc), I feed it proxy > objects (`new Proxy`). Here is how the code I snapshot looks like - > https://gist.github.com/alexandrudima/bda598fbed179a581986b634cc94ab8d > > I am trying to implement what is described here[1] for VS Code (also an > Electron app). Perhaps the main difference is that I can snapshot a huge > amount of code, as we compile our code to AMD and I don't need to hack or > do anything with node's require to stitch things up. I also wrote our own > AMD loader, so I can do everything I need to in order to snapshot basically > all of our code. I am running `mksnapshot start.js > --startup_blob snapshot_blob.bin`. This creates a 40 MB `snapshot_blob.bin` > file, which I use to overwrite the original 1.3 MB `snapshot_blob.bin` file > that ships with Electron. The 40MB snapshot is effectively the entire VS > Code application (except for node modules, for which the code has > references to proxy objects). > > The file I am producing, snapshot_blob.bin, contains all the heap state > after executing the code in start.js. The heap state includes all the AMD > modules, with their exports, such as class definitions (functions with > prototypes), all the other utility functions, statics, etc, which I can > call and execute directly without loading any additional JS source code in > the VM at runtime. Sorry for calling it "snapshotted code", but that's what > I meant. My code is there, available, I don't need to load it, so it is a > part of the snapshot... > > At runtime, when the application starts up, there is startup code (part of > the snapshot too) which will begin to instantiate those classes (also part > of the snapshot), will then proceed to look at what folder/files you have > opened, what is the environment, what folder you have opened, etc. and > eventually will "paint" by creating DOM nodes, etc... > > My problem is that these classes, which are captured in the snapshot, are > significantly slower when I execute them, compared to when those same > classes (same code) are loaded from source or from code caching. I was > trying to capture this problem in my original screenshots. The "shell open" > part of the two screenshots shows this problem. When loading code from > source or from code caching, the JS profiler shows that everything is > "squashed" into the `runCallback` method. When running the classes as they > are captured in the snapshot, the JS profiler shows perhaps each and every > function call. > > I have followed some of your tips from here [2], i.e. I tried running > `mksnapshot --ignition --turbo start.js --startup_blob snapshot_blob.bin` > > I also tried running `mksnapshot --no-lazy start.js --startup_blob > snapshot_blob.bin`. > > All of these tweaks resulted in varying sizes in the output > `snapshot_blob.bin`, but the speed of the executing code was still slower. > > I am wondering if I am doing something silly (e.g. perhaps by using > proxies, or if the v8 flags don't 100% match at runtime, should --ignition > --turbo be there at runtime too ?) or is it expected that functions (code) > included in a snapshot are slower than those loaded at runtime? > > Thank you again for your time, > Alex > > [1] > https://blog.atom.io/2017/04/18/improving-startup-time.html#v8-snapshots > [2] https://github.com/nwjs/nw.js/issues/269#issuecomment-224490557 > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.