gpt4 book ai didi

javascript - 这是 Xpath 评估中的 Chrome 错误吗

转载 作者:行者123 更新时间:2023-11-30 09:57:16 25 4
gpt4 key购买 nike

打开此页面:http://sunnah.com/abudawud/2

然后在控制台中运行这个简单的 xpath 搜索查询。然后浏览器选项卡崩溃

for(var k=0, kl=2000; k < kl; k++){
console.log(k);
var xpathResult = document.evaluate("//div[@class='hello']", document, null, XPathResult.ANY_TYPE, null);
}

Macbook Pro、OSX 10.10.5 上的 chrome 版本 46.0.2490.80(64 位)

不幸的是,我必须在此页面上运行 xpath 数千次才能搜索不同的元素。所以我不能不做那么多电话来评估。

崩溃取决于 xpath 项。对于某些术语,它会崩溃,而对于其他一些术语,它不会。

它在相同的计数上一直失败,所以我认为这不是时间问题或垃圾收集问题。

我没有收到任何错误代码,所以我不确定该去哪里查看。

enter image description here

更新经过进一步调查,我们认为这是一个合法的 Chrome 错误,或者至少不是释放内存的好方法。发生的情况是,如果您的 xpath 以/或//开头,则搜索上下文将扩展到所有 DOM,并且出于某种原因,chrome 将 DOM 或其他一些中间对象保留在内存中。如果 xpath 确实以 (div/p) 之类的相对路径开头,并且搜索范围(第二个参数)设置为 DOM 的一部分,则内存消耗更加合理并且不会发生崩溃。感谢@JLRishe 提供的一些提示,这些提示对得出这个结论非常有帮助。

更新2我在 Chrome 上提交了一个错误。但几个月后,他们拒绝了该错误,认为该错误不会修复。我暂时设法解决了这个问题。

最佳答案

如果我在该页面上运行您的代码并观察任务管理器,我可以看到 Chrome 的工作集增加到大约 3.3 GB,然后在大约 1300 次迭代后最终崩溃。

每个 XPath 查询都会导致 Chrome 为结果和获取结果所涉及的任何操作分配内存,但它似乎没有释放任何已分配的内存,因为您没有释放对线程的控制。

我发现工作集在 1.65 GB 时稳定下来,如果我这样做,操作会在没有崩溃的情况下完成:

var k = 0;
var intv = setInterval(function () {
console.log(k);
var xpathResult = document.evaluate("//div[@class='hello']", document, null, XPathResult.ANY_TYPE, null);
k += 1;
if (k >= 2000) {
clearInterval(intv);
}
}, 0);

所以类似的东西可能是一个可能的解决方案。

这仍在使用大量系统资源,而且这甚至不包括您在操作过程中可能存储的任何值。我鼓励您寻找一种不需要运行太多 XPath 查询的更智能的方法。

关于javascript - 这是 Xpath 评估中的 Chrome 错误吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com