2010-12-09 23 views
3

我開始使用Boomerang來測量性能。這是非常有前途的。雖然它允許我測量延遲,帶寬和頁面加載時間,但我也有興趣試圖獲取初始HTML頁面服務器端所需的時間。 Wile似乎很簡單,記錄瀏覽器開始解析javascript的時間(接近初始到達的時間),以便估計服務器時間,我需要計算出要扣除多少網絡時間。所以要做到這一點,我需要知道html文檔有多大。從Javascript中讀取當前文檔的大小

如何從Javascript中告訴此問題?

文檔對象不會出現有一個innerHTML屬性

我試圖

totsize=document.HEAD.innerHTML.length + document.BODY.innerHTML.length; 

的頭部和身體的實體內出現在Firefox中的DOM瀏覽器 - 但是當我嘗試上面的代碼,我得到一個未定義的錯誤 - 也嘗試與'頭' - 無濟於事。

任何想法?

(請注意,JavaScript是在一個單獨的文件,並會在大多數情況下緩存 - 所以這不是一個大問題)。

我曾嘗試谷歌 - 但我只是得到許多描述屏幕大小的HTML元素的網頁和窗口尺寸:(

TIA

回答

4

如何document.documentElement.innerHTML.length

+0

感謝MEDER - 這正是我一直在尋找:)) – symcbean 2010-12-09 17:19:50

+0

`HEAD`和`BODY`應BTW小寫。 – 2010-12-09 17:23:54

2

document.documentElement.innerHTML.length作爲? per @ meder可能已經足夠了,它不會是確切的,因爲它返回當前頁面DOM的序列化,而不是原始HTML源代碼。

對於靜態頁面無關緊要,因爲它只是在這裏額外關閉標記的情況下引用的不同屬性......但是如果有大量頁面內容由腳本實時創建,則該內容將計入儘管沒有出現在原始來源中,這可能會導致您的計算結果不存在。

如果你需要找出實際的資源長度,你需要再次讀取該頁面,你可以在當前的URL使用XMLHttpRequest做:

var xhr= new XMLHttpRequest(); 
xhr.onreadystatechange= function() { 
    if (this.readyState!==4) return; 
    alert(this.responseText.length); 
}; 
xhr.open('GET', location.href, true); 
xhr.send(); 

(這是不可能的儘管如果該頁面是POST請求的結果)。

這會給你一個字符大小。如果您使用的是像ISO-8859-1這樣的單字節編碼,則網絡負載字節大小將相同。

var bytes= unescape(encodeURIComponent(this.responseText)); 
alert(bytes.length); 

如果:如果您使用UTF-8,那麼你可以通過字符串轉換爲UTF-8字節,AS-代碼單元,它有一個快速的習慣黑客找出字節大小您不幸地使用非UTF-8多字節編碼,這在這裏無法真正做到;你必須包含完整的編碼映射表,這對於東亞編碼來說會非常大。

0

這個怎麼樣?:

/* 
* This script determines the size of the current page in bytes. 
* But why does the 2nd length differ from the first? 
*/ 
var len=document.getElementsByTagName("html")[0].innerHTML.length; 
var len2=document.getElementsByTagName("head")[0].innerHTML.length + document.getElementsByTagName("body")[0].innerHTML.length; 
//document.body.innerHTML.length 
alert('Page Size: '+len +' bytes'); 
alert('Page Size2: '+len2+' bytes'); 

它似乎工作正常,但不是很好。因爲它有兩種不同的長度。但爲什麼? 呃!這種格式正在殺死我。

編輯:有人可以修復此格式?顯然,我的瀏覽器工作不正常。火狐的15.x

編輯:固定格式