前端工程化不仅仅是"能用脚手架跑起来"——它涉及构建优化、模块组织、代码规范、CSS 架构等多个层面。本文从 Vite 构建优化和 CSS3 现代布局两个维度切入,分享经过大型项目验证的最佳实践。
Vite 构建优化实战
1. 代码分割策略
// vite.config.ts\nexport default defineConfig({\n build: {\n rollupOptions: {\n output: {\n manualChunks: {\n 'vue-vendor': ['vue', 'vue-router', 'pinia'],\n 'element-plus': ['element-plus'],\n 'echarts': ['echarts', 'echarts-wordcloud'],\n 'utils': ['lodash-es', 'dayjs', 'axios'],\n },\n },\n },\n },\n});合理的手动分包策略可以将 vendor.js 拆分为多个约 200-400KB 的 chunk,充分利用浏览器并行下载能力。
2. 构建性能优化
export default defineConfig({\n build: {\n target: 'es2020', // 无需降级到 ES5\n minify: 'esbuild', // esbuild 比 terser 快 20-40 倍\n sourcemap: false, // 生产环境关闭 sourcemap\n },\n esbuild: {\n drop: ['console', 'debugger'],\n },\n});3. 图片与资源优化
import viteImagemin from 'vite-plugin-imagemin';\nexport default defineConfig({\n plugins: [\n viteImagemin({\n gifsicle: { optimizationLevel: 3 },\n mozjpeg: { quality: 80 },\n pngquant: { quality: [0.7, 0.9] },\n svgo: { plugins: [{ removeViewBox: false }] },\n }),\n ],\n});CSS3 现代布局:Flexbox 与 Grid 全面对比
Flexbox:一维布局利器
/* Flexbox 经典应用:水平垂直居中 */\n.center-box {\n display: flex;\n justify-content: center; /* 主轴居中 */\n align-items: center; /* 交叉轴居中 */\n}\n\n/* Flexbox 经典应用:等分空间 */\n.card-list {\n display: flex;\n gap: 16px; /* 替代 margin,间距统一 */\n flex-wrap: wrap;\n}\n.card-item {\n flex: 1 1 300px; /* 最小 300px,自动伸缩 */\n}Grid:二维布局王者
/* Grid 经典应用:响应式网格 */\n.grid-container {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\n gap: 20px;\n}\n\n/* Grid 经典应用:圣杯布局(一行代码搞定) */\n.holy-grail {\n display: grid;\n grid-template: auto 1fr auto / 200px 1fr 200px;\n min-height: 100vh;\n}\n\n/* Grid 经典应用:重叠布局 */\n.overlay {\n display: grid;\n grid-template: 1fr / 1fr; /* 单格 */\n}\n.overlay > * {\n grid-area: 1 / 1; /* 所有子元素重叠 */\n}Flexbox vs Grid:选择决策树
用 Flexbox:一维布局(单行或单列)、内容尺寸驱动(导航栏、工具栏、表单行)、需要 wrap 的场景。用 Grid:二维布局(行列同时控制)、页面整体布局、需要精确控制列宽的场景。两者混用:Grid 定义页面骨架,Flexbox 处理组件内部布局——这是实际项目中最常见的模式。
CSS3 性能优化
1. will-change:提前告知浏览器
.animated {\n will-change: transform, opacity; /* 提前创建合成层 */\n}\n// 重要:动画结束后移除,避免内存浪费\n// element.addEventListener('animationend', () => {\n// element.style.willChange = 'auto';\n// });2. contain 属性:限制布局计算范围
.widget {\n contain: layout style paint; /* 隔离布局、样式和绘制 */\n}3. content-visibility:延迟渲染
.off-screen {\n content-visibility: auto; /* 视口外的元素跳过渲染 */\n contain-intrinsic-size: 0 500px; /* 预估高度,避免滚动条跳动 */\n}总结
前端工程化的关键词是"恰到好处"——构建优化要做到能用但不炫技,CSS 布局要灵活但不臃肿。一个好的工程化配置应该是:构建速度让开发者在本地爽,打包体积让用户在网络慢时也爽,CSS 架构让团队成员都能轻松维护。
评论 (0)