公司要求检查APP内嵌的H5前端性能,搜了下做个总结。
使用appium进入指定页面,然后切换webview
如果无法切换,则需要研发提供debug包。
然后执行js脚本。
resource_details = driver.execute_script('return window.performance.getEntries();')
page_details = driver.execute_script('return window.performance.timing;')
返回页面静态资源的性能list和页面的性能list。
目前参考别人的,关注如下几点
# 【重要】页面加载完成的时间
# 【原因】这几乎代表了用户等待页面可用的时间
loadPage = page_details['loadEventEnd'] - page_details['navigationStart']
page_result['页面加载完成的时间'] = loadPage
# 【重要】解析DOM树结构的时间
# 【原因】反省下你的DOM树嵌套是不是太多了!
domReady = page_details['domComplete'] - page_details['responseEnd']
page_result['解析DOM树结构的时间'] = domReady
# 【重要】重定向的时间
# 【原因】拒绝重定向!
redirect = page_details['redirectEnd'] - page_details['redirectStart']
page_result['重定向的时间'] = redirect
# 【重要】DNS查询时间
# 【原因】DNS预加载做了么?页面内是不是使用了太多不同的域名导致域名查询的时间太长?
lookupDomain = page_details['domainLookupEnd'] - page_details['domainLookupStart']
page_result['DNS查询时间'] = lookupDomain
# 【重要】读取页面第一个字节的时间
# 【原因】这可以理解为用户拿到你的资源占用的时间,加异地机房了么,加CDN处理了么?加带宽了么?加CPU运算速度了么?
ttfb = page_details['responseStart'] - page_details['navigationStart']
page_result['读取页面第一个字节的时间'] = ttfb
# 【重要】内容加载完成的时间
# 【原因】页面内容经过gzip压缩了么,静态资源css / js等压缩了么?
request = page_details['responseEnd'] - page_details['requestStart']
page_result['内容加载完成的时间'] = request
# 【重要】执行onload回调函数的时间
# 【原因】是否太多不必要的操作都放到onload回调函数里执行了,考虑过延迟加载、按需加载的策略么?
loadEvent = page_details['loadEventEnd'] - page_details['loadEventStart']
page_result['执行onload回调函数的时间'] = loadEvent
# DNS缓存时间
appcache = page_details['domainLookupStart'] - page_details['fetchStart']
page_result['DNS缓存时间'] = appcache
# 卸载页面的时间
unloadEvent = page_details['unloadEventEnd'] - page_details['unloadEventStart']
page_result['卸载页面的时间'] = unloadEvent
# TCP建立连接完成握手的时间
connect = page_details['connectEnd'] - page_details['connectStart']
page_result['TCP建立连接完成握手的时间'] = connect