在现代前端开发中,对性能的关注越来越重要。React 在客户端软件开发中越来越流行,而 Webpack 做为模块化打包工具,也成为了不可或缺的一部分。本文将会针对 React 和 Webpack 结合,优化前端性能,提高开发效率方面给出具体的指导和建议。
一、Webpack 怎么配置
1、采用 tree shaking 技术来处理代码
tree shaking 指的是打包工具只将引用的代码打包进最终的 bundle 里,而未被引用的代码将被消除。这样可以在减小 bundle 大小的同时提高执行性能,tree shaking 通常是由 ES6 模块语句的静态结构来支持,像 import 和 export 语句。
webpack 中通过设置 mode
为 production
可以开启默认的 tree shaking。如果需要进行个性化的配置,可以使用 webpack-deep-scope-plugin 或 UglifyJSPlugin 这些工具来实现。
2、使用分离打包的方式
分离打包会将不同类型的代码分别打包,可使得代码得以并行加载。webpack4 已经默认支持了分离打包,可以使用 optimization.splitChunks
进行配置来自定义。一些优化推荐需要分离的文件类型,如 node_modules
中的依赖包、样式文件以及公共代码段等。
-- -------------------- ---- ------- -------------- - - ------------- - ------------ - ------- ------ -------- ------ -------- -- ---------- -- ----------------- -- ------------------- -- ----------------------- ---- ----- ----- ------------ - ------- - ----- ------------------------- ----- ---------- ------- ----- -- ------- - ----- --------- ----- --------- ------- ------ -------- ---- - - -- ------------- ---- -
3、控制文件大小
在 webpack 中,通过设置 output
对象属性可以控制最终打包生成代码的大小,其中包括 filename
, chunkFilename
以及 library
三个配置项。需要注意的是,后两者只有在使用库时才有用。以下是一个简单的输出文件内容配置:
-- -------------------- ---- ------- -------------- - - ------- - ----- ----------------------- ----------- --------- ------------------- -------------- ------------------------- -------------- ------ -------- --------------- - -
4、使用 code splitting 技巧
code splitting 是一个强大的工具,它可以让应用仅在需要时加载资源。它可以将代码分割为几个独立的部分并像小块一样加载,避免在主 bundle 中打包过多的资源。通过设置 entry
配置选项和使用 import()
动态加载语法,可以轻松地使用 code splitting。
const login = () => { import(/* webpackChunkName: "login" */ './login.js').then(Login => { new Login($('#login')) }) }
5、避免在输出文件中使用 NodeJS 模块
在输出的 bundle 中使用使用 NodeJS 模块会引起不必要的代码,增大输出文件的大小并可能在浏览器中引起问题,应该避免这一做法。在 webpack 配置文件中,可以防止 NodeJS 依赖项被 webpack 打包进输出文件中。
module.exports = { target: 'web' }
二、React 如何更高效
1、使用 PureComponents 减少更新的组件
React 中的 PureComponents 是纯函数式组件,它们的输出可由它的 props 和 prevState 完全决定,因此每次传递给它们的 props 改变时,它们都将重新渲染。这样,一旦没有 props 改变,是不需要重新渲染的。通过优化 shouldComponentUpdate
函数和使用 PureComponents,可以显着提高 React 应用的性能。
import React, { PureComponet } from 'react'; class ListView extends PureComponent { //... }
2、合并各种生命周期函数
在 React 中,每个组件都有一系列 react 生命周期钩子函数,它们包括 componentDidMount
, componentDidUpdate
以及 componentWillUnmount
。这样,当组件的 props 或状态更改时会发生很多生命周期调用,他们的执行过程相互独立。如果能够将更新生命周期一起处理,就可以提高更新效率。
-- -------------------- ---- ------- ----- ---------------- ------- --------------- - ------------------ - ------------- ---------- - - -------- - -- ---------------- - ---------------------------- ----------------- - ----------------------------- - ------------- - --------------- -------- ------------------ - - --- - -------------- - -- --- - ------------------- - -- --- - -------- - ------ - ---- --------------------------- ------ ------- ------- -- ------------------------ ------ -- - -
3、使用 React.memo 改进性能
React.memo 的实现方式与 PureComponent 类似。但 memo 可以用于显式地进行高阶组件包装,并确保仅在父组件的 props 发生更改时,它才会重新渲染子组件。这就是告诉 React 如果组件是幂等的,就不要重新渲染组件。
const MyComponent = React.memo(function MyComponent(props) { /* render using props */ });
4、优化列表的更新
React 中,当列表中某个元素的状态改变时,该列表中的每个元素都会重新呈现。为了避免这种情况,应该使用 key 属性描述列表项,以告诉 React 每个元素的标识符。这样,React 将会更容易地更新变化的列表项,而不是更新整个列表。
-- -------------------- ---- ------- ----- -------- ------- --------------- - -------- - ------ - ---- -------------------------- -- - ----- ------------- --------- -- --- ----- -- - -
结论
React 对于前端开发来说,已经成为了一种不可或缺的工具。与此同时,Webpack 也为 React 提供了丰富的功能和优化,减小了客户端软件包的大小和提高了性能。本文介绍了一些 React 和 Webpack 应用的优化技巧,虽说技巧单一,但是组合起来,却能增强你 React 应用的性能和效率,提供高效优质的体验。希望以上的知识点能对你有所帮助,欢迎您添加评论反馈和更多讨论。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672da86beedcc8a97c858e81