W3C Web性能工作小組與Google、Mozilla和其他社區(qū)領(lǐng)導(dǎo)者通力合作,制訂了導(dǎo)航定時(shí)、
資源定時(shí)、
用戶定時(shí)和性能時(shí)間線接口的標(biāo)準(zhǔn)化規(guī)范,可以幫助開發(fā)者了解在Web應(yīng)用程序中導(dǎo)航、獲取資源以及運(yùn)行腳本的實(shí)際使用性能。您可以使用這些接口來捕獲并分析您的客戶實(shí)際使用您的Web應(yīng)用程序的體驗(yàn),而不是依靠那種在人工環(huán)境中測試您的應(yīng)用程序性能的合成測試。利用此定時(shí)數(shù)據(jù),您可以確定從哪些方面改進(jìn)您的Web應(yīng)用程序的實(shí)際使用表現(xiàn)。IE11對所有這些接口均提供支持。請查看性能定時(shí) Test Drive 來查看這些接口的動(dòng)態(tài)演示。
性能定時(shí) Test Drive 允許您試用定時(shí) API
性能時(shí)間線
性能時(shí)間線規(guī)范已經(jīng)作為一項(xiàng) W3C 推薦發(fā)布,受IE11和Chrome 30完全支持。利用此接口,您可以獲得導(dǎo)航、獲取資源以及執(zhí)行應(yīng)用中運(yùn)行的腳本期間所花費(fèi)時(shí)間的端到端視圖。此規(guī)范定義了所有性能指標(biāo)需要實(shí)施的最低屬性,以及開發(fā)人員可以用來檢索任意類型性能指標(biāo)的接口。
所有性能指標(biāo)必須支持以下四種屬性:
所有定時(shí)數(shù)據(jù)都使用類型為 DOMHighResTimeStamps
的高解析度時(shí)間進(jìn)行記錄,該類型在
高解析度時(shí)間規(guī)范中有所定義。與DOMTimeStamps
不同,該類型從 UTC 時(shí)間 1970
年 1 月 1 日起始以毫秒度量時(shí)間值,而高解析度時(shí)間值是從文檔導(dǎo)航開始時(shí)至少以微秒的精度來度量時(shí)間值。例如,如果我使用 performance.now()
查看當(dāng)前時(shí)間,則高解析度時(shí)間類似于 Date.now()
,將會(huì)獲得當(dāng)前時(shí)間的如下解釋說明:
> performance.now(); 4038.2319370044793 > Date.now() 1386797626201
此時(shí)間值還具有不受時(shí)鐘時(shí)間偏差或調(diào)整所影響這一優(yōu)勢。您還可以查看 What Time Is It Test Drive 以了解高解析度時(shí)間的使用。
您可以使用以下接口來檢索在調(diào)用時(shí)記錄的一系列性能指標(biāo)。使用startTime和duration以及該指標(biāo)提供的任何其他屬性,您可以獲取一個(gè)頁面性能(等同于客戶實(shí)際使用過程的性能)的端到端時(shí)間線視圖。
PerformanceEntryList getEntries(); PerformanceEntryList getEntriesByType(DOMString entryType); PerformanceEntryList getEntriesByName(DOMString name, optional DOMString entryType);
getEntries方法在頁面上返回所有性能指標(biāo),而其他方法會(huì)基于名稱或類型返回特定的項(xiàng)目。我們期望大部分開發(fā)人員在所有指標(biāo)列表上僅使用JSON stringify,并將結(jié)果發(fā)送到他們的服務(wù)器進(jìn)行分析,而不是在客戶端進(jìn)行分析。
讓我們來進(jìn)一步了解各個(gè)不同的性能指標(biāo):導(dǎo)航、資源、標(biāo)記和度量。
導(dǎo)航定時(shí)
導(dǎo)航定時(shí)接口為導(dǎo)航到您的 Web 應(yīng)用程序的每個(gè)階段提供精確的時(shí)間度量。 導(dǎo)航定時(shí) L1 規(guī)范已經(jīng)作為一項(xiàng) W3C 推薦發(fā)布,受 IE9 以及后續(xù)版本、Chrome 28 和 Firefox 23 的完全支持。 導(dǎo)航定時(shí) L2 規(guī)范是首份公開工作草案,受到 IE11 支持。
利用導(dǎo)航定時(shí),開發(fā)人員不僅可以獲取精確的端到端頁面加載時(shí)間,包括從服務(wù)器獲取頁面所用時(shí)間,而且還可以獲取在每個(gè)網(wǎng)絡(luò)和 DOM 處理階段所花費(fèi)時(shí)間的明細(xì):unload(卸載)、redirect(重定向)、app cache(應(yīng)用緩存)、DNS、TCP、request(請求)、response(響應(yīng))、DOM processing(DOM 處理)以及 load event(加載事件)。下面的腳本使用導(dǎo)航定時(shí) L2 來獲取該詳細(xì)信息。此指標(biāo)的條目類型為 “navigation”,而名稱為 “document”。請?jiān)? IE Test Drive 網(wǎng)站上查看 導(dǎo)航定時(shí)的演示。
<!DOCTYPE html> <html> <head></head> <body> <script> function sendNavigationTiming() { var nt = performance.getEntriesByType('navigation')[0]; var navigation = ' Start Time: ' + nt.startTime + 'ms'; navigation += ' Duration: ' + nt.duration + 'ms'; navigation += ' Unload: ' + (nt.unloadEventEnd - nt.unloadEventStart) + 'ms'; navigation += ' Redirect: ' + (nt.redirectEnd - nt.redirectStart) + 'ms'; navigation += ' App Cache: ' + (nt. domainLookupStart - nt.fetchStart) + 'ms'; navigation += ' DNS: ' + (nt.domainLookupEnd - nt.domainLookupStart) + 'ms'; navigation += ' TCP: ' + (nt.connectEnd - nt.connectStart) + 'ms'; navigation += ' Request: ' + (nt.responseStart - nt.requestStart) + 'ms'; navigation += ' Response: ' + (nt.responseEnd - nt.responseStart) + 'ms'; navigation += ' Processing: ' + (nt.domComplete - nt.domLoading) + 'ms'; navigation += ' Load Event: ' + (nt.loadEventEnd - nt.loadEventStart) + 'ms'; sendAnalytics(navigation); } </script> </body> </html>
通過查看每個(gè)網(wǎng)絡(luò)階段所用的詳細(xì)時(shí)間,您可以更好地診斷并修復(fù)您的性能問題。例如,如果您發(fā)現(xiàn)重定向時(shí)間很長,則可以考慮不使用重定向,如果 DNS 時(shí)間很長,則使用 DNS 緩存服務(wù),如果請求時(shí)間過長,則可以使用距離您的用戶更近的 CDN,或者如果響應(yīng)時(shí)間過長,則可以使用 GZip 壓縮您的內(nèi)容。請觀看 視頻了解改進(jìn)網(wǎng)絡(luò)性能的提示和竅門。
兩個(gè)導(dǎo)航定時(shí)規(guī)范版本的主要區(qū)別在于訪問定時(shí)數(shù)據(jù)的方式以及度量時(shí)間的方式。L1 接口定義了 performance.timing
對象下的這些屬性,從
1970 年 1 月 1 日開始以毫秒講。L2 接口允許使用性能時(shí)間線方法檢索相同的屬性,使得這些屬性可以更易于放置到時(shí)間線視圖中,并利用高解析度的計(jì)時(shí)器記錄這些屬性。
在導(dǎo)航定時(shí)前,開發(fā)者通常會(huì)通過在文檔的頭部編寫 JavaScript(如下面的代碼示例所示),來嘗試度量頁面加載性能。請?jiān)?IE Test Drive 網(wǎng)址查看此方法的 演示。
<!DOCTYPE html> <html> <head> <script> var start = Date.now(); function sendPageLoad() { var now = Date.now(); var latency = now - start; sendAnalytics('Page Load Time: ' + latency); } </script> </head> <body onload='sendPageLoad()'> </body> </html>不過,此方法不會(huì)準(zhǔn)確度量頁面加載性能,因?yàn)樗粫?huì)包括從服務(wù)器獲取頁面的時(shí)間。另外,在文檔的頭部運(yùn)行 JavaScript 通常是比較差的性能模式。
資源定時(shí)
資源定時(shí)提供在頁面中獲取資源的精確定時(shí)信息。與導(dǎo)航定時(shí)相似,資源定時(shí)提供有關(guān)重定向、DNS、TCP、請求和已獲取資源的響應(yīng)階段的詳細(xì)定時(shí)信息。資源定時(shí)規(guī)范已經(jīng)作為 W3C 備選推薦發(fā)布,IE10 和 Chrome 30 及其后續(xù)版本均提供支持。
以下的示例代碼使用
getEntriesByType
方法獲取以 <img> 元素開頭的所有資源。資源的輸入類型為 “resource”,名稱則為該資源的已解析 URL。請?jiān)贗E Test Drive 網(wǎng)址查看資源定時(shí)的演示。<!DOCTYPE html> <html> <head> </head> <body onload='sendResourceTiming()'> <img src='http://some-server/image1.png'> <img src='http://some-server/image2.png'> <script> function sendResourceTiming() { var resourceList = window.performance.getEntriesByType('resource'); for (i = 0; i < resourceList.length; i++) { if (resourceList[i].initiatorType == 'img') { sendAnalytics('Image Fetch Time: ' + resourceList[i].duration); } } } </script> </body> </html>出于安全考慮,跨域資源僅顯示他們的開始時(shí)間和持續(xù)時(shí)間;詳細(xì)的定時(shí)屬性將設(shè)置為零。這有助于避免統(tǒng)計(jì)指紋的問題,這種情況下,有人可能會(huì)通過查看詳細(xì)的網(wǎng)絡(luò)時(shí)間來確認(rèn)某個(gè)資源是否在您的緩存中,通過這種方法來嘗試確定您在某個(gè)組織中的成員身份??缬蚍?wù)器如果希望與您共享定時(shí)數(shù)據(jù),則它將會(huì)發(fā)送
timing-allow-origin
HTTP 頭。用戶定時(shí)
用戶定時(shí)提供有關(guān)在應(yīng)用程序中執(zhí)行腳本、完成導(dǎo)航定時(shí)以及資源定時(shí)的詳細(xì)定時(shí)信息,將提供詳細(xì)的網(wǎng)絡(luò)定時(shí)信息。用戶定時(shí)允許您在與您的網(wǎng)絡(luò)定時(shí)數(shù)據(jù)相同的時(shí)間線視圖中顯示腳本定時(shí)信息,從而全面而充分了解您的應(yīng)用性能。用戶定時(shí)規(guī)范已經(jīng)作為 W3C 備選推薦發(fā)布,IE10 和 Chrome 30 及其后續(xù)版本均提供支持。
用戶定時(shí)接口定義了兩個(gè)用于度量腳本定時(shí)的指標(biāo):標(biāo)記和度量。標(biāo)記代表在您的腳本執(zhí)行期間在某個(gè)指定時(shí)間點(diǎn)的高解析度時(shí)間戳。度量表示兩個(gè)標(biāo)記之間的差別。
以下方法可以用于創(chuàng)建標(biāo)記和度量:
code_snippet_id="138881" snippet_file_name="ptcms_1388645543_5.js">void mark(DOMString markName); void measure(DOMString measureName, optional DOMString startMark, optional DOMString endMark);您一經(jīng)向您的腳本添加了標(biāo)記和度量,則您可以用
getEntry
、getEntryByType
或getEntryByName
方法來檢索定時(shí)數(shù)據(jù)。標(biāo)記輸入類型為 “mark”,度量輸入類型為 “measure”。下面的示例代碼使用標(biāo)記和度量方法,來度量執(zhí)行 doTask1() 和 doTask2() 方法所花費(fèi)的時(shí)間量。請?jiān)?IE Test Drive 網(wǎng)址查看用戶定時(shí)演示。
<!DOCTYPE html> <html> <head> </head> <body onload='doWork()'> <script> function doWork() { performance.mark('markStartTask1'); doTask1(); performance.mark('markEndTask1'); performance.mark('markStartTask2'); doTask2(); performance.mark('markEndTask2'); performance.measure('measureTask1', 'markStartTask1', 'markEndTask1'); performance.measure('measureTask2', 'markStartTask2', 'markEndTask2'); sendUserTiming(performance.getEntries()); } </script> </body> </html>感謝 W3C Web 性能工作小組中的每一位成員為設(shè)計(jì)這些接口所提供的幫助,同時(shí)也感謝瀏覽器供應(yīng)商迅速實(shí)施這一接口,并認(rèn)真觀察該接口的互操作性。利用這些接口,Web 開發(fā)者可以真正開始評(píng)測并了解可以從哪些方面著手來改進(jìn)他們的應(yīng)用的性能。來自:MSDN IEBlogs
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
------分隔線----------------------------------分隔線----------------------------主站蜘蛛池模板: 操操操网| 99久久99| 欧美日韩中文在线 | a毛片免费 | 亚洲一区在线免费观看 | 国产精品久久久久久久 | 美日韩中文字幕 | 黄大片| 亚洲自拍偷拍视频 | 免费看成人吃奶视频在线 | 成人自拍视频在线 | 午夜小影院 | wwwav在线播放| 无码精品一区二区三区免费视频 | 麻豆国产在线 | 日韩国产欧美一区二区 | 成人天堂资源www在线 | 欧美群妇大交群中文字幕 | 亚洲国产成人精品女人久久久 | 国产精品久久99 | 国产在线一区二区三区 | 国产伦精品一区 | 国产中文字幕一区二区三区 | 午夜在线小视频 | 欧美性天天影院 | 亚洲乱码一区二区 | 国产精品一区二区三区四区在线观看 | 综合网视频 | 经典一区二区 | 国产日韩一区二区三区 | 国产福利久久 | 亚洲一区二区三区免费视频 | 黄色免费看网站 | 久久福利精品 | 男人操女人免费网站 | 国产精品一区二区三 | 国产精品久久久久久久久免费看 | 国产精品午夜一区二区欲梦 | 国产黄色在线网站 | 久久久久国产精品免费免费搜索 | 国产一区二区视频在线播放 |欄目熱點(diǎn)
- 【燃爆寧波!】CCF算法大會(huì)落幕:青年激揚(yáng)算法,大咖論劍未來!
- 跨越速運(yùn)再奪中國零擔(dān)三甲!連續(xù)四年霸榜的密碼曝光
- 抖音有效粉絲500個(gè)怎么買(個(gè)人分享)
- 2025免費(fèi)Web 應(yīng)用防火墻 -- 雷池WAF
- 降低安全門檻!雷池WAF推出開源版MCP服務(wù),AI賦能運(yùn)維
- 第三屆OpenHarmony技術(shù)大會(huì)星光璀璨,致謝社區(qū)貢獻(xiàn)者
- 降低制造業(yè)物流成本,跨越速運(yùn)交出“跨越式”答卷
- 第三屆OpenHarmony技術(shù)大會(huì)應(yīng)用開發(fā)工程技術(shù)分論壇成功舉行