各位同仁,下午好!
如今, 我们将焦点汇聚于一个在现代网络应用里极具重要性的议题: 全栈性能监控, 特别是在生产环境之时, 怎样能够高效地收集以及上报长任务(Long Task)。鉴于用户对于网络应用体验需求的持续提升, 应用的响应速度以及流畅程度便成了用以衡量产品质量的核心指标。其中, 长任务乃是致使页面出现卡顿、交互产生延迟、用户体验遭受损害的主要原因之一。
作为开发者, 我们常在本地开发环境用强大性能分析工具, 像 的面板, 去定位、优化性能瓶颈。可是, 生产环境复杂, 用户设备多样, 网络状况不可预测, 这致使本地测试结果常不能完全代表真实用户体验。所以, 实施生产环境的真实用户监控, 也就是RUM, 变得极其重要。
长任务的监控, 是RUM策略里绝对不能缺少的一部分, 它能够帮我们找出本地很难重现的性能问题, 还可以给出靠数据驱动的决策依据, 以此来指引我们开展更具针对性的优化。
一、 理解长任务:为什么它如此重要?
在全面深入到技术细节的前面那部分之前, 我们首要而首先要切实明确究竟什么才算是长任务, 以及这个长任务为什么会对用户体验形成严重的那种威胁。
1.1 浏览器的主线程与事件循环
现代浏览器采用的是多进程多线程架构, 然而其执行, 还有大部分的DOM操作、CSS样式计算、布局以及绘制, 都是在主线程上发生的, 主线程乃是浏览器UI渲染以及用户交互响应的核心。
采取事件循环机制, 也就是 Event Loop, 来处理任务的是浏览器。当主线程处于空闲状态的时候, 它会从任务队列那么队列也叫 Queue或是取任务和 Task Queue呢, 拿出任务进而予以执行。而这些任务有可能涵盖: