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

时间:2013-10-21 21:26:55

标签: javascript qt

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

myWebElement->evaluateJavaScript( myScript );

现在,测试脚本是:

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

虽然有效但运行了几秒钟,并且CPU 100%

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

我发现只要我登录到控制台,脚本就会按预期有效地工作。一旦删除控制台日志记录,性能就会慢慢爬行。如果我直接在脚本中登录,或者在C ++中添加日志,那都没关系。

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

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

更新

看起来这个错误会受到页面上元素数量的影响。有一个表,在只有一两行没有CPU启动的情况下。当有600行时,CPU使用率会有几秒钟的最大值。但是,一旦有一个console.log命令,那么即使有600行也没有CPU启动。

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

更新2:

经过测试,我不需要将任何内容传递到控制台以便黑客工作,我甚至不需要调用日志。我可以追加“;控制台;”到脚本,它仍然会立即工作。我还测试过最后添加一个return语句,但是没有用。

1 个答案:

答案 0 :(得分:16)

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

修复问题的不是console.log,它返回的是“null”值。我测试过,在脚本结尾处装订“null”也有效。以下是更新后的代码。

myWebElement-> evaluateJavaScript(myScript +“; null”);