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. 可疑代码分析,找出根本原因

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

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

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

相关推荐
JustHappy2 分钟前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌3 分钟前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构
sg_knight6 分钟前
拥抱未来:ECMAScript Modules (ESM) 深度解析
开发语言·前端·javascript·vue·ecmascript·web·esm
LYFlied6 分钟前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
开发者小天7 分钟前
react中useEffect的用法,以及订阅模式的原理
前端·react.js·前端框架
前端白袍27 分钟前
Vue:如何实现一个具有复制功能的文字按钮?
前端·javascript·vue.js
new code Boy1 小时前
escape谨慎使用
前端·javascript·vue.js
叠叠乐1 小时前
robot_state_publisher 参数
java·前端·算法
Kiri霧1 小时前
Range循环和切片
前端·后端·学习·golang
小张快跑。2 小时前
【Java企业级开发】(十一)企业级Web应用程序Servlet框架的使用(上)
java·前端·servlet