54 lines
2.5 KiB
Plaintext
54 lines
2.5 KiB
Plaintext
/*!
|
|
\page qskoptimizations Optimizations
|
|
|
|
The main optimizations found in QSkinny stem from the usage of C++ as a
|
|
first-class citizen, allowing for "lighter" classes to be leveraged when
|
|
building UIs. In QML, most types are backed by a corresponding QObject, or
|
|
possibly multiple QObjects in order to deal with grouped properties and styling.
|
|
QskControls, on the other hand, strive to encapsulate all functionality within
|
|
a single QObject and delegate styling and other options to Q_GADGET classes and
|
|
scene graph nodes.
|
|
|
|
Fewer QObjects leads to less memory consumption, generally fewer memory
|
|
allocations, and better start-up times (especially when QML is avoided
|
|
altogether).
|
|
|
|
\par Scene graph timing optimizations
|
|
|
|
The \ref QQuickItem "Qt Quick" framework has a tendency to perform some operations
|
|
too soon and too often, possibly leading to negative effects on performance or
|
|
memory consumption. As some of these behaviors can be deferred at runtime,
|
|
QskControl exposes a number of \ref QskControl::Flag "flags" (enabled by
|
|
default) to avoid these issues.
|
|
|
|
More specifically, the following observations and associated actions have been
|
|
made:
|
|
|
|
\par Delaying node creation
|
|
When calling QQuickItem::update(), the scene graph schedules a call to
|
|
QQuickItem::updatePaintNode(), regardless of whether the item is visible. Naïve
|
|
implementations tend to always update the node, resulting in possibly extra work
|
|
(especially at start-up time). QSkinny defers the creation of this paint node by
|
|
blocking the subsequent call to QskSkinnable::updateNode unless the item is
|
|
visible. The behavior can be disabled via QskControl::DeferredUpdate.
|
|
|
|
\par Deferring polish
|
|
Similar to deferred updates (see above), calls to QQuickItem::polish are
|
|
deferred until the item is visible and its geometry is known. The behavior is
|
|
controlled by QskControl::DeferredPolish.
|
|
|
|
\par Deferring unnecessary re-layout
|
|
By default, the implicit approach to layouts found in QML can generate
|
|
superfluous changes to the geometry of an item, especially during application
|
|
start-up. The QskControl::DeferredLayout flag attempts to block most of these
|
|
changes. When using QSkinny layouts, it is recommended to leave this flag
|
|
enabled, but it may be necessary to disable it when working with standard QML
|
|
layouts.
|
|
|
|
\par Deleting invisible nodes
|
|
The default scene graph does not implicitly delete nodes which become invisible.
|
|
As this might result in a useful memory savings, QSkinny deletes, by default,
|
|
nodes belonging to items which have been made invisible. To change this behavior,
|
|
disable the QskControl::CleanupOnVisibility flag.
|
|
*/
|