2011-08-20 37 views

回答

3

編輯

此使用PhantomJS,這是接近了很多正確的工具的工作比PHP是容易實現。


原來的答案(略有修改)

爲了有效地做到這將需要所以多的工作,我懷疑它是值得的麻煩。

我看到它的方式,您將不得不使用類似DOMDocument::loadHTML()的東西來解析HTML文檔,並查找所有src=href=屬性並解析它們。聽起來相對簡單,但我知道,但有幾千個潛在的跳閘點。下面是一些我的頭頂部:

  • 首先,你必須檢查初始請求的資源實際上的HTML文檔。這可能與查看響應的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註釋,並且會被忽略。
  • 您必須解析任何CSS文檔並查找CSS聲明中包含的資源(例如,background-image:)。這些資源還必須根據初始文檔中的src/hrefs進行復制檢查。
  • 這是非常困難的 - 你將不得不尋找通過Javascript加載到文檔上的資源。例如,您可以使用Google AdWords的其中一種方式是使用整齊的JS,它爲文檔動態添加新的<script>元素,以便從Google獲取實際的腳本。爲了做到這一點,你必須有效地評估和執行頁面上的Javascript,看它是否會產生任何新的請求。

所以你看,這並不容易。我懷疑,獲取瀏覽器的源代碼並修改它可能會更容易。如果你想試着想出一個基於PHP的解決方案,並提供一個準確的答案作爲我的客人(你甚至可以銷售像這樣複雜的東西),但老實說,問問你自己 - 我真的有這麼多時間在我手上?

+0

偉大的答案,詳細解析HTML和它的所有相關資產解析的複雜性質。 – Gavin

4

只是一些快速的想法給你。

  1. 你應該知道,高速緩存,並在方式上存在差異,其中瀏覽器,服從和不服從的緩存指令可能會導致在同一頁產生不同的資源請求,通過在不同的時間不同的瀏覽器,可能是值得考慮。

  2. 如果您的項目的目的僅僅是衡量這一指標,並且您有權控制相關網站,則可以通過可以計數請求的php代理傳遞每個資源。即你可以按照這個模式來使用ssi,腳本,樣式,字體,任何東西。

  3. 如果由於您的網站的性質而導致第2點不可能,但您有權訪問,那麼解析HTTP日誌怎麼樣?我想這會比試圖解析一個html/php文件簡單,但可能會很慢。

  4. 如果你沒有訪問網站的源/ http日誌,那麼我懷疑你可以做到這一點與任何真正的準確性,涉及大量的工作,但你可以使用curl來獲取最初的HTML,然後根據DaveRandom的說明進行解析。

我希望這件事對你有幫助。

相關問題