Мое приложение использует графически сложные интерактивные элементы управления. Они работают медленно на старых устройствах. Фактический рендеринг быстрый и профилирование приложения в Инструментах показывает, что большая часть работы выполняется в executeJSCall
, предполагая, что проблема заключается в javascript или в сериализации моста. Какие инструменты я могу использовать, чтобы сузить его?Профилирование JS с помощью React Native
ответ
Встроенная Systrace RN не содержит полезной информации о том, что происходит в приложении. По моим наблюдениям, он показывает много внутренних действий React Native, но это напрямую не помогает точно определить фактический код в приложении.
Slowlog дал мне больше информации о том, где искать узкие места для производительности. Он измеряет уровень функции, который имеет свои пределы, но лучше, чем Systrace.
Также проверьте this SO answer.
На подвижной стороне, мы можем использовать RCTRenderingPerf для измерения времени используется/впустую для установки/обновления определенного компонента Импорт Perf
import PrefMonitor from 'react-native/Libraries/Performance/RCTRenderingPerf';
измерения Начало
PrefMonitor.toggle();
PrefMonitor.start();
измерения Стоп и распечатать Результаты
PrefMonitor.stop();
Вам не нужно явно вызывать метод печати для печати результатов, stop()
уже рассмотрел это. Вы также можете использовать systrace
для проверки производительности Android UI https://facebook.github.io/react-native/docs/performance.html#profiling
Убедитесь, что включен Debug on remote JS
нажатием command+D
и выберите Debug remote JS
, он будет показывать время рендеринга таблицы на основе для каждого компонента компонента и вложенная ребенка
Ниже приведен исходный код для его подключения в App.js
export default class App extends React.Component {
constructor(props){
super(props)
this.state= {index:1}
}
_setIndex(idx){
PrefMonitor.toggle();
PrefMonitor.start();
this.setState({index:idx})
}
componentDidUpdate(){
PrefMonitor.stop();
}
render() {
return (
<View style={styles.container}>
<Text>Welcome to react-native {helloWorld()}</Text>
<Text>Open up App.js to start working on your app!</Text>
<Text>Changes you make will automatically reload.</Text>
<Text>Shake your phone to open the developer menu.</Text>
<Button title="click me to see profiling in console log" onPress={()=> this._setIndex(2)}/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});
- 1. React JS v React Native
- 2. React Native - Что возможно и невозможно с помощью React Native?
- 3. React-Native-Meteor update React-Native 0.33
- 4. React native load css и js Webview
- 5. React Native - initialProperties Android
- 6. Draft.js и React Native
- 7. SHA256 in React Native
- 8. React Native и Parse.FacebookUtils
- 9. React-Native: Необработанный модуль исключения JS «555»
- 10. Использование файлов свойств JS в React Native
- 11. React Native, Auto update .js files
- 12. React-Native pass Textinputvalue для других js
- 13. IOS - React Native - Unhandled JS Exception: SyntaxError
- 14. React Native XCode js files in tabs
- 15. React Native - вызов Webview React Native function
- 16. Обновление эфира с помощью React Native
- 17. Получить часовой пояс с помощью React Native
- 18. Автомасштабирование изображения с помощью React Native
- 19. компонентов Overlay с помощью React Native
- 20. Поиск и фильтрация с помощью React Native
- 21. Извлечение геолокации с помощью React Native
- 22. Приложение не аутентифицируется с помощью React-Native
- 23. Email с помощью React Native Android
- 24. Как реализовать firebase с помощью React native?
- 25. Реализовать Google+ с помощью React Native
- 26. Запись эспрессо-тестов с помощью React Native
- 27. React Native с Socket.io
- 28. React-native с Android Studio
- 29. Как повторно использовать компонент React JS in React Native
- 30. React-Native: Dismiss/Exit React-Native View back to Native
Любое повезение в том, чтобы выяснить путь к профилю JS? Я столкнулся с аналогичной проблемой. – Karthik207
Да, если вы откроете меню отладки и коснитесь Start Systrace, он начнет профилирование. Тогда просто прекратите, когда закончите. Однако отчеты сначала не открываются. Проверьте [здесь] (http://stackoverflow.com/questions/16644116/unable-to-view-html-trace-report-generated-by-systrace-tool-in-android-sdk). –