V8's snapshot feature exists exactly to address this issue. If you build v8 with snapshot=on the native .js files will be compiled just once, at vm compile time. That should make #4 disappear completely even from the first run.
-- Christian On Tue, May 19, 2009 at 9:56 AM, ondras <[email protected]> wrote: > > Hi, > > I spent some time analyzing performance bottlenecks in v8cgi. A > typical program flow in FastCGI/Apachemodule scenario is the > following: > > 1) program & V8 initialization, > 2) new request arrives, > 3) new context is created, > 4) default libraries (*.js files) are compiled and executed, > 5) requested file (.js) is compiled and executed, > 6) wait for new request, GOTO #2, > 7) shutdown. > > According to valgrind, most problematic operation is #4. Every (http) > request means compiling and executing of several javascript variables. > In theory, there are two possible approaches to speed this up: > > A) Compile these files only once, execute them on each request; > B) Do not create new context each time; save the initialized context > and re-use it (this removes points #3 and #4 from all but first > request). > > However, I am unable to successfully implement any of these points, > because: > > A) It is _not_ possible to compile a script in context C1 and run it > in other context C2 in V8. No errors are raised, but the compilation > closely binds script to C1 and results in C2 are totally > unpredictable. > > B) I don't know how to "freeze" or "clean" the context for re-using; > user code (#5) can for instance do "Array.prototype.XXX = 3;" and I am > not sure how to detect/revert this. > > > Please, can you share your thoughts about how to solve these issues? > Has anyone encountered the need to speed up script (re)compilation and/ > or context reusing? > > > > Sincerely, > Ondrej Zara > > > > --~--~---------~--~----~------------~-------~--~----~ v8-users mailing list [email protected] http://groups.google.com/group/v8-users -~----------~----~----~----~------~----~------~--~---
