目录
React Profiler 博客 | https://reactjs.org/blog/2018/09/10/introducing-the-react-profiler.html | 英文 |
理解火焰图 | ||
React Profiler API | ||
React 优化手段 | https://www.codementor.io/blog/react-optimization-5wiwjnf9hj |
web性能整体分析工具
Reacr Devtools
依赖条件(最低要求)
不推荐,因为会产生额外的开销
- // 1.Profiler在'react'包中。
- // onRender回调函数返回一系列信息。
- export default function App(): ReactElement {
- const OnRender: (...params: any)=>void=(...params)=>{
- console.log(params)
- params = {
- id, // 发生提交的 Profiler 树的 “id”
- phase, // "mount" (如果组件树刚加载) 或者 "update" (如果它重渲染了)之一
- actualDuration, // 本次更新 committed 花费的渲染时间
- baseDuration, // 估计不使用 memoization 的情况下渲染整棵子树需要的时间
- startTime, // 本次更新中 React 开始渲染的时间
- commitTime, // 本次更新中 React committed 的时间
- interactions // 属于本次更新的 interactions 的集合
- }
- }
- function onRenderCallback(
-
- ) {
- // 合计或记录渲染时间。。。
- }
- return (
- <Profiler id="router" onRender={onRenderCallback}>
- <BrowserRouter>
- <Route path="/" component={Home} />
- BrowserRouter>
- Profiler>
- )
- }
- // 追踪用户行为
- // 安装schedule包,yarn add schedule
- // 在需要追踪的地方嵌入代码
- import { unstable_track as track } from "schedule/track"
- export default class Home extends Component {
- handleSubmit = e => {
- const text = e.target.value.trim()
- if (e.which === 13) {
- track("Add Tode", performance.now(), () => {
- this.props.onSave(text)
- if(this.props.newTode) {
- this.setState({text:})
- }
- })
- }
- }
- }
需在合适的位置(componentWillUnmount)进行销毁,否则易造成内存溢出
不能操作DOM