Подтвердить что ты не робот

QT: выполнение Javascript медленное (если я не заходил на консоль)

В QT 4.8.4 У меня есть произвольный Javascript, выполняемый через обратный вызов в С++:

myWebElement->evaluateJavaScript( myScript );

Теперь тест script был:

$(this).css('border', 'solid 10px #000')

который работал, но потребовалось несколько секунд, чтобы запустить, и подбежал к процессору 100%.

Затем во время тестирования я добавил "; console.log(" X ")" при отладке script, чтобы увидеть, как отключить зависание... И он выполняется мгновенно!

Я обнаружил, что до тех пор, пока я вхожу на консоль, скрипты работают эффективно, как ожидалось. Как только я удаляю ведение журнала консоли, производительность замедляется до обхода. Неважно, если я вхожу непосредственно в script или добавляю журнал на С++.

Любые идеи? Мне бы не хотелось, чтобы в моей программе был взломан как ниже.

myWebElement->evaluateJavaScript( myScript + "; console.log('X')" );

UPDATE:

Похоже, на эту ошибку влияет количество элементов на странице. Там таблица, в тех случаях, когда есть только одна или две строки, нет разгона процессора. Когда там 600 строк, есть несколько секунд максимального использования процессора. Опять же, хотя, как только команда console.log в конце концов, нет разгона процессора даже с 600 строками.

(также добавлена ​​информация о версии на вопрос)

ОБНОВЛЕНИЕ 2:

После тестирования мне не нужно ничего пропускать в консоль для взлома для работы, мне даже не нужно вызывать журнал. Я могу добавить "; console;" к script, и он будет работать мгновенно. Я также тестировал добавление оператора return до конца, что не сработало.

4b9b3361

Ответ 1

Проблема в том, что Qt оценивает возвращаемое значение последнего оператора в Javascript и преобразует его в QVariant. Это заняло много времени, потому что jQuery возвращал объект jQuery, который в целом оценивался Qt - и рекурсивно. Это также потребляло ОЗУ.

Это не было console.log, который исправлял проблему, это возвращаемое значение "null". Я тестировал, и сшивание "null" в конце script также работало. Ниже приведен обновленный код.

myWebElement- > оценитеJavaScript (myScript + "; null" );