In QT 4.8.4 Ich habe einige beliebige Javascript über einen Rückruf in C++ ausgeführt wird:QT: Javascript langsam (es sei denn, ich an der Konsole anmelden)
myWebElement->evaluateJavaScript(myScript);
nun das Testskript war:
$(this).css('border', 'solid 10px #000')
, die gearbeitet, aber es dauerte ein paar Sekunden zu laufen, und lief die CPU 100% auf.
Dann während des Testens habe ich "; console.log ('X')" hinzugefügt, während das Skript zu debuggen, um zu sehen, den Hangup zu lokalisieren ... Und es sofort ausgeführt!
Ich habe festgestellt, dass die Skripts so effizient wie erwartet funktionieren, solange ich mich an der Konsole anmelde. Sobald ich die Konsolenprotokollierung entferne, verlangsamt sich die Leistung zu einem Crawl. Es spielt keine Rolle, ob ich mich direkt im Skript anmelde oder das Log in C++ hinzufüge.
Irgendwelche Ideen? Ich würde es hassen, wenn ein Hack wie unten in meinem Programm herumläuft.
myWebElement->evaluateJavaScript(myScript + "; console.log('X')");
UPDATE:
Sieht aus wie dieser Fehler durch die Anzahl der Elemente auf der Seite betroffen ist. Es gibt eine Tabelle, in Fällen, in denen es nur ein oder zwei Zeilen gibt, gibt es keinen CPU-Hochlauf. Bei 600 Zeilen gibt es mehrere Sekunden maximaler CPU-Auslastung. Auch wenn es am Ende einen console.log-Befehl gibt, gibt es selbst bei 600 Zeilen keinen CPU-Hochlauf.
(auch hinzugefügt Version Info auf die Frage)
UPDATE 2:
Nach der Prüfung, ich muss, ich habe nichts in die Konsole für den Hack passieren funktionieren nicht muss sogar log anrufen. Ich kann "; Konsole" anhängen; zu dem Skript und es wird immer noch sofort funktionieren. Ich habe auch getestet, eine Rückkehranweisung zum Ende hinzuzufügen, die nicht funktionierte.
Bitte geben Sie an, welche Version von Qt – ksimons
Entwickeln auf QT 4.8.4, Kubuntu Linux 13.10 – Kver