首页IT科技项目优化设计(vite项目优化)

项目优化设计(vite项目优化)

时间2025-06-20 17:31:42分类IT科技浏览5210
导读:首先在讲述vite优化之前,我们先来分析一下和传统的项目管理构建工具的区别,以webpack为例,它是利用plugin插件和loader加载器对项目的所有模块和依赖统一通过入口文件进行编译,从而变成我们html所需要的js格式渲染我们的页面。...

首先在讲述vite优化之前             ,我们先来分析一下和传统的项目管理构建工具的区别                        ,以webpack为例       ,它是利用plugin插件和loader加载器对项目的所有模块和依赖统一通过入口文件进行编译         ,从而变成我们html所需要的js格式渲染我们的页面                。

随着浏览器的发展                       ,逐渐的已经支持了 ES 模块

因此Vite在设计时考虑在浏览器请求源码时进行转换并按需提供源码                    。根据情景动态导入代码           ,即只在当前屏幕上实际使用时才会被处理        。

优势: 这样就避免了随着应用体积的增大      ,导致了启动服务缓慢                      ,一处代码更新界面需要数秒钟才能显示的问题            。运行速度真的没得说                    。

同样的               ,作为一个新型的构建框架   ,也有很多的弊端           。

缺点: 只能针对现代浏览器(ES2015+)                、生态小等        。

当然我们今天说的不止是这些                     ,既然选择了vite框架                   ,自然不会考虑浏览器的兼容性,我们更多的还是关注vite本身的性能                     。

优势即劣势

正是因为vite本身是动态加载的资源                 ,当某个路由的依赖项比较多的时候                       ,加上你可能使用了某些组件库的按需加载(比如element-plus)   ,在进入页面时可谓是很慢             ,而且页面都是会像卡壳了一样刷新一次              。

技术层观察的表现是                        ,network加载了很多资源       ,同时在cmd终端会显示:

下午7:01:09 [vite] ✨ new dependencies optimized: element-plus/es/components/message-box/style/index 下午7:01:09 [vite] ✨ optimized dependencies changed. reloading 下午7:01:23 [vite] ✨ new dependencies optimized: element-plus/es/components/form/style/index 下午7:03:57 [vite] vite.config.ts changed, restarting server...

这是因为需要按需写入组件与样式导致的         ,那么怎么解决这一问题呢                       ,我们更希望在开发环境下           ,能提高我们的运行速度      ,而且让生成环境的包体积更小    。然而                      ,好像没有太好的解决方案               ,因为第一次按需加载按照vite的设计就必须要写入                      。

换个思路   ,那么我只能在开发环境下全局加载组件                     ,打包时再执行按需加载了…

// 自定义插件 ./plugins/fullImportPlugin import * as path from path import type { Plugin, ResolvedConfig } from vite export default function fullImportPlugin () { let config: ResolvedConfig return <Plugin>{ name: fullImportElementPlus, async configResolved (conf) { config = conf }, transform (code, id) { // 判断当前处理的是否是 _src/main.ts_ if (path.join(config.root, src/main.ts) === id) { const name = ElementPlus // 引入 ElementPlus 和 样式 const prepend = `import ${name} from element-plus;\nimport element-plus/theme-chalk/src/index.scss;\n` code = code.replace(.mount(, ($1) => `.use(${name})` + $1) return prepend + code } return code } } } // vite.config.ts import { ElementPlusResolver } from unplugin-vue-components/resolvers import unElementPlus from unplugin-element-plus/vite import unComponents from unplugin-vue-components/vite import fullImportPlugin from ./plugins/fullImportPlugin const config = { plugins:[] } if ( modes === development){ config.plugins.push(fullImportPlugin()) } else { config.plugins.push(unElementPlus({ useSource: true })) config.plugins.push(unComponents({ dirs:[], dts: true, resolvers: [ ElementPlusResolver() ] })) } export default config

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
python协程在运行过程中有哪些状态(python协程调度的流程)