报表空白通常不是「打不开」,而是数据那一路没回来
先说清楚这个空白到底是什么:这类广告投放后台的报表页面,不是一次性把所有数据从服务器整块拿回来再渲染,而是把「今日消耗」「点击」「转化」「趋势图」拆成好几个独立的异步请求,一批一批地去后台要数据,页面骨架先出来,图表和数字再一块一块地填进去。这是为什么会这样,也是问题的关键:只要负责某一张图或某一个指标的那一批请求没有在网络这边成功往返,页面不会整体报错,也不会跳出一个明显的错误提示,它只会把那一小块留白,其它区域该显示的照样显示。结果就是你看到的现象——页面在、按钮能点、别的模块也有数字,唯独某几张图表或某个报表模块空着,看起来非常像「账户没有数据」或者「账户出问题了」,其实只是众多批次请求里的一批没有跑通。
为什么这类后台特别容易出现这种局部空白
为什么恰恰是这一类后台容易出现这种情况,而不是随便一个网页都这样:一是这类系统的报表页面本身依赖的接口数量多、耗时长,一旦其中链路变慢或被打断,先到先显示、没到就空着的设计会把问题直接呈现成「局部空白」而不是「整页失败」;二是上传素材走的是大文件、长时间保持连接的通道,跟看报表用的短请求走的不是同一种连接方式,两者对网络稳定性的要求不一样,所以你可能发现报表能看但传素材传不上去,或者反过来;三是不少这类后台把图片、脚本、图表渲染用的静态资源放在跟主域名不同的另一个主机上加载,主页面能打开只说明主域名这一条通了,静态资源所在的那台主机没通,图表照样出不来。这三点合在一起,就是「登录得进去、页面看得到、图表却是空的」这个现象背后真正在发生的事情。
快速分辨两种成因的方法
遇到这种情况,第一件事不是刷新,而是做一个十秒钟就能分清原因的小测试:打开浏览器的开发者工具,切到网络请求那一栏,重新加载一次报表页面,看那些用来拿图表数据的请求,状态是「一直转、迟迟没有返回」,还是「很快返回但是报错或者返回的内容是空的」。如果是前一种——请求发出去了,但半天都收不到回应,说明是链路层面走不通或者走得很慢,多半跟当前访问路径有关;如果是后一种——请求很快就有响应,只是响应内容本身报错或为空,那通常是账户权限、数据范围选择或者账号本身的问题,跟网络没有太大关系。这一步基本就能把「网络原因」和「账户本身原因」分开,避免两种问题混在一起排查,白白走弯路。
另外一个很好用的对照测试是,同时试一下报表页面之外的其它功能,比如上传一张素材图片、或者进入设置页面改一个字段。如果报表空白、但上传素材和其它页面操作都正常,说明主链路是通的,问题更可能出在承载图表数据或者静态资源的那一部分单独没通;如果连上传素材这种大文件长连接的操作也经常卡住或者失败,那说明当前网络路径对长时间保持的连接不友好,是更底层的连通性问题,而不是某个具体接口坏了。这两个测试放在一起看,基本可以定位到问题出在哪一层。
按顺序处理:从刷新到换路径
确认现象之后,建议按下面的顺序一步步排查,而不是同时改好几个地方:
- 先刷新页面并稍等几秒,很多时候只是某一批异步请求超时了一次,刷新会重新触发那一批请求,图表可能自己就出来了。
- 打开开发者工具的网络面板,按前面说的方法区分是「长时间无响应」还是「快速返回但报错/为空」,先确定问题类型。
- 切换一下报表的时间范围或者筛选条件,如果换一个时间段图表能出来,说明后台服务本身是通的,只是你选的那个数据范围恰好没有返回成功。
- 试一次素材上传或者其它需要长连接的操作,对照它是否也异常,用来判断问题是不是集中在长连接这一类请求上。
- 如果怀疑是网络链路的问题,换一条更稳定、更少中间环节的访问路径重新进入后台,再重复第二步的检查,看那批原来卡住的图表请求这次能不能正常返回。
- 如果换路径之后图表恢复正常,基本可以确定原来的问题出在访问路径不稳定,导致负责取数的那批接口时常掉线或超时,而不是账户本身没有数据。
报表是分很多批异步取数拼出来的,某几批失败只会表现为数字为空而不是报错。整机走同一个出口,可以先排除「不同批次各走各路」这个变量,再去看是不是账户本身没有数据。
安卓与 Windows 客户端已上线,macOS 与 Linux 开发中。iPhone 暂无原生客户端。出口服务器的访问日志是关闭状态;会话记录表里没有目标地址、域名或 URL 字段。注册即可使用永久免费套餐,按月发放流量额度。客户端在连上之后会做一次真实探测,探测不通就不显示已连接。
据 IETF RFC 6455(WebSocket 协议)所定义,实时推送用的长连接要先经由一次 HTTP 请求完成升级握手;页面本身加载出来了,不代表这次升级也成功了。
常见问题
为什么报表图表空白,但页面其它地方都能正常显示?
因为这类后台的报表数据是靠一批一批的异步接口分开去取的,页面骨架和大部分内容先加载出来,只有负责某个图表的那一批请求没有成功返回时才会留白,页面整体不会因此报错,所以看起来像是局部数据缺失而不是系统故障。
是不是账户被限制或者没有投放数据才会这样?
不一定,很多时候账户本身在正常花钱投放,问题出在取数据的那批异步接口没有跑通,而不是账户没有数据,判断方法是打开开发者工具看那批请求到底有没有返回,返回了就基本能排除账户层面的原因。
为什么有时候报表能看,但上传广告素材却传不上去?
因为看报表用的是很多短小的异步请求,上传素材走的是大文件、长时间保持的连接,两者对网络稳定性的要求不同,一条路径可能刚好能撑住短请求却撑不住长连接,所以两边表现会不一致。
换个网络环境重新登录后台,图表就恢复了,这说明什么?
说明原来卡住的并不是账户或数据本身,而是负责取图表数据的那批接口在原来的访问路径上时常超时或中断,换一条更稳定的路径之后这批请求能正常来回,图表自然就显示出来了。
为什么刷新几次之后图表偶尔会自己恢复?
因为报表页面依赖的多批异步请求本身就存在各自独立的成功率,某一次刷新恰好让之前失败的那一批重新发出并成功返回,图表就补上了,这也说明问题更像是偶发的取数失败,而不是账户被整体拦截。
图表长期空白但从来没有弹出任何错误提示,是正常的吗?
是符合这类系统设计逻辑的,因为局部接口失败时页面不会整体报错,只会把对应区域留空,所以没有错误提示本身不能证明数据是对的,还是要去看网络请求的实际返回情况才能判断。