首页 > 其他分享 >可观测性平台-数据洞察(2)-网站性能探究之页面加载时间

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间

时间:2024-01-27 16:05:01浏览次数:23  
标签:count loading resource 洞察 加载 页面 view

声明

首先本文数据均来源于对观测云的观测,欢迎和我一起折腾。

如果你也对这部分内容感兴趣,欢迎私信。

写在前面的话

本文不设预期,写到哪里,聊到哪里

名词解释

目录

  • 气泡图:
  • view_resource_count:
  • loading_time:
  • view_path_group
  • resource_size

气泡图

气泡图可用于展示三个变量之间的关系,与散点图类似,分为横轴和纵轴,并加入表示大小的变量进行对比。表示因变量随自变量而变化的大致趋势,由此趋势可以选择合适的函数进行经验分布的拟合,进而找到变量之间的函数关系。可用来观察数据的分布和聚合情况。

view_resource_count

每次页面加载时请求的资源个数

loading time

页面加载时间,需要考虑页面加载的方式:

initial_load 模式下计算公式:

① loadEventEnd - navigationStart
② 页面首次无活动时间 - navigationStart

route_change 模式下计算公式:

用户点击时间 - 页面首次无活动时间
页面首次无活动时间:页面超过 100ms 无网络请求或 DOM 突变

思考与探究

按照之前常见思路,是探究页面资源加载数量、页面加载时间的关系。

  • x:R::view:(AVG(view_resource_count)) { view_resource_count <= '50' } BY view_path_group
  • y:R::view:(AVG(loading_time)) { loading_time <= '3000000000' } BY view_path_group
  • size:R::view:(COUNT(userid)) BY view_path_group

使用avg而不是p75/p90解释

单个页面加载的资源的数量基本是固定的

图如下

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据

分析

为什么最左侧的view_resource_count==0?

view_resouce_count==0,意味着使用了缓存,也就是使用了客户端文件。 大家可以看到当使用了缓存时,页面的loading time的下限更靠下,也就是页面加载时间更短。(此处如果用箱线图可能效果更好),如果我们让view_resouce_count==0,单独来看一下的话:

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_02

也就是即便使用本地缓存文件,页面加载时间也存在一定的分布。这里我们暂时不能推测出最大的影响因素。

我们先排除view_resource_count==0的影响,即:x:R::view:(AVG(view_resource_count)) { view_resource_count <= '50' and view_resource_count != '0' } BY view_path_group

这里因为有多款应用,我们只考虑saas版本,即需要把appid限定即可

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_03

这样来看x增大y也增大的趋势就比较明显,从图中能明显看出访问人数比较多的页面分别有

  • /login/pwd 页面,500ms
  • /redirct/login 页面,976ms
  • / 页面,1.44s
  • /scene/dashboard/list 页面,1.19
  • /log/all页面,1.72s

其中log/login/dashboard这几个点之间的面积差别不大,也就是访问者数量差别不大,但页面性能相差确有好几倍。为了更直观的看到x与y的趋势对比,我们将x轴定位到view_resouce_count<30

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_04

右侧仍旧有比较大的空白,我们将view_resouce_count调整为80

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_05

当然这里我们也能根据已有信息直接查询view_resouce_count的一个平均值 为了更好的观测,我们将view_resouce_count设置为40

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_06

从上面的介绍看出,首次加载和页面切换的loading time是不一样的,众所周知的是,loading time对于首次加载更为重要,所以这里只关注首次加载的情况。

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_页面加载_07

由上图看出,明显view_resource_count在0-10之间的数据少了,可以推测是很多页面切换时,加载了少量的资源,常见的页面性能提升大多是把公共资源合并实现1+1《2的加载时间。这里禁不住好奇,如果只是看页面切换的效果,会有哪些情况呢? 这里将view_loading_type切换为route_change

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_页面加载_08

从这幅图上看,似乎x与y之间,更加呈现线性关系。 同时我们仍旧发现/log /scene/dashboard/list这几个页面依旧存在,也就是说访问人数多的页面是多是切换而来。

resouce_size

resouce_size,资源大小,默认单位:byte

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_页面加载_09

图上展示size大小变化不大,等同于其实页面传输的数据量大小变化不大。

当资源大小变化不大,但是对加载资源的数量相对敏感时,合并资源就成了一个比较合理的优化手段。此时我同时看会话停留时间:

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_页面加载_10

当会话时长变化不大,但是对加载资源的数量相对敏感时,合并资源就成了一个比较合理的优化手段。

问题来了,合并哪些页面呢?一般是从页面停留时间较长但加载时间较长、页面访问频率较高但加载较长来看,刚才已经看过页面停留时间相对不如页面访问人数更加敏感。也就是我们要将访问次数多,但是访问资源也多的页面进行拆分,

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_11

也就是说,我们需要将右侧框内的文件,平移到左侧框内 其中包含:

  • /log/all
  • /dashboard/list
  • /tracing/service/table
  • /object/admin/host可能将x轴缩小,能看的更加直观一些。

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_12

也就是A部分的访问频次较多但加载性能在1.5上下,移动到500-1s之间。即将资源加载数量由10 降低到5。 由于目前没有线性公式,但如果将x轴缩小,查看效果应该更加明显,这里先调整为12,效果如下:

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_13

由此看出调整为8可能效果会更好

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_14

这里有一个比较有意思的点,view_resouce_count一开始用的是avg,如果使用p99会是什么效果呢

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_15

转念一想,loading_time是否也应该取p99

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_16

如果只关注平均或者p99,但是对于主要功能页面,访问的人数自然多,我们如果只看加载的总耗时呢?

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_页面加载_17

这几个页面分别是

  • /scene
  • /log
  • /objectadmin/host
  • /service/table

但这个无异于其实就是比较sum(loading_time)对吧?同步把view_resouce_count也做sum,看一下效果:

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_18

但我们依旧能看出,resouce_count的增多,依旧存在loading time的增多,不过不能给出resouce_count是loading time的直接因果。

推测依旧有其他一个或者多个因素在影响页面加载的性能。我们全部使用p99进行查看

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_加载_19

数据洞察改为均值后的3张图:

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_20

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_21

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_数据_22

可观测性平台-数据洞察(2)-网站性能探究之页面加载时间_前端_23

虽然没有经过相关检验,基本能看出view_resource_count和loading time之间呈现正相关。

如果x轴能够以多个变量的加权值进行计算,比如 sum(resource size)/avg(resource_count)的平均值入手,可能也是一个数据洞察的点。

如果一个前端开发都能花半个小时写出这些内容来,相信热爱折腾的程序员能鼓捣出更多有意思的东西

标签:count,loading,resource,洞察,加载,页面,view
From: https://blog.51cto.com/u_12003135/9443864

相关文章

  • 可观测平台-数据洞察-用户究竟苦等了多久(1)
    本文是可观测平台-数据洞察-用户究竟苦等了多久第一趴,一句话总结:看出研发,特别是前端代码,在请求发起前让用户等待了多久在Saas软件中效率为王,如何提升效率,识别效率卡点,本文给出一条思路。文章目录首先列出一些指标,和指标背后的原理,最后列出如何计算。指标字段类型描述resource_sizen......
  • 洞察驱动增长:数字化转型中的用户行为分析与优化策略
    文末给出一个用户行为分析的案例在数字化转型中,越来越多的企业认识到对用户的实时深入洞察,以及数据资产的沉淀已成为业务增长的重要引擎。用户行为结合场景带来的用户洞察和业务增长带来新的可能,是每一个做管理、营销、运营的人都应该深入了解和探究的。分析用户行为,优化用户体验使......
  • 一对一源码,前端页面权限和按钮权限控制
    一对一源码,前端页面权限和按钮权限控制页面权限是一对一源码后台系统中非常常见的需求,在前端实现页面权限和按钮权限是为了确保用户只能访问其有权访问的页面,并执行其有权执行的操作。本文介绍前端实现页面权限和按钮权限控制的流程和逻辑。1.获取用户当前权限并且存在全......
  • 一对一视频app开发,如何分块加载大文件?
    一对一视频app开发,如何分块加载大文件?后端:使用Koa2实现分块传输首先,在一对一视频app开发中,我们需要设置后端以支持分块传输编码。以下是使用Koa2的示例代码:constKoa=require("koa");constfs=require("fs");constapp=newKoa();app.use(async(ctx)=>......
  • NodeJS Express实现所有页面Http访问重定向跳转为Https
    要在Node.jsExpress中实现所有页面从HTTP访问跳转到HTTPS,你可以使用重定向中间件。以下是一个简单的示例:首先,确保你已经安装了Express和express-redirect中间件。如果没有,你可以通过npm进行安装:npminstallexpressexpress-redirect然后,在你的主应用程序文件(例如app.js)中,引入Expr......
  • 作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察
    缓存池BufferPool机制应用系统分层架构:一个优化策略是将最常访问的数据存放在缓存中,以加快数据访问速度,避免频繁地访问数据库。操作系统:借助缓冲池机制来优化数据访问,从而避免了反复直接访问磁盘的开销,极大地提升了数据访问的速度。缓冲池通过在内存中临时存储最常访问的数据,将频繁......
  • 2024年1月Java项目开发指南15:vue3+AntDesignVue 设计页面
    考虑到有的同学对vue3不熟悉,因此,我把ControlView.vue这个页面清空,我们从0开始写。<templatestyle="width:100%"></template><scriptsetup></script><stylescoped></style>搭建页面的基本框架展开代码后复制你需要的代码。比如我选择上中下这种结构,我就复制上......
  • 图片懒加载
    依赖jquery第一个函数:计算图片是否出现和消失在可视区functionisVisible(ele){leteleTop=ele.offset().top;leteleHeight=ele.outerHeight(true);letwinScrollTop=$(window).scrollTop();letwinHeight=$(window).height();letvisible=......
  • 一招就行—鸿蒙OS 编写第一个页面
    在JavaUI框架中,提供了两种编写布局的方式:在XML中声明UI布局和在代码中创建布局。这两种方式创建出的布局没有本质差别,为了熟悉两种方式,我们将通过XML的方式编写第一个页面,通过代码的方式编写第二个页面。XML编写页面在“Project”窗口,打开“entry>src>main>resources>......
  • Android如何通过按钮实现页面跳转方法
    Hello大家好!我是咕噜铁蛋!在Android应用开发中,页面跳转是一项基本且常见的功能。通过按钮实现页面跳转可以为用户提供更好的交互体验,使应用更加灵活和易用。本文将介绍AndroidStudio中如何通过按钮实现页面跳转的方法,帮助开发者轻松实现这一功能。一、前提准备我们需要具备以下几个......