On Thursday 11. October 2012 16.04.04 Thomas McGuire wrote: > Hi, > > the QML engine "freezes" the global JS object. This is apparently(?) to > prevent accidental writes to the global object. For those who don't know, > the global object in JS provides objects and properties available in > global scope, such as "console" (for console.log) or "qsTr". > > Now, it turned out that freezing the global object takes a lot of time with > v8 on BB10 devices. Even in release mode, just the call to freeze the > global object makes the startup time 100ms longer. > > v8 seems to have an implmentation of freezing that is suboptimal, see for > example the benchmark at http://jsperf.com/performance-frozen-object. Note > this benchmark is for iterating over properties of frozen objects, not > freezing an object, though likely freezing an object would get similar > benchmark results. > > Could we maybe simple get rid of object freezing, and not freeze the global > object? > What would the consequences of that be, anything bad? I am the opinion that > if the user wants to override the "console" object, let him. Maybe there > were other reasons for freezing the global object though? > > Regards, > Thomas
Hi, Freezing global object was a language design decision. The problem was that in QML it would be much easier accidentally add a property to the global object then in JS. Such mistakes would be quite difficult to debug in QML. As a side effect there is a few optimizations in declarative engine that assume frozen global object. As far I remember they speedup property lookup. Algorithm for freezing an object, was never benchmarked. Probably you can optimize it. You my also try to enable v8 snapshots, if it is not enabled on your configuration. According to our test it may increase qml boot time about 5x. I do not know if it is already done but, maybe you can create a snapshot with frozen global object, that could solve your problem. Good luck :-) Jędrek _______________________________________________ Development mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/development
