1.为什么webpack打包慢?为什么vite会比webpack快?如果想提高webpack速度,应该怎么做?
webpack打包原理是根据文件间的依赖关系对其进行静态分析,然后将这些模块按指定规则生成静态资源,当 webpack 处理程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。
webpack的整个打包流程:
1、读取webpack的配置参数;
2、启动webpack,创建Compiler对象并开始解析项目;
3、从入口文件(entry)开始解析,并且找到其导入的依赖模块,递归遍历分析,形成依赖关系树;
4、对不同文件类型的依赖模块文件使用对应的Loader进行编译,最终转为Javascript文件;
5、整个过程中webpack会通过发布订阅模式,向外抛出一些hooks,而webpack的插件即可通过监听这些关键的事件节点,执行插件任务进而达到干预输出结果的目的。
webpack与vite启动对比
webpack:通过js入口去扫描这些应用引入的子模块、等模块全部被解析完后、其中包括一些动态模块也会被解析、然后把这些模块注入到index.js中、 然后启动devserve等待访问!项目越来越大启动时间就会越来越长、但是其实很多时候首屏所使用的js都是比较少的、所以我们其实不需要把全部都打包进来、我们看下下方打包流程图、加深下印象
vite: 启动devserve服务、利用es6模块import会以请求的方式加载模块、因为首屏只有少量的js模块、而且动态的模块是不会被加载进来的、所以这比webpack打包启动要快的原因!
webpack优化
一、分析打包速度
二、分析影响打包速度环节
四、合理利用缓存(缩短连续构建时间,增加初始构建时间
五、优化压缩时间
六、优化搜索时间- 缩小文件搜索范围 减小不必要的编译工作
2.讲讲你对react路由的理解?前端路由和后端路由你觉得有区别吗?
react路由,我们常用的插件是react-router,主要是有两种模式hash通过监听事件hashchange和history模式则是通过浏览器api history.repalceState和history.pushState进行路由切换。前端路由是跟进定位组合各个组件呈现在页面的效果,后端路由是找到相对应的后台服务。