SlideShare a Scribd company logo
1 of 27
Download to read offline
ReactJS under the hood
Поршнева Катерина
2016
React re-renders the whole app on any data
(state) change
DOM is slow, JavaScript is fast.
DOM is slow, JavaScript is fast.
Виртуальный DOM
Легковесная копия реального DOM в
виде JavaScript объектов
Виртуальный DOM
<Nav color="blue">
<Profile>
Katya
</Profile>
</Nav
React.createElement(
Nav,
{color:"blue"},
React.createElement(
Profile,
null,
"Katya"
)
);
до после
JSX
При каждом изменении
React строит новое виртуальное DOM-дерево
Сравнивает с предыдущим
Рассчитывает минимальное количество изменений
DOM-дерева и добавляет их в очередь
Применяет все изменения к реальному DOM-дереву
• Эффективные алгоритмы сравнения
• Группировка операций чтения/записи при
работе с DOM
• Эффективное обновление только под-деревьев
• Эффективная работа со списками элементов
Сравнение DOM-деревьев
Списки
Списки
Списки
Списки
а
а
b
b
с
сd
keys
var blog = articles.map(function(article) {
return (
<div key={article.id}>
<h1>{article.title}</h1>
<p>{article.text}</p>
</div>
);
})
Batching
setState()
shouldComponentUpdate(nextProps, nextState) {
return this.props.name !== nextProps.name;
}
shouldComponentUpdate()
=== false
События
onClick
onClick
onClick
onClick
onClick
onClick
onClick
onClick
onClick
Делегирование событий
Спасибо за внимание!
😊

More Related Content

What's hot

«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
Александр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWSАлександр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWSmeet_magento
 
Sql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migrationSql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migrationAnatoly Popov
 
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + ReduxFrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + ReduxFrontDays
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Asynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman GorelAsynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman GorelSphere Consulting Inc
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix
 
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"GeeksLab Odessa
 
DevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System AdministratorDevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System AdministratorJetBrains Russia
 
CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...
CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...
CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...CodeFest
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo CabinetSPBRUBY
 
DevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCity
DevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCityDevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCity
DevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCityJetBrains Russia
 
Реализация нагруженных и отказоустойчивых систем
Реализация нагруженных и отказоустойчивых системРеализация нагруженных и отказоустойчивых систем
Реализация нагруженных и отказоустойчивых системRuslan Safin
 
Big switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftBig switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftAlexander Byndyu
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JSFestUA
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Ontico
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездамLev Goncharov
 

What's hot (19)

«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
Drupal and NodeJS.
Drupal and NodeJS.Drupal and NodeJS.
Drupal and NodeJS.
 
Александр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWSАлександр Усунов (TagesJump) - Magento в AWS
Александр Усунов (TagesJump) - Magento в AWS
 
Sql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migrationSql Server: Database Mirroring -> Availability group migration
Sql Server: Database Mirroring -> Availability group migration
 
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + ReduxFrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
FrontDays #2. Игорь Лобанов, Миграция Backbone (Marionette) -> React + Redux
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Asynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman GorelAsynchronous Applications in Ruby. Roman Gorel
Asynchronous Applications in Ruby. Roman Gorel
 
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
 
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
 
DevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System AdministratorDevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System Administrator
 
CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...
CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...
CodeFest 2013. Могелашвили Г. — Мобильные сервисы, блобы и Windows 8. Храним ...
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo Cabinet
 
DevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCity
DevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCityDevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCity
DevOps в команде TeamCity. Евгений Кошкин, Senior Software Developer, TeamCity
 
Реализация нагруженных и отказоустойчивых систем
Реализация нагруженных и отказоустойчивых системРеализация нагруженных и отказоустойчивых систем
Реализация нагруженных и отказоустойчивых систем
 
Big switch: жизнь после Microsoft
Big switch: жизнь после MicrosoftBig switch: жизнь после Microsoft
Big switch: жизнь после Microsoft
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
 
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
 
A.pleshkov
A.pleshkovA.pleshkov
A.pleshkov
 
от авгиевых конюшен к звездам
от авгиевых конюшен к звездамот авгиевых конюшен к звездам
от авгиевых конюшен к звездам
 

Similar to Доклад "React under the hood"

Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Fedor Lavrentyev
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in RussianOleg Kachan
 
Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза MitinPavel
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015Timur Safin
 
Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...
Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...
Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...Andrey Akulov
 
Эффективный JavaScript - IQLab Frontend Fusion 2012
Эффективный  JavaScript - IQLab Frontend Fusion 2012Эффективный  JavaScript - IQLab Frontend Fusion 2012
Эффективный JavaScript - IQLab Frontend Fusion 2012Ecommerce Solution Provider SysIQ
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentAnton Kirillov
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"MskDotNet Community
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеYandex
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"MobiDev
 

Similar to Доклад "React under the hood" (20)

React + Flux
React + FluxReact + Flux
React + Flux
 
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
Industrial Programming Java - Lection Pack 03 - Relational Databases - Lavren...
 
MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза
 
Full Stack разработка на JavaScript
Full Stack разработка на JavaScriptFull Stack разработка на JavaScript
Full Stack разработка на JavaScript
 
Новости Global summit 2015
Новости Global summit 2015Новости Global summit 2015
Новости Global summit 2015
 
Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...
Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...
Повышение эффективности Java приложений (новые возможности Web Logic 12c, кон...
 
Эффективный JavaScript - IQLab Frontend Fusion 2012
Эффективный  JavaScript - IQLab Frontend Fusion 2012Эффективный  JavaScript - IQLab Frontend Fusion 2012
Эффективный JavaScript - IQLab Frontend Fusion 2012
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...
 
Scala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application DevelopmentScala, SBT & Play! for Rapid Application Development
Scala, SBT & Play! for Rapid Application Development
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
Ruby on Rails. Работа с моделями
Ruby on Rails. Работа  с моделямиRuby on Rails. Работа  с моделями
Ruby on Rails. Работа с моделями
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
Cassandra db
Cassandra dbCassandra db
Cassandra db
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"Вебинар "Оптимизация производительности мобильных веб-приложений"
Вебинар "Оптимизация производительности мобильных веб-приложений"
 

Доклад "React under the hood"