您现在的位置是:首页 > 企业SEO优化企业SEO优化

web打包优化策略?

江湖快报网2023-06-11 19:44:01【企业SEO优化】人已围观

简介一、web打包优化策略?
web打包实际上是一个静态模块打包工具。
web打包处理项目时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一

一、web打包优化策略?

web打包实际上是一个静态模块打包工具。

web打包处理项目时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

web打包原理:

1.识别入口文件。

2.通过逐层识别模块依赖。

3.webpack做的就是分析代码。转换代码,编译代码,输出代码。

4.最终形成打包后的代码。

二、如何判断的 webpack 打包大小是否科学,是否还有优化的可能

解决webpack打包的文件体积过大的问题:

确实,每次打包从入口开始,会parse所有的依赖,多的时候竟然打包一次要2秒多,简直不能忍。然而,有几个解决方案,最有效的,是使用weboack的watch,只有文件md5变化时,才会重新打包,并且只parse有变化的文件,其他没变化的文件是使用缓存的。这样子,打包时间迅速降到200ms以内。 再优化下去的话,我们陪高慎要知道webpack打包的过程中做了啥,首先是解析依赖啦,然后就是各种各样的loader。从解析依赖的角度入手,我们可以芦敬bower install一些念闭打包好的文件,然后通过设置别名让依赖指向这个文件,这样就减去了第三方库的依赖解析时间。 然后各种各样的loader也是很耗时的,一种办法是在loader里面配include,让loader只针对特殊资源。

三、webpack 性能优化怎么做

送到这个直接去优化行动中应该能搞定优化生活,我认为这应该是小孩儿为什么还是凉的。

W 1 bp ack性能优化怎么做?这睁迅个可以上百度上面搜索,扰早穗应该是可以搜到的,这个你应该缓卜去找手机专卖店做。

四、webpack打包的CSS含有两个相同的引入?

1. 摘要

Webpack是一种前端资源构建工具,一个静态模块打包器。在Webpack看来,前端的所有资源文件(js/json/css/img/less/…)都会作为模块处理,当Webpack处理应用程序时,它将根据模块的依赖关系核物孙进行静态分析,打包生成对应的静态资源。Webpack打包流程图如图1-1所示。

想了解Webpack,看这篇就够了

图1-1 Webpack打包流程图

2. Webpack五个核心概念

2.1 Entry

入口(Entry)指示Webpack以哪个文件作为入口起点分析构建内部依赖图并进行打包。

2.2 Output

输出(Output)指示Webpack打包后的资源bundles输出到哪里去,以及如何命名。

2.3 Loader

Loader让Webpack能够去处理那些非JavaScript语言的文件,Webpack本身只能理解JavaScript。

2.4 Plugins

插件(Plugins)可以用于执行范围更广的任务,插件的范围包括从打包和压缩,一直到重新定义环境中的变量等。

2.5 Mode

模式(Mode)指示Webpack使用相应模式的配置。分为development和production两种模式,下面分别进行简述。

development: 开发模式,能让代码本地运行的环境,会将process.env.NODE_ENV的值设为development,同时启用NamedChunksPlugin和NamedModulesPlugin插件;

production: 生产模式,能让代码优化运行的环境,会将process.env.NODE_ENV的值设为production,同时启用FlagDependencyUsagePlugin、FlagIncludedChunksPlugin、ModuleConcatenationPlugin、NoEmitreplaceStringsPlugin、OccurrenceOrderPlugin、SideEffectsFlagPlugin和UglifyJsPlugin插件。

3. Wbepack配置

3.1 webpack.config.js文件

webpack.config.js是webpack的配置文件,用来指示webpack工作,运行webpack指令时,会加载里面的配置,所有构建工具都是基于nodejs平台运行的,默认采用commonjs模块化。webpack.config.js基础配置如图3-1所示。

想了解Webpack,看这篇就够了

图3-1 webpack.config.js基础配置

3.2 devServer配改链置

开发服务器(devServer)用来实现蚂此自动化(自动编译、自动打开浏览器、自动刷新浏览器),只会在内存中编译打包,不会有任何文件输出,本地安装webpack-dev-server后,通过npx webpack-dev-server命令启动devServer,核心代码如图3-2所示。

想了解Webpack,看这篇就够了

图3-2 devServer配置核心代码

3.3 打包html/样式/图片/其它资源

打包不同的资源会使用不同的loader和插件,打包html/样式/图片/其它资源的流程如下所述。

3.3.1 打包html资源

1.下载html-webpack-plugin插件;

2.引入html-webpack-plugin插件;

3.使用html-webpack-plugin插件,并进行相应配置。

3.3.2 打包样式资源

不同的样式文件需要配置不同的loader

1.下载loader;

2.配置loader,css样式文件使用css-loader和style-loader,less文件使用less-loader、css-loader和style-loader。其中css-loader的作用是将css文件变成commonjs模块加载到js文件中,style-loader的作用是创建style标签,将js中的样式资源插入进去,添加到head中生效。

3.3.3 打包图片资源

1.下载url-loader,file-loader

2.配置loader

3.3.4 打包其它资源

1.下载file-loader

2. 配置loader,配置该loader作用于不为html/css/less/js的其他文件

3.4 提取css成单独文件/css兼容性处理/压缩css

3.4.1 提取css成单独文件

样式文件打包后会默认和js文件一起输出,可以通过插件将打包后的css文件单独输出,流程如下所述。

1.下载mini-css-extract-plugin插件

2.引用该插件

3.配置

3.4.2 css兼容性处理

1.下载postcss-loader和postcss-preset-env

2.在package.json中browsetslist属性中分别对开发环境和生产环境进行兼容性配置,设置支持样式的浏览器版本

3.通过postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式。

3.4.3 压缩css

1.下载optimize-css-assets-webpack-plugin插件

2.引用该插件

3.使用该插件

3.5 js语法检查eslint/js兼容性处理/js压缩

3.5.1 js语法检查eslint

1.下载eslint-loader和eslint

2.在package.json中的eslintConfig中进行配置

3.配置eslint-loader,其中只需检测js文件并要排除第三方库,只检测自己写的源代码,同时可在options配置中设置fix:true,自动修复eslint的错误。

3.5.2 js兼容性处理

1.下载babel-loader、@babel/core、@babel/preset-env,通过@babel/preset-env做基本的js兼容性处理,然后通过corejs做前面无法实现的兼容性处理,并实现按需加载

2. 配置loader

js兼容性处理核心代码如图3-3所示

想了解Webpack,看这篇就够了

图3-3 js兼容性处理核心代码

3.5.3 js压缩

mode设置为production生产环境时会自动压缩js代码。

4. webpack性能优化

可以从开发环境和生产环境分别对webpack进行性能优化。其中开发环境主要考虑从打包构建速度和代码调试两个方面进行优化,生产环境主要考虑从打包构建速度和代码运行性能这两个方面进行优化。下面简单介绍下开发环境上通过HMR提升构建速度。

4.1 HMR

HMR(热模块替换),作用是一个模块发生变化后,只会更新打包这一个模块而不是所有模块,通过在devServer中设置hot:true属性启动HMR功能。

其中对于样式文件,可以使用HMR功能,因为style-loader内部实现了;

对于js文件,默认不能使用HMR功能,解决方法:修改入口文件js代码,添加支持HMR功能的代码,另外HMR只能处理非入口js文件的其他文件,对入口文件并不能生效,因为一旦入口文件更新,入口文件引入的其他文件一定会被重新加载;

对于html文件,默认不能使用HMR功能,同时会导致html文件不能热更新,解决方法:修改entry入口文件,将html文件引入,只能解决html文件不能热更新的问题。

用对象访问

例如:两个Js文件a.js与b.js,两个js文件都含有function c()

var a = {}

a.c = function(){ xxx }

var b = {}

b.c = function(){ xxx }调用的

时候就写裂慎:

a.c()、b.c() // 这样调用就行css 文件更加好办,在相同class名内,加一个css类名,覆盖相应的css样式就成但引入的文件都是第三方插件呀。我还需要进到他们提供的插件里去添加

var a = {}

a.c = function(){ xxx }

吗?!这样你没办法,只能去其中一个插件,将重名那个的方法名修改掉(插件内的方法都息息相关的,一定要注猛源毕意,将涉及枝芹到这个方法的其它地方,方法名都改了)

Tags:打包   引入   含有

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐