QT:Javascript执行缓慢(除非我登录到控制台)

QT: Javascript execution slow (unless I log to the console)

本文关键字:登录 非我 控制台 Javascript 执行 缓慢 QT      更新时间:2023-09-26

在QT 4.8.4中,我有一些任意的Javascript通过c++中的回调执行:

myWebElement->evaluateJavaScript( myScript );

现在,测试脚本是:

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

这有效,但运行了几秒钟,并且 CPU 运行了 100%。

然后在测试时,我添加了";console.log('X')",同时调试脚本以查看精确挂断...它立即执行!

发现只要我登录到控制台,脚本就会按预期高效工作。一旦我删除控制台日志记录,性能就会降低到爬行。是直接在脚本中登录,还是在C++中添加日志都没有关系。

有什么想法吗?我不想在我的程序中出现像下面这样的黑客。

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

更新:

看起来此错误受页面上元素数量的影响。有一个表,在只有一两行的情况下,没有 CPU 运行。当有 600 行时,会有几秒钟的 CPU 使用率最大化。不过,只要最后有一个控制台.log命令,即使有 600 行,也不会有 CPU 运行。

(还在问题中添加了版本信息)

更新 2:

测试后,我不需要将任何东西传递到控制台中即可使黑客工作,我什至不需要调用日志。我可以附加";控制台;",它仍然可以立即工作。我还测试了在末尾添加 return 语句,但没有奏效。

问题是Qt正在评估Javascript中最后一个语句的返回值并将其转换为QVariant。它变得非常耗时,因为jQuery返回的是jQuery对象,Qt正在完整地评估该对象 - 并且是递归的。这也消耗了内存。

解决问题的不是控制台.log而是它返回的"null"值。我测试了一下,在脚本末尾装订"null"也有效。下面是更新的代码。

myWebElement->evaluateJavaScript( myScript + ";空");