简介:一起由离线包重构引起的“白屏”等待现象的排查和解决案例

——本文选自《阿里云SRE技术期刊》2021年02月刊

移动端的混合架构模式给 App 开发带来了崭新的空间,通过 H5 构建的业务模块可以实现高效快速的版本迭代,满足多样化的业务需求。为了弥补 H5 技术的部分性能不足,mPaaS 客户端框架为开发者提供了“离线”机制。

开发者在接入 mPaaS H5 容器后,配合 mPaaS 移动发布服务,可以让客户端方便地从本地加载 H5 业务包,极大地提升了 H5 应用的加载效率。需要注意的是,这套离线机制的接入过程必须要严格按照文档来进行,一些细微的错误可能导致离线机制失败,给 H5 应用的加载性能带来影响。

这篇文章将和大家分享一起由离线包重构引起的“白屏”等待现象的排查和解决案例。

1. 问题背景

我们(阿里云金融线 SRE 团队)接到客户的反馈:开发者对所有线上离线包进行了一轮的整合和重构,发版后发现 H5 应用的加载性能出现较大的退化:在网络好的情况下会有一个短暂的“白屏”等待时间,在网络较差的情况下,甚至完全无法完成页面的加载。更详细的信息包括:

1) 前一天晚上在生产环境进行离线包版本更新,发现发布白名单内的用户访问离线包出现性能退化

2) iOS 和 Android 双端均存在这个问题

3) 白名单内共有 20 多个内部用户,非外部用户,对外业务没有实际影响

4) 非白名单内用户访问的还是老版本的离线包,没有出现问题

5) 开发侧的变更内容包括:

a) 全量离线包更新,更新数量大概是60个左右

b) 旧离线包的架构是 1 个公共资源包 + N 个普通资源包

c) 新离线包的架构是 3 个公共资源包 + N 个普通资源包

2. 分析与排查

根据症状 “网络好的情况下会有一个短暂的“白屏”等待时间,网络较差的情况下,甚至完全无法完成页面的加载”,我们首先怀疑的是离线包的“离线”机制失败了,流量 fallback 到了线上资源。推测“白屏”等待时间是 Web 资源网络下载和加载慢导致的,如下图所示:

要验证这个推测,我们需要通过抓取 HTTP 层面的报文来确认这个问题,抓包方法可参考文后资料了解详情[1]。从网络包中我们观察到,每次打开 H5 应用,均存在不同程度的资源文件拉取行为,这些 Web 资源大的有几十 MB,通过网络加载速度较慢,如下图所示:

和客户进一步沟通确认,这部分资源来自于一个新增的公共资源包。根据 mPaaS H5 容器的接入要求,公共资源包的注册需要在容器初始化的时候手动指定,而普通资源包则不需要这样的操作,可参考文后资料了解详情[2],[3]

结合当时的情况(仅进行了离线包的云端重构,新增 3 个全局资源包,客户端 App 并未重新发版)推测:这部分 fallback 流量产生原因是客户端未注册新的公共资源包,因此容器不知道这部分资源在本地的映射,只能从网络 fallback 地址获取,而这里的核心 JS 资源的加载慢导致了“白屏”等待的性能问题。

根据上述分析进行客户端代码检查,确认客户端确实没有对新增的公共资源包进行注册。开发者按照文档重新对这个细节进行处理,打包测试后确认问题消失:不再有 fallback 的请求,“白屏”等待的问题也得到了解决。

3. 小结

开发者在 mPaaS H5 容器在接入和使用上需要对一些细节投入特别的关注,比如离线包的验签和全局包的使用等。因为 H5 容器存在 fallback 机制,所以即使“离线”失败,容器也是可以“正常”加载业务包的内容的,开发阶段开发者往往容易忽略掉“离线”对性能层面的影响。建议开发者在联调和上线的过程中,对于离线机制的工作情况予以检查和确认,可以通过抓包的手段从外部确认没有额外的、非必要的 fallback 请求产生,最终的目的是发挥离线包的性能优势。

参考文档

[1]如何抓取 HTTP 报文(Mac OS/Charles):https://help.aliyun.com/document_detail/159161.html

[2]Android管理离线包:https://help.aliyun.com/document_detail/112553.html

[3]iOS管理离线包:https://help.aliyun.com/document_detail/112928.html


《阿里云SRE技术期刊》

《阿里云SRE技术期刊》2021年02月刊重磅发布啦,囊括了事件要闻、应用说明、最佳实践、测试环境搭建、问题排查等众多技术干货,感兴趣的小伙伴速来围观~~

关注公众号「mPaaS」回复“SRE期刊”立即下载原文

-END-

原文链接:https://developer.aliyun.com/article/782920?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

客户端突如其来的“白屏”等待该如何解决?相关推荐

  1. mPaaS 客户端问题排查之突如其来的“白屏”等待

    简介:mPaaS 客户端问题排查之突如其来的"白屏"等待 移动端的混合架构模式给 App 开发带来了崭新的空间,通过 H5 构建的业务模块可以实现高效快速的版本迭代,满足多样化的业 ...

  2. win11白屏死机怎么办 Windows11白屏死机的解决方法

    因为微软推出了全新的使用系统Win11,所有不少小伙伴都有下载体验,但有一些小伙伴在安装完Win11系统后电脑常常会死机,那么碰到这个问题应该如何办呢?下面小编来跟大家说说win11白屏死机的解决教程 ...

  3. android启动画面白屏,Android app启动时黑屏或者白屏的原因及解决办法

    1.产生原因 其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景. 示例: 2.解决办法 通过设置设置Style (1)设置背 ...

  4. 有道云笔记Windows客户端打开白屏的问题,一个字,等

    Windows11和Windows10环境下,Windows更新已经更新到最新.最近几天莫名出现应用打开没有反应的情况,例如Google Chrome,Firefox,有道云笔记本等.也进行了卸载应用 ...

  5. C# Winform继承窗体打开设计器白屏的一例解决方法

    环境VS2017 15.5.4,Win10 开发过程中,发现一些窗体打开设计器会卡死白屏,另外有一些不会,(两者运行时正常),最小化vs后甚至能把工具箱连带搞黑,严重影响开发效率,经过一天多的对比研究 ...

  6. ionic2+启动白屏问题-------之补充解决之道

    问题描述 最近在学习过程中发现ionic2项目运行在真机上,启动页后会有3-5秒的白屏时间,用户体验不是太好. 解决过程 查看到了一篇关于这个问题的博客,但是是ionic1版本下的解决方案,有些差异, ...

  7. 前端白屏问题_小程序白屏问题和内存解决方法

    1 关于WKWebview白屏,网上罗列的常见原因大致有以下几种: 1.内存占用比较大时,WebContent Process 会 crash,从而出现白屏现象. 2.URL网址无效或者含有中文字符. ...

  8. 联想微型计算机白屏怎么办,电脑白屏怎么快速修复 解决方法大全

    电脑是我们现在生活中必不可少的一种 高科 技产品,可以说有了电脑之后我们的生活.工作以及学习都因为电脑的出现而有了很大的改善.我们的生活因为电脑变的更加丰富多彩,工作.学习也因为电脑效率得到了很大的提 ...

  9. 启动APP黑屏白屏的原因及解决办法

    在我们打开APP的时候,总是会删一下白屏,或者黑屏,所以今天针对这个问题做一下自己的见解. 为什么在启动APP时,会出现白屏或者黑屏那? 其实出现黑白屏并不是不正常的,而是没有加载到布局文件,就已经显 ...

最新文章

  1. Error: EACCES: permission denied, symlink
  2. css实现图片自适应容器的几种方式
  3. 探秘推荐引擎之协同过滤算法小综述
  4. 原来流行也可以变成怀旧!
  5. 模拟二:STEMA 考试选择题模拟练习试卷(中级组) 及答案 + 解题后期更新
  6. php读取zip文件,php如何读取zip内容?(zip_entry_read函数的使用)
  7. 方案一TCP 完成聊天室的编写
  8. IOS 2D游戏开发框架 SpriteKit--续(创建敌对精灵)
  9. 深圳多管齐下破解“融资难”
  10. Java 数组实现堆栈操作
  11. Action+Service +Dao三层的功能划分
  12. 浏览器的“sleep”
  13. 从C#程序中调用非受管DLLs
  14. named 委派与转发
  15. 算法上的创新点大搜罗
  16. 水星如何设置虚拟机服务器,水星mercury路由器电脑怎么设置?
  17. 双硬盘安装Windows+Ubuntu
  18. 408 知识点笔记——操作系统(绪论、进程管理)
  19. 超酷的HTML5 Canvas网络画板教程
  20. 河海大学计算机辅助,黄瑞

热门文章

  1. Spark On Yarn 运行项目
  2. linux文件名中文乱码解决
  3. 赞!《Python面试大全》PDF版来啦!
  4. 全称是什么_JDK,JRE和JVM是什么?三者有什么关系?二分钟搞定!!!
  5. idea打开提示没有安装java_Java全栈程序员之05:Ubuntu下安装TOMCAT、集成到IDEA
  6. vue中父子组件先后渲染_vue父子组件传值(子传父,非父子组件传值)
  7. ios上架图片在线制作_TF上架是什么?上架testflight真的不掉签吗?
  8. python学习笔记三一 函数学习
  9. Firefox下代码触发a标签的click事件无效
  10. Everything Has Changed(HDU6354+圆交+求周长)