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

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

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

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

相关推荐
良木林42 分钟前
JavaScript书写基础和基本数据类型
开发语言·前端·javascript
brzhang7 小时前
我操,终于有人把 AI 大佬们 PUA 程序员的套路给讲明白了!
前端·后端·架构
止观止8 小时前
React虚拟DOM的进化之路
前端·react.js·前端框架·reactjs·react
goms8 小时前
前端项目集成lint-staged
前端·vue·lint-staged
谢尔登8 小时前
【React Natve】NetworkError 和 TouchableOpacity 组件
前端·react.js·前端框架
Lin Hsüeh-ch'in8 小时前
如何彻底禁用 Chrome 自动更新
前端·chrome
augenstern41610 小时前
HTML面试题
前端·html
张可10 小时前
一个KMP/CMP项目的组织结构和集成方式
android·前端·kotlin
G等你下课10 小时前
React 路由懒加载入门:提升首屏性能的第一步
前端·react.js·前端框架
蓝婷儿11 小时前
每天一个前端小知识 Day 27 - WebGL / WebGPU 数据可视化引擎设计与实践
前端·信息可视化·webgl