Всем привет, я Кэссон.
Когда я вчера с удовольствием бродил по Интернету, я увидел оценку фреймворка, и эффект был действительно взрывным.
для автораReact
а такжеSolid.js
разработал то же самоеDemo
. ПочемуSolid.js
а такжеReact
Давайте сравним, посмотримSolid.js
изAPI
:
-
Hooks
-
Контекст, API портала
-
Error Boundaries
не могу сказать иReact
Сходств много, можно только сказать, что они одинаковые. а такжеSolid.js
также использоватьJSX
описать вид, поэтомуReact
заявление о переходе наSolid.js
Стоимость приложения небольшая.
А как насчет конкретных результатов оценки?Разница в 3 раза быстрее.Эта волнаReact
фактически был нацелен.
Ссылка в этой статьеSolidJS vs React: I've Built the Same App On Both Libraries.
почему такая большая разница
Кратко представить этоDemo
, который изначально отображает пустой список:
первыйmount
После завершения инициируйте запрос на отображение данных списка:
Вот два приложенияChrome Dev Tools Performance
Результаты панели:
Некоторые ключевые показатели описаны ниже:
-
Загрузка: время, необходимое для инициирования сетевого запроса и анализа HTML.
-
Скрипты: анализ, компиляция, выполнение
JS
время (включая время сборки мусора) -
Рендеринг:
style
а такжеlayout
рассчитать -
Картина:
paint
,composite
, расшифровать картинку
конкретные проблемыScripting
, осталось 475 мс (React
), справа 176 мс (Solid.js
)
Разрыв более чем в 2 раза, значит преувеличен?
В чем проблема
Рабочий процесс интерфейсной среды можно описать тремя простыми шагами:
-
триггерное взаимодействие
-
На что влияют вычислительные взаимодействия
DOM
-
воплощать в жизнь
DOM
действовать
Взаимодействие здесь может быть первым рендерингом экрана, изменением состояния, вызванным кликом, запросом данных...
существуетReact
, шаг 2 выполняется во время выполнения, а вSolid.js
делается во время компиляции.
В частности, этот шагReact
известный какreconcile
, более известный как虚拟DOM
изdiff
алгоритм.
существуетPerformance
под панельюCall Tree
можно увидеть в реализацииXHR Load
(запрос данных списка) перед очень трудоемкой операцией (Function Call
), операцияreconcile
.
пока вSolid.js
В приложении нет такой трудоемкой операции:
Во время компиляцииSolid.js
будуJSX
скомпилировать прямо в状态
а также操作DOM的方法
отношение между.
из-заJSX
слишком гибкий, чтобы иметь больше подсказок, чтобы установить это соединение во время компиляции,Solid.js
существуетReact
оригинальныйJSX
компонент обеспечивает некоторые控制流组件
:
В качестве примера можно привести следующее遍历列表项
Различия в реализации в двух фреймворках:
// React
<ul>
{list.map(
item => <li>{item.name}</li>
)}
</ul>
<ul>
// Solid.js
<ul>
<For each={list}>
{(item) => <li>{item.name}</li>}
</For>
</ul>
For
компонент заменяетJS
массив вmap
метод.
когдаSolid.js
Это делается во время компиляции, и только шаги 1 и 3 фактически выполняются для каждого обновления во время выполнения, экономя большую часть времени на шаге 2.
несмотря на то чтоReact
правильноreconcile
Существуют стратегии оптимизации, но по мере увеличения размера приложения или неполного соблюдения участниками проекта лучших практик это неизбежно приведет к тому, что на шаг 2 будет тратиться все больше и больше времени.
Solid.js
построить заранее状态
а также操作DOM的方法
Хотя для сохранения этой корреспонденции во время выполнения требуется больше памяти, это экономит большую часть времени шага 2, который является типичной стратегией пространства во времени.
Суммировать
Сказав все это, хотя кажетсяSolid.js
В сравненииReact
Есть плюсы в некоторых аспектах фреймворка, но это не качаетReact
доминирование.
после всего,React
Быть настолько популярным не имеет никакого отношения к тому, счастлив он или нет, экологическое процветание сообщества является самым важным.
Есть еще одна интересная вещь, вот две в текстеDemo
адрес:
Demo
данные, полученные изAPI
Доменное имяrickandmortyapi.com
а вообще есть такой сайт...
Добро пожаловатьИсследовательская группа по разработке высококачественных интерфейсных фреймворков, с мухой