故事开始于一个阳光明媚的早晨。早餐后我准时来上班。听着吴亦凡的freestyle,感觉今天应该是无风无浪的一天。但是,事情的发展总会出乎我们的意料。线上问题的视频大概是:用户通过第三方OA系统跳转到我们的Saas系统,导致页面重新加载。问题分析1.这里的登录是授权登录,不是单点登录,url的参数携带登录参数给后台。2、授权登录一直稳定。去年我们做了一个企业微信连接,应该没问题。3.通过录制的视频查看用户外观问题应该是前端页面不断超载,不像是后端的重定向来定位问题的边界1.确认授权登录正常,并且登录状态已经写好了2.确定不是后端重定向导致的3.然后定位问题是纯前端的问题。问题复现1.先登录客户的第三方OA系统2.然后跳转到我们的Saas系统重现问题,从结果入手查找问题。如果在线页面刷新错误,大概率是前端调用了reload函数,于是通过性能面板录了一波,得到火焰图(调用栈的图)如下:搜索reload后,我找到5个匹配的结果。检查后发现调用reload函数后,页面立即重新加载。它是每次重新加载页面时调用的最后一个函数。应该是这个引起的问题。由于我们是微前端模式,匹配子应用全局搜索window.reload的地方只有一个,就是cookie处理相关的。由于我们是一个比较复杂的Saas系统,所以出现问题的原因是进行了微前端改造。授权登录已在基地处理。有cookies等的处理机制造成了这个冲突,所以不断触发子应用的reload来解决,可以增加如下判断(通过base加载不需要reload):if(!window.__POWERED_BY_QIANKUN__){window.reload()}终于在中午1:00之前发布了解决方案,不妨碍同事下午去客户那边演示学习。处理线上问题,一般步骤是:1.重现问题2.定位问题边界,是前端还是后端End3.找出问题原因:技术问题?业务设计问题?或者人为的代码漏洞等。4.确定问题后,看能否彻底根治。如果没有,是否还有其他风险,请相关负责人商量。如果可以根治,就赶紧设计根治方案,进行试验,实施后放行
