有没有一种简单的方法可以在不解析URL指向的整个资源的情况下找到链接到该URL内部的不同内容类型(图像,javascript文件等)?
答案 0 :(得分:4)
给你一些快速的想法。
您应该知道,缓存以及浏览器,服从和违反缓存指令的方式的不同可能会导致不同浏览器在不同时间为同一页面生成不同的资源请求,这可能是值得的考虑
如果项目的目的只是衡量这个指标,并且您可以控制有问题的网站,那么您可以通过可以计算请求的php代理传递每个资源。即你可以按照这种模式ssi,脚本,样式,字体,任何东西。
如果由于您网站的性质而无法获得第2点但您有权访问,那么如何解析HTTP日志呢?我想,与试图解析html / php文件相比,这会很简单,但可能会很慢。
如果您无法访问网站源/ http日志,那么我怀疑您是否可以使用任何真正的准确性,涉及大量工作来执行此操作,但您可以使用curl来获取初始HTML和然后按照DaveRandom的说明进行解析。
我希望这对你有所帮助。
答案 1 :(得分:3)
修改强>
使用PhantomJS可以很容易地实现这一点,DOMDocument::loadHTML()
比PHP更接近正确的工具。
原始答案 (稍加修改)
为了做到这一点,我需要做很多工作,我会怀疑这是值得的。
我看到它的方式,您必须使用类似{{3}}的内容来解析HTML文档,并查找所有src=
和href=
属性并解析它们。我知道,听起来相对简单,但有几千个潜在的跳闸点。以下是我的一些问题:
Content-Type:
标题一样简单,但如果服务器在这方面行为不正确,则可能得到错误答案。example.com
阅读的文档位于/dir1/dir2/doc.html
且文档使用/dir1/dir3/img.gif
,则文档中的某些位置可能会被称为/dir1/dir3/img.gif
,有些位于可能是http://www.example.com/dir1/dir3/img.gif
,有些地方可能是../dir3/img.gif
- 您必须认识到这是一个资源,只会产生一个请求。<!--[if IE]
),并决定是否要将这些块中包含的资源包含在总计数中。这也会带来使用XML解析器的新问题,因为<!--[if IE]
块在技术上是有效的SGML注释,并且会被忽略。background-image:
)。还必须根据初始文档中的src / hrefs检查这些资源是否有重复。<script>
元素,以便从Google获取实际脚本。为此,您必须在页面上有效地评估和执行Javascript以查看它是否生成任何新请求。所以你看,这并不容易。我怀疑实际上获取浏览器的来源并修改它可能更容易。如果你想尝试并提出一个基于PHP的解决方案,我会得到一个准确的答案(你甚至可以卖出那么复杂的东西)但老实说,问问自己这个 - 我真的有这么多吗?时间在我手上?