【问题标题】:Script for lazy-rendering in PhantomJS that sometimes locks phantomjs foreverPhantomJS 中的延迟渲染脚本,有时会永远锁定 phantomjs
【发布时间】:2016-04-29 10:33:10
【问题描述】:

我正在使用 phantomjs 以 PDF 格式呈现 AnyChart v6 图表 (http://6.anychart.com/)。

AnyChart v6 图表由一个 HTML 文件组成,该文件通过 Javascript 库调用 XML 定义文件并将其呈现为 SVG。

XML 定义文件是动态复杂处理的结果,因此服务器最多可能需要几分钟才能将 XML 文件传送到 Anychart javascript 库。

我的问题是强制 phantomjs 等待 XML 文件,所以我遇到了这个“twitter.js”脚本:

https://gist.github.com/cjoudrey/1341747

它工作得很好,只是有时它会永远锁定 phantomjs,唯一的办法就是杀死 Linux 进程。

这是一种随机行为,如果我再次尝试使用相同的 URL,它会起作用。

服务器日志显示 XML 文件已正确传递,因此不是服务器问题,而是客户端问题。

您能否在“twitter.js”代码中看到竞争条件或某些情况下可能导致 phantomjs 锁定的内容?

【问题讨论】:

  • 克里斯蒂安,请澄清一下:您是否使用 Phantom JS 渲染 AnyChart 6 HTML5 图表?
  • 是的。抱歉不清楚。

标签: phantomjs anychart


【解决方案1】:

不是 100% 确定,但可能与 http://phantomjs.org/api/webpage/handler/on-resource-received.html 有关

如果资源很大并且由服务器分多个块发送,则 PhantomJS 接收到的每个块都会调用 onResourceReceived。

注意“阶段:“开始”,“结束”(FIXME:中间块的其他值?)”

然而,forcedRenderTimeout 无论如何都应该杀死一个页面。

【讨论】:

  • 您好,您认为这是锁的原因吗?你能建议一个解决方法吗?
  • 每次请求资源和收到资源时,脚本都会在控制台上写一行。我注意到当 phantomjs 锁定时,控制台既不按请求也不按接收显示 XML 资源。对我来说看起来像是一个 JS 引擎错误,但我无法理解它发生的原因和时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-21
相关资源
最近更新 更多