diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2010-04-15 10:09:30 (GMT) |
---|---|---|
committer | Kent Hansen <kent.hansen@nokia.com> | 2010-04-15 11:46:19 (GMT) |
commit | afb54fe253ded94152575b23539552aa8f4ad384 (patch) | |
tree | 458cab0f2fa90634c4bd299cb041d5aeb862634b /src/script/api/qscriptengine_p.h | |
parent | 0d80dbc176afa997af7d897344e5a8bfec0317dc (diff) | |
download | Qt-afb54fe253ded94152575b23539552aa8f4ad384.zip Qt-afb54fe253ded94152575b23539552aa8f4ad384.tar.gz Qt-afb54fe253ded94152575b23539552aa8f4ad384.tar.bz2 |
Speed up qsTr() by caching the translation context
qsTr() uses QFileInfo::baseName() to determine the translation
context from a URL.
The problem is that creating a QFileInfo object (and thus a
file engine object), as well as processing the URL to determine
the base name part, is very expensive.
By caching the last translation URL and context, qsTr() becomes
5x faster.
Only the most recent URL is cached, because a script's text will
be translated all at once (as the script is evaluated), so for
scripts with multiple translated strings only the first qsTr()
call will cause a cache miss.
The performance could be improved even further by getting rid of
the QFileInfo dependency altogether; created QTBUG-9939 for that
since it's a more risky change.
Task-number: QTBUG-6908
Reviewed-by: Olivier Goffart
Diffstat (limited to 'src/script/api/qscriptengine_p.h')
-rw-r--r-- | src/script/api/qscriptengine_p.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index 5c2007f..fd47208 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -63,6 +63,7 @@ #include "RegExpObject.h" #include "SourceProvider.h" #include "Structure.h" +#include "UString.h" #include "JSGlobalObject.h" #include "JSValue.h" @@ -73,7 +74,6 @@ namespace JSC typedef ExecState CallFrame; class JSCell; class JSGlobalObject; - class UString; } @@ -298,6 +298,8 @@ public: static inline QScriptDeclarativeClass *declarativeClass(JSC::JSValue); static inline QScriptDeclarativeClass::Object *declarativeObject(JSC::JSValue); + JSC::UString translationContextFromUrl(const JSC::UString &); + #ifndef QT_NO_QOBJECT JSC::JSValue newQObject(QObject *object, QScriptEngine::ValueOwnership ownership = QScriptEngine::QtOwnership, @@ -367,6 +369,9 @@ public: QScriptValue abortResult; bool inEval; + JSC::UString cachedTranslationUrl; + JSC::UString cachedTranslationContext; + QSet<QString> importedExtensions; QSet<QString> extensionsBeingImported; |