一、前言
Vite很好,但选择需要谨慎。
Vite官网(源链接)针对性能问题提出了一些建议,要点提炼如下:
- 补全文件后缀;
- 避免使用桶文件;
- 尽可能使用原生化的工具链;
不知道大家看完是何感受,至少在使用Webpack或者其他非冷启动的工具时,是不需要考虑这些问题的。
个人见到的大多数vite项目,在开发时也是没有遵守这些规则,项目体积小的倒还好,大型项目则不可避免地会出现开发体验问题,例如:启动慢,路由切换响应慢。
二、 问题演化
- 项目初期并不会出现问题;
- 按照过往的开发习惯去开发,例如:省略文件后缀,文件夹用一个桶文件导出所有其他文件;
- 项目中后期出现卡顿,翻找文档,寻找原因。
- 由于一开始没做好规范化,改动大,风险大,谁都怕背锅,积重难返。
三、为什么Vite会有这个问题?
成也冷启动,败也冷启动。
冷启动作为vite的宣传招牌,实现了项目秒开,但这种秒开必然是少做了很多打包中要做的事情。例如:全量解析、代码分割、babel编译转化。
未做全量解析,导致项目运行时,还需要去猜引入的无后缀文件具体是什么后缀,按照.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json'的顺序挨个去猜,无后缀的文件越多,性能开销越大。
未做代码的分割,导致文件引入都是全量引入,内部包含大量文件的桶文件则会严重影响性能。
未作babel编译转化,则需要在页面加载时编译。
四、总结
目前不太好看利用vite维护大型项目,要求所有开发者按照vite规范去开发,属于不可控行为,也显得框架的兜底能力很差。