React.JS Повышение производительности в целом - PullRequest
1 голос
/ 09 мая 2019

Какие общие советы и рекомендации, которые вы лично знаете и тестировали, помогают улучшить производительность в компоненте React.js?

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Лично лучший совет, который я могу дать, - это избегать написания логики, которая часто обновляет ваше состояние компонента. Вы не хотите, чтобы ваш компонент постоянно вызывал this.setState({}), поскольку он создает искаженную задержку, которая может повлиять на ваше приложение как визуально, так и на производительность.

Определенно не пишите такие вещи, как:

componentDidUpdate(){
   this.setStatE({
      field: this.props.newData
   })
}

Но, хотя и по этой теме, используйте методы жизненного цикла, в частности componentDidMount() и componentDidUpdate(), которые невероятно полезны для управления логикой внутри вашего компонента. В некотором смысле они также могут улучшить ваш компонент, предоставив ему своего рода механизм дыхания для обработки данных.

Наконец, это более-менее предпочтительный вариант, но если вы хотите иметь хорошую читабельность кода, я бы предложил создать функцию для генерации разметки, а не писать ее непосредственно в методе рендеринга.

Учитывая следующий код:

import React from "react"

class Example extends React.Component{
    state = {
      tests: [{id: 1, name: "test1"}, {id: 2, name: "test2"}, {id: 3, name: "test3"}]
    }

    render(){
      const tests = this.state.tests
      return(
         <div>
            { tests.length > 0 && tests.map((test) => {
               return <div>{test.name}</div>   
             })}
         </div>
      )
    }
}

Этот код прекрасно работает, как есть, но вы можете упростить чтение для кого-то другого, просто сделав другую функцию для разметки.

Исправленный вариант:

import React from "react"

class Example extends React.Component{
    state = {
      tests: [{id: 1, name: "test1"}, {id: 2, name: "test2"}, {id: 3, name: "test3"}]
    }

    createTests = () => {
       const tests = this.state.tests
       if(tests.length > 0){
          return tests.map((test) => {
               return <div>{test.name}</div>
          })
       }
    }

    render(){
      const tests = this.state.tests
      return(
         <div>
             {this.createTests()}
         </div>
      )
    }
}

Делает то же самое, но теперь очень ясно, что мы пытаемся достичь в нашем методе рендеринга.

0 голосов
/ 09 мая 2019

Существует множество вариантов оптимизации приложения React, слишком много, чтобы покрыть один ответ.Мой совет здесь: запустите приложение, откройте DevTools и зайдите в Audit, запустите тест Lighthouse.Тест покажет некоторые действия, которые можно выполнить для оптимизации вашего кода, а также ресурсы для чтения.

Если у вас есть более конкретные вопросы, задавайте их.Ваш текущий вопрос слишком сложен, чтобы покрыть его одним ответом.Или почтовый индекс, который вы хотите оптимизировать.

0 голосов
/ 09 мая 2019

Есть несколько вещей, которые мы реализовали.Мы использовали один плагин, чтобы выяснить, сколько у нас потраченного рендера, и это было 60%.Для решения этой проблемы мы сделали несколько вещей.1. Мы можем использовать жизненный цикл, чтобы выяснить, есть ли какие-либо изменения в свойстве.2. Минимизация родительских дочерних отношений между компонентами.3. Если для управления состоянием мы используем какой-либо излишек, то у нас должен быть подключен компонент верхнего уровня для хранения и передачи данных в качестве реквизитов дочернему компоненту.4. Для асинхронного вызова следует позаботиться о размещении, если мы хотим, чтобы оно было в compoentDidMount или ComponentWillmount, как если бы данные асинхронного вызова требовались в дочернем компоненте или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...