如何使用PHP查找网站的加载时间?

时间:2016-05-01 10:21:08

标签: php apache

我正在开发一种工具来分析用户提供的网站。其中一个重要部分是显示网站的加载时间。我怎样才能在PHP中实现它?我尝试了以下方法

方法1:

下载网站的HTML代码解析它,找到CSS文件,JavaScript文件,图像等各种资源。然后逐个下载。

问题:由于像Chrome这样的真实浏览器,他们一次下载大约6个资源。 PHP无法异步执行。很难实现缓存。

方法2:

使用Apache的Bench mark工具。看起来很不错。我可以设置并发连接和一切。优秀的工具。甚至可以启用Gzip。

ab -n 100 -c 10 http://www.google.com/

问题:如何启用缓存?因为我想测试网站两次(用缓存显示加载时间)。我也听说过Apache AB测试没有下载资源。有人知道吗?

还有其他方法吗?或者有什么方法可以解决方法的问题吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试ab而不是wget。它对于下载整个页面很有用,如果启用了缓存,它可能会使用If-Modified-Since标题 - https://www.gnu.org/software/wget/

另一个想法是使用Selenium WebDriver,它允许您从PHP控制Web浏览器 - https://github.com/facebook/php-webdriver

[稍后编辑]

我担心您无法使用wget执行并发下载(页面及其资源)。

即使你可以,也很难让它成为真正的浏览器。

例如,一个页面可能会加载7个JavaScript文件:三个在同一个域中,三个来自另一个域,第七个来自CDN。其中一些脚本文件在执行时可能会加载其他资源 - CSS文件,图像和其他JavaScript库。每个CSS文件也可能触发加载其他资源(字体文件,图像,其他样式表)。

在上述情况下测量网页的加载时间变得困难,除非您使用的是浏览器控制器/模拟器。

所以,我建议看看 Selenium Driver 。 或其他图书馆/工具,如MinkPhantomJS - 正如@halfer所述。

答案 1 :(得分:2)

如果你想在PHP中这样做,你有几个选择:

  • 通过队列加入PhantomJS,如Gearman或Beanstalk。 Phantom包含一个真正的浏览器(WebKit引擎),因此将以真实世界的方式加载网站。 PHP有驱动程序,例如Spiderling
  • 使用Goutte之类的内容解析页面,然后使用multi_curl并行加载其资源(PHP 可以执行此操作!)或围绕相同的包装器,例如{ {3}}。但是,由于此方法不会运行JavaScript,因此代码中触发的额外负载将无法运行。

答案 2 :(得分:1)

Php可以通过“多”接口http://php.net/manual/en/function.curl-multi-init.php使用CURL同时做多个请求。

你也可以传递If-Modified-Since(见How to test for "If-Modified-Since" HTTP Header support)并回答你的2分。

但你还有几点需要考虑:

你怎么知道你是否必须在php中加载条件J?

远程后端如何使用“新鲜”cookie或旧cookie? 也许该网站有一些返回用户的特殊逻辑......

当然,网络浏览器中的模拟是更接近真实世界的模拟,实际上它甚至都没有被模仿。

但请检查“处理”外部流程是否可以控制网络浏览器,从而改变时间....