Vue中的按需加载失效:按需加载与动态加载打起来了

前言

还记得那是一个风和日丽的下午,我猜的,我只能看到办公室的窗户缝里有一丝亮光。刚刚按照任务列表完成了一个功能。伸了伸懒腰,要去接一杯水,突然,我看到了微信的小图标不停的闪烁。。。管他呢,先接了水再说。

我转身接了一杯水,放到右手边靠桌角的位置上。点开闪烁的图标,我看到了远在异地组长的聊天消息,有人反馈动态加载页面的弹窗,首次打开会被卡很久,并且加载了它并不需要的js文件。。。排查一下是不是按需加载失效了。

看到这个消息,完成一个功能的松懈感马上被bug收走了,今天出门肯定是忘记祈祷了,怎么又来了这么无厘头的问题。

每次面对问题,我都会先调整好自己的心态,相信自己,不管什么样的问题,都不会难倒前端小玉儿这个经历过大大大项目的人。

问题排查与解决

从消息中可以看到,被卡页面打开时,会加载它不需要的js文件,这是一个非常关键的信息。于是我打开项目登录页,登录页同样加载了所有依赖对应的js文件,看来按需加载确实失效了。

为了排查具体的原因,我重点看了动态加载页面弹窗,因为,问题最先表现是这里,抓住了重点页面,我开始进行调试。

我先把动态加载组件的代码进行了注释,果然,再次打开弹窗时,成了空白,也不加载那些没有必要的依赖了。自己创建一个只有几个文字的组件,把动态加载组件放开,点击打开弹窗,依然是卡死的状态。基本确认,动态加载组件导致了这个问题。

再看一下,之前的动态加载组件是如何实现的

javascript 复制代码
Vue.component('customCom', require(`@/custom${custompath}`).default)

很明显,组件的路径包含变量,之前的开发中使用了require方法进行引入。

问题根本原因在于require方法是编译时执行,它会把@/custom目录下的所有文件打包到一个大的js文件里面,因为它不确定运行时需要哪个文件。

找到了原因,解决问题就容易多了。如果希望按需加载,只要能使动态加载组件在运行时执行就可以了。那就剩下一种选择了,import()方法。

javascript 复制代码
Vue.component('customCom', () => import(`@/custom${newval}`))

到此,前端小玉儿的问题完美解决了。

总结

这里敲下黑板,注意前端小玉儿排查问题技巧总结如下三点:

  1. 仔细分析bug的表现并进行验证,锁定问题文件
  2. 锁定可疑代码:使用代码排除法,比如删除可疑代码再添加回来
  3. 可疑代码分析,找出根本原因

在此,一个老前端叮嘱各位开发者:

发现可疑代码后,一定要找出导致问题的根本原因,这也是倒逼自己去学习原理的好机会。

我周围也有些同事,在发现问题后,不知道根本原因,代码稀里糊涂跑起来了,但是没过几天又出现了其他问题,给项目埋下很多地雷,在后面的日子里,每天都有被炸出一身奥利给的风险。

相关推荐
m0_敲代码的彭于晏1687 小时前
Vercel 前端部署平台深度评测
前端
怕浪猫9 小时前
外包和大厂的前端代码,差在凌晨三点
前端·面试·github
m0_敲代码的彭于晏1689 小时前
Vercel 前端部署与全栈开发实战指南
前端·状态模式
徐小夕9 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
贾伟康10 小时前
【化学实验室|17】HarmonyOS ArkTS 亮暗色与视觉令牌实战:集中颜色、间距和交互状态避免页面割裂
前端·移动开发·harmonyos·arkts·arkui
Csvn10 小时前
SSR/SSG/ISR(上):峡谷与渲染策略的时间预算
前端
Csvn10 小时前
SSR/SSG/ISR(下):可交互性、新鲜度与回源账
前端
Elcker13 小时前
YnuoAgent(依诺):一个 npm 包,跑起属于自己的 AI 研发平台
前端·人工智能·npm
计算机魔术师13 小时前
发现2天,修复2个月:AI挖穿PHP后,卡兹克讲透攻防时间差
前端
风骏时光牛马14 小时前
测试标题001
前端