前端性能分析和错误收集

简介: 前端是直面用户的,产品体验尤为重要,而页面性能则是一个非常重要的指标。如果用户打开页面在2秒以内是比较优秀的,5秒以内是可以忍受的,超过10秒用户一般会选择直接关闭页面。而性能的分析和错误的收集可以帮助我们优化产品应用,对于提升用户体验有极大帮助。

1.性能分析

既然是性能分析,那么我们首先要了解各个性能指标。根据W3C Navigation Timing Level 2的规范标准,可以通过 window.performance.timing 获取具体资源的详细耗时信息。

1665980189164_82A29B02-1619-43fc-81FC-593E67B0A0ED.png

1665977075824_EC1CE4BA-5289-407e-BA7C-D77B6FC7498B.png

1.1、首字节(TTFB)

TTFB 即 Time To First Byte,指用户首次请求web服务器和服务器响应到终端用户之间这段时间。

1.2、白屏时间

浏览器开始显示内容的时间。因为浏览器在不断接收和处理其余内容的同时,呈现引擎会将部分内容解析并显示出来,并不必等到整个 HTML 文档解析完毕之后才去开始构建呈现树和设置布局。所以我们通常可以认为是浏览器解析完 <head> 的时刻或开始渲染 <body> 标签就是页面白屏结束的时间。

performance.timing.domLoading - performance.timing.navigationStart

1.3、首屏时间

用户看到第一屏页面所消耗的时间。对于用户体验来说,这是一个非常重要的体验因素。我们可以以白屏结束时间作为首屏开始时间,通过onload的触发来作为首屏结束时间。(不能通过DocumentContentLoaded,因为他是在DOM树加载完之后触发,但图片等静态资源还没有完成请求。)

<script>
  window.onload = function(){
    const onLoadTime = new Date().getTime();
    const navigationStartTime = window.performance.timing.navigationStart;
    const firstScreenTime = onLoadTime - navigationStartTime;
    console.log('首屏时间-----', firstScreenTime);
  }
</script>

还可以通过MutationObserver 来计算首屏时间, 他提供了监视对DOM树所做更改的能力。

1665993514493_E4292FB5-0C67-4726-B9DA-86B44444DCFC.png

<script>
  // 选择监听变动的节点
  const bodyDom = document.body || document;
  // 配置变动条件
  const config = { attributes: true, childList: true, subtree: true };
  // 变动发生后的回调
  const callbackFn = function(mutationsList, observer){
    console.log('节点发生变动时间----', mutationsList, new Date().getTime());
  }
  // 创建实例并传入回调函数
  const observer = new MutationObserver(callbackFn);
  // 开始监听目标节点
  observer.observe(bodyDom, config);
  // 停止监听
  // observer.disconnect();
</script>

1.4、总下载时间

页面所有资源加载完成所的时间。可以通过 window.onload 的触发时间来获取。


2.错误收集

那对于前端来讲,错误往往会阻塞程序运行,给用户极其不好的体验。那么我们可以提前对错误有所准备,第一时间将错误捕获,拿到错误信息并及时做出反应。

2.1、onerror

只需一个方法即可全局捕获运行时错误(包括处理程序中引发的语法错误)普通异步错误,但是不能捕获静态资源加载错误,接口请求错误,Promise错误。

<script>
  window.onerror = function(msg, source, row, col, error){
    console.log('错误信息-----', msg);
    console.log('错误地址-----', source);
    console.log('错误行号-----', row);
    console.log('错误列号-----', col);
    console.log('错误对象-----', error);
  }
</script>
<script>
  // 语法错误
  // const person.name;
  // 异步错误
  // setTimeout(() => {
  //   fn();
  // }, 500)
  // promise错误
  //new Promise((resolve, reject) => { reject('出错啦---') })
</script>


image.png

image.png

image.png

onerror针对跨域脚本的错误捕获需要进行特殊处理, 要对script 脚本设置crossorigin,同时服务器添加 Access-Control-Allow-Origin 以指定允许哪些域的请求访问。

2.2、addEventListener - error

与onerror雷同,但是可以捕获静态资源加载错误

<script>
  window.addEventListener('error', function(event){
    console.log('错误信息-----', event);
  }, true)
</script>

image.png

2.3、addEventListener - unhandledrejection

可以捕获未处理的Promise错误,但是兼容性较差。

<script>
  window.addEventListener('unhandledrejection', function(event){
    console.log('错误信息-----', event);
  }, true);
  new Promise((resolve, reject) => { reject('出错啦---') });
</script>

image.png

2.4、try...catch

只能捕获代码块内的同步执行的错误,不能捕获其他错误。

<script>
  try{
    fn() 
  }catch(error){
    console.log("同步执行错误---", error)
  }
  try{
    setTimeout(() => {
      fn()
    }, 500) 
  }catch(error){
    console.log("异步错误---", error)
  }
  try{
    new Promise((resolve, reject) => { reject('出错啦---') })
  }catch(error){
    console.log("Promise错误---", error)
  }
  try{
    console.123);
  }catch(error){
    console.log("语法错误---", error)
  }
</script>

image.png

image.png


相关文章
|
23天前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
34 1
|
24天前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
23 1
|
30天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
1月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
297 0
|
6月前
|
人工智能 前端开发 搜索推荐
前端技术发展趋势分析与展望
【2月更文挑战第9天】 随着移动互联网的快速发展,前端技术在不断演进,从最初的HTML、CSS到如今的React、Vue等前端框架,技术发展日新月异。本文将从移动端、跨平台、人工智能等多个角度分析前端技术的发展趋势,并展望未来的发展方向。
|
3月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
70 0
|
4月前
|
缓存 监控 前端开发
前端开发中的性能瓶颈分析与优化
【7月更文挑战第27天】前端开发中的性能优化是一个系统工程,需要从多个角度入手,综合运用多种策略。通过减少网络延迟、优化资源加载、优化DOM操作、优化JavaScript执行以及第三方服务优化等措施,可以显著提升前端应用的性能。同时,通过性能监控和调优工具的使用,可以持续监控和优化应用性能,确保用户获得流畅、高效的体验。
|
6月前
|
前端开发 JavaScript Android开发
【Uniapp 专栏】分析 Uniapp 与其他前端框架的异同
【5月更文挑战第16天】Uniapp是一个基于Vue.js的跨平台前端框架,能将代码编译成iOS、Android、H5等多个平台应用,简化跨平台开发。相比React和Angular,Uniapp更适合移动应用,减少平台适配工作。Vue.js的组件化和灵活性在Uniapp中得到延伸,增加了移动端特性。而Flutter性能优越,但学习成本高。开发者应根据项目需求和技术栈选择合适的框架。
184 4
【Uniapp 专栏】分析 Uniapp 与其他前端框架的异同
|
5月前
|
缓存 监控 前端开发
前端性能优化:从系统分析到实践策略
**前端性能优化概述** 本文探讨了前端性能优化的重要性,强调了从整体角度而非仅关注局部优化手段的必要性。作者指出,建立性能评价系统是关键,通过**性能指标**(如FP、FCP、LCP、CLS等)来量化页面性能,然后使用**性能监控**工具收集数据。文章列举了9个关键性能指标,并介绍了如何通过SDK或工具进行数据收集。 在实际操作中,文章提到了**性能优化方法论**,包括了解何时何地出现性能问题,以及如何根据性能指标采取相应优化措施。作者推荐使用Chrome的Lighthouse工具进行性能测试,并讨论了**CDN**、**缓存策略**和**懒加载**作为常见的优化手段。
119 0
|
6月前
|
SQL Oracle 前端开发
Oracle效率分析,Github标星25K+超火的前端实战项目
Oracle效率分析,Github标星25K+超火的前端实战项目
下一篇
无影云桌面