【发布时间】:2011-10-31 09:33:37
【问题描述】:
是否有一种简单的方法可以做到这一点,而无需解析 URL 指向的整个资源并找出链接到该 URL 内的不同内容类型(图像、javascript 文件等)?
【问题讨论】:
是否有一种简单的方法可以做到这一点,而无需解析 URL 指向的整个资源并找出链接到该 URL 内的不同内容类型(图像、javascript 文件等)?
【问题讨论】:
编辑
使用PhantomJS 可以轻松实现这一点,它比 PHP 更接近于正确的工作工具。
原答案 (稍作修改)
要有效地做到这一点需要这么很多工作,我怀疑这是否值得。
在我看来,您必须使用类似 DOMDocument::loadHTML() 的东西来解析 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 cmets,并且会被忽略。background-image:)。还必须根据初始文档中的 src/href 检查这些资源是否重复。<script> 元素到文档中,以便从 Google 获取实际脚本。为此,您必须有效地评估和执行页面上的 Javascript 以查看它是否会生成任何新请求。所以你看,这并不容易。我怀疑获取浏览器的源代码并对其进行修改实际上可能更容易。如果您想尝试提出一个基于 PHP 的解决方案,该解决方案可以提供准确的答案,请成为我的客人(您甚至可以出售如此复杂的东西),但老实说,问问自己 - 我真的有那么多吗?时间在我手上?
【讨论】:
只是给你一些快速的想法。
您应该意识到缓存以及浏览器遵守和不遵守缓存指令的方式的差异可能会导致不同浏览器在不同时间为同一页面生成不同的资源请求,这可能是值得的考虑。
如果您的项目的目的只是衡量此指标,并且您可以控制相关网站,则可以通过可以计算请求数的 php 代理传递每个资源。即你可以按照这个模式来处理 ssi、脚本、样式、字体等等。
如果第 2 点由于您网站的性质而无法实现,但您可以访问,那么如何解析 HTTP 日志?与尝试解析 html/php 文件相比,我想这会很简单,但可能会很慢。
我希望本文中的某些内容对您有所帮助。
【讨论】: