vite + vue3 项目如何提升加载速度,及删除不必要的加载项 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scienhub
V2EX    Vue.js

vite + vue3 项目如何提升加载速度,及删除不必要的加载项

  •  
  •   scienhub
    batchfy 2024-08-02 16:00:48 +08:00 3067 次点击
    这是一个创建于 433 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们项目前端是用的 vite + vue3, 但是发现首页加载相对比较慢的,而且加载了很多其他页面需要,但是首页不需要的 js 文件。

    请问:

    1. 如何提升加载速度,让 js 等文件的加载不阻塞首页显示呢?
    2. 如何只加载必须的文件?

    图片我们都已经做了 lazy-loading, 这里想请问 js 和 css 文件如何只加载必须的文件,以及尽量让加载不阻塞页面渲染。

    我们测试服务器的地址是: https://beta.scienhub.com, bundle visualizer: https://beta.scienhub.com/stats.

    其中像是 monaco-editormathajax 都是和首页毫无关系的文件,但是仍然在首页加载项里。

    22 条回复    2024-08-03 13:50:58 +08:00
    lucasj
        1
    lucasj  
       2024-08-02 16:21:48 +08:00
    测试服务器宽带太小了,感觉是 1M 的宽带
    yandif
        2
    yandif  
       2024-08-02 16:24:05 +08:00
    我怎么感觉是你使用 VPN 进行访问的问题呢,使用 VPN 后:加载了 1 分钟,关了 VPN 后不到两秒就加载完了。
    scienhub
        3
    scienhub  
    OP
       2024-08-02 16:30:35 +08:00
    @yandif 我没有用 vpn 诶?
    sleepwalker
        4
    sleepwalker  
       2024-08-02 16:32:52 +08:00
    不是是部署在国外?资源加载有点慢
    tomjack
        5
    tomjack  
       2024-08-02 16:54:16 +08:00
    打包的时候针对资源有做分包吗? 可以发个截图看看

    还有,我这里的 gif 加载了 4s 多
    lucasj
        6
    lucasj  
       2024-08-02 17:00:05 +08:00
    应该破案了。

    原因:OP 的网站用了 cloudflare ,第一次访问,没有缓存,所以很慢。

    第一次:cf-cache-status: MISS 很慢 10s 。
    第二次:cf-cache-status: HIT 很快 300ms 。

    参考:Cloudflare not caching on the first visit
    https://community.cloudflare.com/t/cloudflare-not-caching-on-the-first-visit/299265

    请问你的服务器部署在国内还是国外啊?
    Retas
        7
    Retas  
       2024-08-02 17:55:07 +08:00
    跑一波 Lighthouse
    seeu2ex
        8
    seeu2ex  
       2024-08-02 20:19:22 +08:00 via iPhone
    我点进去超过 5 秒都没显示出来
    karott7
        9
    karott7  
       2024-08-03 00:27:11 +08:00
    1. vite 配置里增加 build.rollup.output.manualChunks 配置,尽可能 node_modules 的依赖都打包到一个文件中
    karott7
        10
    karott7  
       2024-08-03 00:29:54 +08:00
    1. vite 配置里增加 build.rollup.output.manualChunks 配置,尽可能 node_modules 的依赖都打包到一个文件中
    2. cache-control 缓存时间有点短,建议设置成一年 (public, max-age=31536000)
    3. 首页用的大组件(比如 pdf ,katex )建议封装成组件,然后动态引入,类似 react 中 suspend 的处理逻辑
    scienhub
        11
    scienhub  
    OP
       2024-08-03 04:12:08 +08:00
    scienhub
        12
    scienhub  
    OP
       2024-08-03 04:13:07 +08:00
    @karott7
    1. 这个我们已经做了
    2. cf 的缓存会设置的更长些。
    3. 我问题的关键就是,pdf ,katex 这些和主页“没有任何关系”,是其它页面用的。但不知为何会在主页的加载项里。
    scienhub
        13
    scienhub  
    OP
       2024-08-03 04:13:22 +08:00
    @lucasj 服务器在我家中,国外的宽带。
    scienhub
        14
    scienhub  
    OP
       2024-08-03 06:58:34 +08:00
    @tomjack
    是指 build 后的 js 文件列表么?太长了粘贴不下,不过我感觉 https://beta.scienhub.com/stats 这里是能看到 bundle size 的呀?
    scienhub
        15
    scienhub  
    OP
       2024-08-03 07:00:44 +08:00
    @tomjack 其实我的问题是,mathjax ,katex 这些和主页“毫无关系的”js 文件,是如何出现在主页的加载项里的。。。
    acthtml
        16
    acthtml  
       2024-08-03 09:21:19 +08:00
    @scienhub #12

    对于 3 ),因为这些类库“在其他页面是公共类库”。
    acthtml
        17
    acthtml  
       2024-08-03 09:22:11 +08:00
    @scienhub #12

    要我优化的话,先用构建分析工具找出无用包和大体积包;其次利用配置 build.rollupOptions.output.manualChunks 将特定包拆分出去;最后利用异步加载来优化首屏速度。
    Charrlles
        18
    Charrlles  
       2024-08-03 10:43:05 +08:00 via iPhone
    正常来说,用了 dynamic import 之后,首页不应该包含没用到的库,应该仔细检查一下组件的引入方式,一个是确保 dynamic import 是在运行时里写的,一个是看看那些非必要的库是不是被某个公共组件用到了,这个公共组件又被首页用到了
    Charrlles
        19
    Charrlles  
       2024-08-03 10:45:54 +08:00 via iPhone
    看了下你的 bundle 分析图,看起来首页和其他页面根本没分出来,是不是路由里没有用 dynamic import
    scienhub
        20
    scienhub  
    OP
       2024-08-03 13:43:06 +08:00
    @Charrlles 这是我们 router 的代码截图,除了上面的一些是 import 的,下面的 router 中每个路由都是 dynamic import 的

    ![]( https://imgur.com/8PzNFl5.jpg)
    scienhub
        21
    scienhub  
    OP
       2024-08-03 13:43:38 +08:00
    @Charrlles @Charrlles 这是我们 router 的代码截图,除了上面的一些是 import 的,下面的 router 中每个路由都是 dynamic import 的

    ![]( https://imgur.com/8PzNFl5.jpg)
    scienhub
        22
    scienhub  
    OP
       2024-08-03 13:50:58 +08:00   1
    @Charrlles 破案了,就是最上面几个 import ,改为 dynamic import 就解决了。
    十分感谢!!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     861 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:43 PVG 05:43 LAX 14:43 JFK 17:43
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86