Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PhantomJS-有没有办法检查javascript函数是否正在运行?_Javascript_Phantomjs - Fatal编程技术网

PhantomJS-有没有办法检查javascript函数是否正在运行?

PhantomJS-有没有办法检查javascript函数是否正在运行?,javascript,phantomjs,Javascript,Phantomjs,我正在运行幻影js进程来呈现网页。该网页有许多异步加载的javascripts,每个都运行自己的函数 是否有方法检查/调试webkit中的javascript引擎,以了解它当前是否正在执行任何javascript行(而不是处于空闲状态) 如果是这样的话,有没有办法判断它是从哪个javascript资源执行的 暂停javascript引擎、记录堆栈跟踪,然后像正常情况一样恢复,这样做会很完美 我不介意阅读webkit、phantomjs或render.js的源代码,自己修改它,然后从源代码重新编译

我正在运行幻影
js
进程来呈现网页。该网页有许多异步加载的
javascript
s,每个都运行自己的函数

是否有方法检查/调试webkit中的javascript引擎,以了解它当前是否正在执行任何javascript行(而不是处于空闲状态)

如果是这样的话,有没有办法判断它是从哪个javascript资源执行的

暂停javascript引擎、记录堆栈跟踪,然后像正常情况一样恢复,这样做会很完美

我不介意阅读
webkit
phantomjs
render.js
的源代码,自己修改它,然后从源代码重新编译它。我想先问问你们,万一有一个功能已经存在,或者有人已经做了,因为谷歌没有给我任何结果。谢谢

不太可能

Phantom.js是一个集成测试工具。这意味着您不应该尝试探索内部,而应该断言结果。你想问的问题是:“我可以做X动作吗?”“从最终用户的角度来看,这个功能是否有效?”

如果您想知道某个函数是否正在运行或在某个X操作中被调用。然后查看程序的内部结构,您需要的是一个单元测试,您可能会通过存根或模拟来断言函数正在运行。如果是这种情况,那么作为测试存根助手进行研究


(请注意,您可以在phantom.js中运行单元测试-这没关系,因为您需要运行时来运行它们)

检测JavaScript是否已编译并运行可能不是解决此问题的正确方法。最慢的操作是网络请求。您可以通过计算使用
onResourceRequested
启动的请求和使用
onResourceReceived
完成的请求,然后只为编译/运行添加一点静态等待时间。

对不起,我的问题有点不清楚。我正在使用phantom.js将网页捕获到磁盘,以便脱机浏览。有些页面有评论插件(如facebook、Discus、livefyre),加载需要很长时间(>5s),因此我需要检查是否下载并执行了所有相关脚本。我要寻找的是render.js调用new Error()的方法。每100毫秒堆栈一次以打印堆栈跟踪,但当我尝试这样做时,它会说“stack”未定义。有没有其他方法可以在render.js中找到javascript引擎的当前堆栈跟踪?可以使用performance.getEntries()获取脚本及其计时的列表,以便与document.scripts进行协调。如果它们是完全相互的,则加载所有脚本。如果所有脚本都已加载,并且代码正在运行,则可以假定所有脚本都已“启动”。再等3500毫秒确定,如果没有新条目出现,它可能已经完成加载。。。您可以重载ajax对象来记录内容获取,以获得双重确认。谢谢您的建议。从我所读到的内容来看,似乎performance.getEntries()只记录资源的网络计时。例如,如果网站下载javascript,它只记录请求时间和接收时间。然而,我感兴趣的是实际javascript执行的性能计时,而不是网络计时。是否有与之相当的performance.getEntries()。@dandavis在PhantomJS中没有
performance.getEntries()
。我试过了。只有
performance.timeing
可用。我的意思是,它可以判断脚本是否已加载,以及它加载的脚本是否已加载,并且没有ajax输出,那么它已经运行并且大概已经完成。可能不是100%,但总比没有或等待过度好。是的,这是正确的,要将网页捕获到磁盘,phantomjs应该检测网络请求何时完成,然后添加等待时间。这就是我目前正在做的事情。然而,我写这篇文章不是为了找到解决问题的有效方法,而是作为一个学习的机会。我目前正在探索新的(实验性的)方法来检测何时序列化网页——为了好玩,为了我自己的宠物项目。如果失败了,至少我对javascript引擎有所了解。话虽如此,您的解决方案是有效的,但我不能接受,因为它不完全是我所要寻找的。