2011-06-30 99 views
7

是否有任何現代瀏覽器,通過JavaScript公開時間第一個字節(TTFB)和/或時間到最後一個字節(TTLB)的http請求,而不訴諸任何插件?JavaScript的第一個字節的時間?

我想要的是一個JavaScript代碼片段,可以訪問這些值並將它們發回服務器進行性能監控。

澄清: 我不是在尋找任何js計時器或開發者工具。我想知道並希望的是,如果有任何瀏覽器測量加載時間並通過javascript公開這些值。

+0

你的意思是測量使用JavaScript加載頁面的時間? –

+0

是的。如果可能的話,我希望從瀏覽器發送請求開始直到它開始接收數據和/或收到全部數據時花費的時間。您可以在Safari/Chrome開發人員工具,Firebug等中獲得的數據。根本不需要任何開發人員工具。 –

回答

11

你想要的是W3C的PerformanceTiming接口。瀏覽器支持很好(請參閱2011年9月的this survey)。就像你推測暗影嚮導的回答一樣,這些時間被瀏覽器捕獲並暴露給窗口對象中的JavaScript。你可以在window.performance.timing找到它們。您的TTFB間隔的終點將爲window.performance.timing.responseStart(定義爲「用戶代理剛收到服務器或相關應用程序緩存或本地資源的響應的第一個字節後的時間)」。根據您是否有興趣及時卸載之前的文檔或解決DNS的時間,您可能需要閱讀文檔並決定哪一個適合您的應用程序。

+1

var performanceTiming = performance.timing; ttfb = performanceTiming.responseStart - performanceTiming.requestStart; 這是由IE 7+ – Beakal

0

您可以在Chrome開發人員工具中查看響應時間。

+1

他明確地詢問「不訴諸任何插件」 - 猜猜他的意思是Firebug之類的。 –

+0

Chrome中的Developertools不是插件... –

+0

是的,但Firebug是。爲了記錄,-1不是我的 - 這不是錯誤的答案,只是我有一個「缺陷」,我指出。 :)順便說一下,在你發佈它幾乎整整一年後,你是否記得你的答案? –

0

在JS中獲取真正的TTFB是不可能的,因爲頁面只有在接收到第一個字節後才能獲得JS上下文。您可以得到最接近的東西,如下所示:

<script type="text/javascript">var startTime = (new Date()).getTime()</script> 

很早就在您的<head>標記中。然後,根據是否要檢查html何時結束或所有內容是否完成下載,您可以在HTML頁面的底部附近放置類似的標記(並減去這些值),然後執行XHR返回服務器(或設置一個cookie,您可以在下一頁請求中檢索服務器端)或者收聽onload事件,並執行相同操作。

+2

但TTFB是從請求發送時開始測量的。根據定義,TTFB將會過去,因爲JavaScript將被包含在後面的字節中。 – detaylor

+0

這和Javascript時間測量是f'd:http:// ejohn。org/blog/accuracy-of-javascript-time/ – danjah

+0

@Smirkin是的,但它是最接近你將使用Javascript。編輯更清楚。 –

1

我擔心這是不可能的。

JavaScript變爲「活動」僅部分請求已從服務器發送,被瀏覽器接受並解析。

你問的有點像問:「吃完它後我可以測量一個蛋糕的重量嗎?」 - 你需要先體重,然後才吃蛋糕。

+1

感謝您的回覆。我不會像這樣更像「我可以通過JavaScript訪問瀏覽器爲我測量的東西」。顯然,在瀏覽器中需要一些東西來收集我之後的統計信息。 JS部分只會暴露這些已經收集的值。 –

+0

也許可以在HTML頭文件中加載一個文件進行io文件檢索 - 如果服務器上次訪問的時間是可用的時間?這可能會告訴你開始時間。如果這種情況甚至奏效,那麼結束時間會變得更加困難,因爲它被加載的時間並不是最後一個字節被讀取的時間......只是一個想法。 – danjah

+0

@NA不,看不出瀏覽器會收集這樣的東西的任何理由?也許在Open Source瀏覽器中可能會公開這樣的事情,但是我非常懷疑存在這樣的統計信息的現代瀏覽器,更不用說將它們暴露給JS。無論如何,與瀏覽器相關的所有內容都將成爲「導航器」對象的一部分。 –

相關問題