#性能优化-白屏度量 阿里是怎么监控前端白屏的?,学习网页前端开发

这两者方向不同,资源错误影响面较多,且视情况而定,故不在下面方案考虑范围内。为此,参考了网上的一些实践加上自己的一些调研,大概总结出了一些方案:

一、onerror + DOM 检测

原理很简单,在当前主流的 SPA 框架下,DOM 一般挂载在一个根节点之下(比如 <div id="root"></div> )发生白屏后通常现象是根节点下所有 DOM 被卸载,该方案就是通过监听全局的 onerror 事件,在异常发生时去检测根节点下是否挂载 DOM,若无则证明白屏。我认为是非常简单暴力且有效的方案。但是也有缺点:其一切建立在 白屏 === 根节点下 DOM 被卸载 成立的前提下,实际并非如此比如一些微前端的框架,当然也有我后面要提到的方案,这个方案和我最终方案天然冲突。

二、Mutation Observer Api

不了解的可以看下文档[1]。其本质是监听 DOM 变化,并告诉你每次变化的 DOM 是被增加还是删除。为其考虑了多种方案:

  1. 搭配 onerror 使用,类似第一个方案,但很快被我否决了,虽然其可以很好的知道 DOM 改变的动向,但无法和具体某个报错联系起来,两个都是事件监听,两者是没有必然联系的。

  2. 单独使用判断是否有大量 DOM 被卸载,缺点:白屏不一定是 DOM 被卸载,也有可能是压根没渲染,且正常情况也有可能大量 DOM 被卸载。完全走不通。

  3. 单独使用其监听时机配合 DOM 检测,其缺点和方案一一样,而且我觉得不如方案一。因为它没法和具体错误联系起来,也就是没法定位。当然我和其他团队同学交流的时候他们给出了其他方向:通过追踪用户行为数据来定位问题,我觉得也是一种方法。

一开始我认为这就是最终答案,经过了漫长的心里斗争,最终还是否定掉了。不过它给了一个比较好的监听时机的选择。

三、饿了么-Emonitor 白屏监控方案

饿了么的白屏监控方案,其原理是记录页面打开 4s 前后 html 长度变化,并将数据上传到饿了么自研的时序数据库。如果一个页面是稳定的,那么页面长度变化的分布应该呈现「幂次分布」曲线的形态,p10、p20 (排在文档前 10%、20%)等数据线应该是平稳的,在一定的区间内波动,如果页面出现异常,那么曲线一定会出现掉底的情况。

其他

其他都大同小样,其实调研了一圈下来发现无非就是两点

  1. 监控时机:调研下来常见的就三种:

  2. onerror

  3. mutation observer api

  4. 轮训

  5. DOM 检测:这个方案就很多了,除了上述的还可以:

  6. elementsFromPoint api 采样

  7. 图像识别

  8. 基于 DOM 的各种数据的各种算法识别

改变方向


几番尝试下来几乎没有我想要的,其主要原因是准确率 – 这些方案都不能保证我监听到的是白屏,单从理论的推导就说不通。他们都有一个共同点:监听的是’白屏’这个现象,从现象去推导本质虽然能成功,但是不够准确。所以我真正想要监听的是造成白屏的本质。

那么回到最开始,什么是白屏?他是如何造成的?是因为错误导致的浏览器无法渲染?不,在这个 spa 框架盛行的现在实际上的白屏是框架造成的,本质是由于错误导致框架不知道怎么渲染所以干脆就不渲染。由于我们团队 React 技术栈居多,我们来看看 React 官网的一段话[2]:

React 认为把一个错误的 UI 保留比完全移除它更糟糕。我们不讨论这个看法的正确与否,至少我们知道了白屏的原因:渲染过程的异常且我们没有捕获异常并处理。

反观目前的主流框架:我们把 DOM 的操作托管给了框架&#

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 白屏时间是指用户在打开网页后,直到看到页面内容之间的时间间隔。要减少白屏时间,可以采用以下方法:1.减少图像文件的大小;2.使用 CDN 加速;3.优化 JavaScript 和 CSS 代码;4.使用浏览器缓存;5.对网页进行懒加载等。 ### 回答2: 前端性能优化是指通过一系列的调整和优化,提高网页的加载速度和响应速度,提升用户体验。其中减少白屏时间是一项重要的优化目标。 白屏时间是指页面打开后用户看到内容的时间间隔。通常情况下,用户打开页面后,由于网络请求、资源加载等原因,会有一段时间页面处于空状态,这段时间即为白屏时间。减少白屏时间可以提升用户的感知速度,使用户更快地看到页面内容。 减少白屏时间的方法有以下几种: 1. 减少页面的加载时间:通过优化页面结构、合理使用CSS和JavaScript等前端技术,减少页面的大小和请求个数,从而加快页面加载速度。 2. 预加载关键资源:提前加载页面需要的关键资源,比如CSS、JavaScript、图片等,可以通过使用预加载的方式,使这些资源在页面打开前就开始加载,从而减少白屏时间。 3. 使用缓存:利用浏览器的缓存机制,将页面需要的静态资源缓存到本地,下次访问时可以直接从缓存中获取,减少网络请求的时间。 4. 懒加载:仅加载当前可见区域内的内容,延迟加载其他内容,在用户滚动页面时再加载。这样可以减少页面首次加载的资源量,提高页面加载速度。 5. 提前获取数据:如果页面需要从后端获取数据,可以在页面加载时就开始请求数据,然后在渲染页面时直接使用已获取的数据,减少用户等待数据响应的时间,缩短白屏时间。 综上所述,通过适当的优化措施,可以有效减少白屏时间,提升前端性能,提高用户体验。 ### 回答3: 前端性能优化是指通过各种方法和技术来提高网页加载和交互的速度和效率,其中之一就是减少白屏时间。 白屏时间是指用户在打开网页时,页面内容出现之前的等待时间。在这个过程中,用户会感觉到页面没有任何反应,导致用户体验下降。 为了减少白屏时间,我们可以采取以下几种策略: 1. 压缩和合并资源文件:将CSS和JavaScript文件进行压缩和合并,减少HTTP请求和传输时间,从而提高加载速度。 2. 使用浏览器缓存:合理设置缓存策略,使相同的资源可以从缓存中获取,避免重复请求,减少加载时间。 3. 异步加载资源:将非关键资源(如广告、统计代码等)的加载放在页面内容加载完毕后进行,以保证页面内容的快速呈现。 4. 延迟加载图片:将页面上的图片设置为延迟加载,只有在用户滚动到可见范围时才进行加载,避免一次性请求过多的图片,提高加载速度。 5. 使用CDN加速:将静态资源部署到全球各地的CDN节点上,利用就近访问的优势,减少网络延迟,加快资源加载速度。 6. 懒加载:只加载当前可见区域的内容,将其他内容延迟加载,延迟加载可以提高页面的加载速度,减少白屏时间。 7. 优化首屏渲染:将关键资源和内容放在页面的最前面,提高首屏的加载速度,使用户能够更快地看到页面内容。 通过以上的优化策略,可以有效地减少白屏时间,提高网页的加载速度和用户的体验。但需要注意的是,在优化的过程中,要综合考虑兼容性、用户体验等因素,避免影响网页的功能和可用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值