任何模块的更新,页面都会有感知,下次进入系统时,就会提示是否需要升级模块和页面 。
三、淘宝首页的性能优化
首页模块众多,如果一口气吐出来,DOM 数量必然超过 4k 个 , 其结果就是首屏时间极长 。按照 TMS 的开发规范 , 每个 TMS 模块都包含一个 index.js 和 index.css,最后展示出来两个 combo 的 js 和 css 。首页加载的时候也不会一口气执行所有 index.js,否则刚开始页面阻塞会十分严重 。
页面的渲染逻辑
· 遍历所有 TMS 模块(包含一个 J_Module 的钩子);
· 部分 TMS 模块无 JS 内容,但是加载了一个 index.js,为模块添加 tb-pass 的 class,用于跳过该模块 JS 的执行;
· 将页面分为两块,首屏为一块 , 非首屏整体为第二块 , 先将首屏模块加入到懒加载监控;
· 待首屏模块加载完成,或者用户处理了页面交互时(滚动、鼠标移动等),将非首屏模块加入到懒加载监控;
· 处理一些特殊模块,它们会在进入视窗之前几百像素就开始加载;
· 监控滚动,按照以上逻辑,渲染模块;
· 部分模块即便是被执行了,也不一定渲染出来,因为它的优先级不高,在模块内部加了事件监听,比如等到 mouseover/onload 事件触发的时候再渲染这些内容 。
代码的性能优化是一个精细活,如果你要在一个庞大的未经优化的页面上做性能优化 , 可能会面临一次重构代码 。上面的文章提到的是页面内部的细节优化,但是在开发流程中做的规范化、标准化,以及线上访问通路中的各个环节优化还没有提及 。
四、淘宝首页的稳定性保障
在大流量下 , 任何小问题都会被放大成大问题,所以开发环节遇到的任何偶发性问题都需要引起重视 。不过很多偶发性问题在我们的测试环境中是找不到的,比如与地域相关的问题(如上海的某个 CDN 节点挂了),用户属性问题(如 nickname 最后一个为字母 s 的用户页面天窗),浏览器插件问题,运营商广告注入问题等等 。
难以在上线之前把所有问题考虑周全,但是有两点是必须做好的:兜底容灾 + 监控预警 。
1、兜底容灾机制
兜底容灾有两个层面的考虑:
· 异步接口请求错误,包括接口数据格式错误 , 接口请求超时等;
· 同步渲染,源站页面渲染出错 。
异步接口请求 , 主要涉及到的是后台系统,对接系统较多,各个系统的稳定性和抗压能力各不相同 , 这方面的保障有多种方案 。
每次数据请求都缓存到本地,并且为每个接口都提供一个硬兜底 。还有一种方案是「重试」,请求一次不成功那就请求第二次 。
对于同步渲染 , 它只需要页面模板和同步数据,两者中任一种存在错误,源站都会报错,此时回源返回的内容就是一个 error 页面 , 状态码为 5xx 。这个错误不一定是开发者造成的,有可能是系统链路出现同步异常或者断路问题 。
一旦源站任何异常,Nginx 都会转到与 Cache CDN 同机房的首页镜像上去,这个镜像内容就是淘宝首页的 HTML 备份源码 。
2、监控预警机制
监控也有两个层面:
· 模块级别的监控 , 接口请求布点、模块天窗检测等;
· 页面的监控,在页面上添加特殊标记,定时回归所有 CDN 节点,查看特殊标记是否存在 。
模块层面的监控 , 内容还是相当多的 , 监控的点越多越详细,到最后定位问题的效率就会越高,比如在一个稍微复杂的模块上,我会埋下这些监控:
· 接口请求格式错误、请求失败、请求超时,至少三个埋点;
- 淘宝逛逛怎么进去,淘宝逛逛功能在哪里找
- iphone13京东降价,618 拼多多iphone 13最新价格
- 体检单造假,体检代检骗局
- 美队盾牌购买,200元美国队长盾牌
- 心智成熟的书籍推荐 让人心智成熟的7本书
- 爱情不能解决人生的问题 最终还是得自己面对困难
- 淘宝哪里可以领大额优惠券,三分钟教你领取淘宝内部优惠券
- 淘宝特价版助力成功在哪里查看,助力成功截图怎么找不到
- 淘宝店铺子账号怎么开通,淘宝专属店铺怎么开通
- 淘宝网购差评纠纷暴露评价体系漏洞怎么回事,4星评价是差评吗