请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

runScript重复执行的问题

老师您好,关于执行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标签的代码删掉?(我目前已注释掉这部分内容、切换子应用时,控制台没有出现报错、页面展示也没有异常)

图片描述

正在回答 回答被采纳积分+3

1回答

yancy 2022-01-11 17:20:06

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

0 回复 有任何疑惑可以回复我~
  • 提问者 duiduidui #1
    好的,谢谢老师,或许可以在执行js脚本之前,给scripts数组做一次去重
    回复 有任何疑惑可以回复我~ 2022-01-11 17:32:45
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信