分包、Tree Shaking、Babel 和 polyfill 分别解决什么
先理解原理和示例,再练习完整口述与追问。
回答要点
按路由和使用时机分包,控制首屏体积;Tree Shaking 依赖静态分析并受副作用影响,不是写了 import 就一定能移除。Babel 处理语法转换,API 兼容还可能需要 polyfill;目标浏览器决定具体配置。
原理拆解
分包决定哪些代码何时获取;Tree Shaking 依赖静态可分析模块关系及副作用信息,减少未使用导出;Babel 转换语法;polyfill 补目标环境缺少的运行时 API。四者分别处理不同问题,压缩后的字节小也不代表运行时执行少。
示例与推演
把后台图表放到路由动态 import,可减少首页必须下载的代码;若库以不可分析的方式整体引入,未使用导出未必能删除。把箭头函数转为普通函数,不会让旧环境自动拥有 Promise。sideEffects:false 标错可能把必要的全局样式或初始化模块删掉。
易错点
不要用“Babel 已经转译”回答所有兼容问题。动态 import 也要处理 chunk 下载失败与发布版本保留,不能只写一个语法就结束。
参考回答可直接练习口述
分包按路由或使用时机拆资源,减少首屏必须下载和执行的内容,但过细会增加请求与调度成本。Tree Shaking 依靠静态分析剔除未使用导出,受模块格式和副作用声明影响,不能保证一个 import 就把所有无用代码删干净。Babel 主要转换语法;Promise 等缺失 API 通常还要按目标环境配置 polyfill。最终依据真实浏览器目标和构建产物检查,而不是给所有环境无差别补丁。