runScript重复执行的问题

来源:5-10 执行js脚本

duiduidui

2022-01-10

老师您好,关于执行js脚本这里有个疑问:
在执行runLifeCycle函数的过程中,会发生卸载上一个子应用、挂载下一个子应用的动作
在执行下一个子应用的beforeLoad生命周期函数时,会先后调用loadHtml、parseHtml和parseJs这几个函数
在函数parseJs(main/micro/loader/index.js)的执行过程中,会通过递归的方式,将link标签和script标签中的js资源都放到scriptUrl数组中
随后交给runScript函数 通过eval的方式执行这些js代码
但是从DOM树中可以看到,vue2和vue3这两个子应用里面的link和script都指向了相同的两个js文件
图片描述
这样就会导致runScript函数重复执行了1编,增加了性能损耗

其实这个link标签虽然指向了js文件,但是rel=‘preload’,只是为了让浏览器提前去获取对应的资源,放在微前端框架下,是通过框架内的fetchResource去获取这些js资源的

因此,是否可以考虑将parseJs内部处理link标签的代码删掉?(我目前已注释掉这部分内容、切换子应用时,控制台没有出现报错、页面展示也没有异常)

图片描述

写回答

1回答

yancy

2022-01-11

可以添加一个过滤。只保留不同链接下的脚本路径,但是不建议删除,毕竟不能明确的表示link一定不等于script

0
1
duiduidui
好的,谢谢老师,或许可以在执行js脚本之前,给scripts数组做一次去重
2022-01-11
共1条回复

从0打造微前端框架,实战汽车资讯平台

专为2~5年前端工程师打造的架构能力提升课

791 学习 · 204 问题

查看课程