smalljs$molПоиск⌘ KДокументацияПесочницаСравнениеЭкосистемаО проектеRU

React vs Solid

Выиграно категорий из 6: у Solid — 5, у React — 1, ничьих noneПограничные случаи попадают в зачёт, когда вы запустите живые тесты ниже. Они измеряются в вашем браузере, а не хранятся здесь.

Пограничные случаи

Ещё не запускали
Четыре обычные ситуации, которые идут бок о бок прямо в вашем браузере. Нажмите «Запустить» на кейсе и посмотрите, что произойдёт: здесь ничего не записано заранее.Устаревший ответ затирает свежийЩёлкайте по списку быстрее, чем отвечает сервер.ЗапуститьReactЕщё не запускалиThe effect calls setState with whatever the request returns, with no cancellation. Ignoring a response that is no longer current takes a cancel flag or an AbortController inside the effect.SolidЕщё не запускалиПоказать код10 000 строк разной высотыПрокрутите длинный список, где у каждой строки своя высота.ЗапуститьReactЕщё не запускалиEvery row is rendered by a plain .map() over the data. Rendering only the rows on screen takes a virtualization library and a way to measure each row, since the heights differ.SolidЕщё не запускалиПоказать кодПодписки после 100 циклов монтированияСмонтируйте и размонтируйте подписанный компонент сто раз.ЗапуститьReactЕщё не запускалиThe effect subscribes and returns nothing. Releasing the subscription takes a cleanup function returned from every effect that subscribes.SolidЕщё не запускалиПоказать кодОдин битый элемент роняет всё деревоПодложите битые данные в одну карточку из двадцати.ЗапуститьReactЕщё не запускалиWith no ErrorBoundary above it, a throw during render takes the whole tree down. Keeping the rest of the list on screen takes an ErrorBoundary component around every part that may throw.SolidЕщё не запускалиПоказать код

Код

React: 1 из 4, Solid: 3 из 4 · впереди Solid
Сколько тут читать и какая часть этого — чужая.ReactSolidLines of code (TodoMVC)Не учитывается: нет данных по SolidFewer lines to read when someone else picks the project up. Counts the code you write and maintain yourself, not a stylesheet you installed from npm.npm packages shipped31Solid на 67% ниже, чем ReactHow many npm packages end up inside the bundle the browser downloads. This is code your users execute, not code your build machine reads.Distinct `node_modules/<package>` paths in the `sources` of the production build sourcemaps. Scaffolded on 2026-08-13 with each framework's own getting-started command: react `npm create vite@latest app -- --template react-ts`; vue `npm create vue@latest app -- --default`; svelte `npx sv create app --template minimal --types ts --no-add-ons --install npm`; solid `npm create solid@latest app -- --vanilla --ts --template basic`; angular `npx @angular/cli@21 new app --defaults --skip-git --package-manager=npm`; $mol `git clone --depth 1 https://github.com/hyoo-ru/mam.git app && npm install`. For $mol, the sourcemap of the deployed todomvc.hyoo.ru bundle.Reactreact.dev/learn/build-a-react-app-from-scratch2026-08-13Soliddocs.solidjs.com/quick-start2026-08-13Dev dependencies declared95Solid на 44% ниже, чем ReactPackages the starter project names in its own package.json. Build-time tooling included: this is the list your development environment inherits, not what reaches the browser.Entries in `dependencies` plus `devDependencies` of a fresh starter project. Scaffolded on 2026-08-13 with each framework's own getting-started command: react `npm create vite@latest app -- --template react-ts`; vue `npm create vue@latest app -- --default`; svelte `npx sv create app --template minimal --types ts --no-add-ons --install npm`; solid `npm create solid@latest app -- --vanilla --ts --template basic`; angular `npx @angular/cli@21 new app --defaults --skip-git --package-manager=npm`; $mol `git clone --depth 1 https://github.com/hyoo-ru/mam.git app && npm install`.Reactreact.dev/learn/build-a-react-app-from-scratch2026-08-13Soliddocs.solidjs.com/quick-start2026-08-13Dev packages installed3570React на 50% ниже, чем SolidHow many separate packages npm resolves into node_modules on a clean checkout. Each one is an author your build trusts, and every CI run downloads all of them.Distinct name+version pairs in `npm ls --all` after scaffolding and installing the starter project. Scaffolded on 2026-08-13 with each framework's own getting-started command: react `npm create vite@latest app -- --template react-ts`; vue `npm create vue@latest app -- --default`; svelte `npx sv create app --template minimal --types ts --no-add-ons --install npm`; solid `npm create solid@latest app -- --vanilla --ts --template basic`; angular `npx @angular/cli@21 new app --defaults --skip-git --package-manager=npm`; $mol `git clone --depth 1 https://github.com/hyoo-ru/mam.git app && npm install`.Reactreact.dev/learn/build-a-react-app-from-scratch2026-08-13Soliddocs.solidjs.com/quick-start2026-08-13node_modules size80.9 MB65 MBSolid на 20% ниже, чем ReactDisk footprint of a fresh checkout. None of it ships to the browser, but all of it is downloaded by every CI run and every new machine on the team.`du -sk node_modules` after scaffolding and installing the starter project. Scaffolded on 2026-08-13 with each framework's own getting-started command: react `npm create vite@latest app -- --template react-ts`; vue `npm create vue@latest app -- --default`; svelte `npx sv create app --template minimal --types ts --no-add-ons --install npm`; solid `npm create solid@latest app -- --vanilla --ts --template basic`; angular `npx @angular/cli@21 new app --defaults --skip-git --package-manager=npm`; $mol `git clone --depth 1 https://github.com/hyoo-ru/mam.git app && npm install`.Reactreact.dev/learn/build-a-react-app-from-scratch2026-08-13Soliddocs.solidjs.com/quick-start2026-08-13

Вес и загрузка

React: 0 из 1, Solid: 1 из 1 · впереди Solid
Что скачивает браузер и сколько ждёт, прежде чем страница начнёт откликаться.ReactSolidTodoMVC bundle, gzipНе учитывается: нет данных по SolidWhat the browser actually downloads for a small but complete application, compressed the way a server would send it.Startup transfer274 KB150 KBSolid на 45% ниже, чем ReactBytes pulled over the network before the benchmark application is usable. Same application in every column, so the difference is the framework.Lighthouse total byte weight for the js-framework-benchmark application, reported as benchmark 34_startup-totalbytes. Transfer size, not gzip specifically.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05

Скорость

React: 1 из 7, Solid: 6 из 7 · впереди Solid
Сколько изменения идут до экрана и сколько памяти при этом удерживается.ReactSolidCreate 1,000 rows224 ms153 msSolid на 32% ниже, чем ReactTime to put a thousand fresh rows on the screen. This is the wait after hitting a filter or opening a list.js-framework-benchmark 01_run1k, arithmetic mean of 10 runs.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05Partial update1,263 ms992 msSolid на 21% ниже, чем ReactTouching every tenth row of a thousand, sixteen times. This is where a framework either finds the changed rows or re-checks everything.js-framework-benchmark 03_update10th1k_x16, arithmetic mean of 10 runs.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05Swap two rows1,505 ms181 msSolid на 88% ниже, чем ReactTwo rows trade places out of a thousand. The ideal answer is two DOM moves, and the gap here shows who gets close to it.js-framework-benchmark 05_swap1k, arithmetic mean of 10 runs.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05Remove one row37.2 ms45.3 msReact на 18% ниже, чем SolidDeleting a single row out of a thousand. The smallest possible change, so it measures the fixed cost of reacting at all.js-framework-benchmark 06_remove-one-1k, arithmetic mean of 10 runs.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05Memory after load1.44 MB1.22 MBSolid на 15% ниже, чем ReactHeap the framework occupies with nothing on the page yet.js-framework-benchmark 21_ready-memory, single run.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05Memory with 1,000 rows4.24 MB1.94 MBSolid на 54% ниже, чем ReactHeap once a thousand rows are on screen. On a phone this is the difference between staying alive in the background and being killed.js-framework-benchmark 22_run-memory, single run.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05Startup blocking time102 ms20.7 msSolid на 80% ниже, чем ReactHow long the main thread is busy during startup, so taps and scrolls do nothing.js-framework-benchmark 32_startup-bt (Lighthouse total blocking time), arithmetic mean of 4 runs.Reactnin-jin.github.io/…/table.html2022-02-05Solidnin-jin.github.io/…/table.html2022-02-05

Из коробки

React: 0 из 10, Solid: 1 из 10 · впереди Solid
Идёт ли это в комплекте с фреймворком или за этим нужно идти в библиотеку.ReactSolidRouterНетДау Solid есть, у React нетWhether URLs and navigation come from the framework project itself, or you go pick a library and own that choice forever.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project publishes and documents a routing solution of its own. No when its own docs send you to a third-party project instead.Reactreact.dev/learn/creating-a-react-app2026-08-13Soliddocs.solidjs.com/solid-router2026-08-13LocalizationНетНетнет ни у того, ни у другогоTranslating an application is rarely planned at the start and always arrives later.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project publishes and documents localization of its own. An official CLI add-on that wires up somebody else’s i18n library is a no, because the library is still somebody else’s.Reactreact.dev/reference/react2026-08-14Soliddocs.solidjs.com2026-08-14ThemingНетНетнет ни у того, ни у другогоDark mode and brand colours without inventing your own CSS variable convention.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project publishes and documents a theming mechanism of its own. No when the word does not appear in its official API reference, which is the page linked, so the absence can be checked directly.Reactreact.dev/reference/react2026-08-13Soliddocs.solidjs.com2026-08-13List virtualizationНетНетнет ни у того, ни у другогоLong lists stay smooth because off-screen rows are never rendered. Without it, someone eventually bolts a library onto a list that already shipped.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project publishes and documents lazy or virtual rendering of long lists. No when no such component appears in its API reference.Reactreact.dev/reference/react2026-08-14Soliddocs.solidjs.com2026-08-14Offline supportНетНетнет ни у того, ни у другогоA service worker set up by the framework rather than copied from a blog post.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project ships the service worker integration: a module it builds and registers for you. No when the docs only show where to drop your own sw.js and how to register it with the browser API, because that is the browser’s feature rather than the framework’s.Reactreact.dev/reference/react2026-08-14Soliddocs.solidjs.com/…/service-workers2026-08-14Server renderingДаДаесть у обоихRendering to HTML on the server, for search engines and for the first paint.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project publishes and documents a server rendering API of its own. No when its published module list contains no such module.Reactreact.dev/…/server2026-08-13Soliddocs.solidjs.com/…/render-to-string2026-08-13Tests without a DOMНетНетнет ни у того, ни у другогоComponents testable as plain objects, with no browser and no jsdom to boot up first.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when a component can be instantiated and asserted on with no document in play — the test never reaches for one. No when a DOM has to exist before a component can render at all, which is what every official testing guide here prescribes when it tells you to install jsdom, happy-dom or a browser. The question is whether a DOM is required, not whether the runtime happens to have one available: a runtime that provides a document nobody asks for does not make the test a DOM test.Reactreact.dev/warnings/react-test-renderer2026-08-13Soliddocs.solidjs.com/guides/testing2026-08-13Dependency injectionДаДаесть у обоихSwapping a real service for a fake one in a test without touching the component that uses it.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project documents a way to hand a component a value from outside it and replace that value later, in a test or in another host. Context APIs count: the bar is a documented mechanism, not a particular shape of container.Reactreact.dev/learn/passing-data-deeply-with-context2026-08-14Soliddocs.solidjs.com/…/create-context2026-08-14FormsДаДаесть у обоихValidation, dirty state and submission handled by the framework instead of a fourth form library per team.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when that project documents a form API that goes past binding one input to one variable, covering at least submission handling or validation state. Two-way binding on its own is a no.Reactreact.dev/…/form2026-08-14Soliddocs.solidjs.com/…/action2026-08-14Typed templatesДаДаесть у обоихA typo in a template is caught by the compiler, not by a user.Built in means the framework project ships it itself: its own package, or one the same team maintains and publishes as official. A library from anyone else counts as no, however popular or de-facto standard it has become, which is why routing is a yes for Angular and a no for React. The same cut is applied to all six frameworks, and every value links to the official page it was read from. Yes when the framework’s official TypeScript documentation covers type checking of its template or view layer.Reactreact.dev/learn/typescript2026-08-13Soliddocs.solidjs.com/configuration/typescript2026-08-13

Экосистема и рынок

React: 4 из 4, Solid: 0 из 4 · впереди React
Насколько легко нанять под это людей, найти ответ в поиске и взять готовую деталь.ReactSolidGitHub stars247,21835,816React — это 6.9× от SolidA popularity signal, and nothing more. It says how many people bookmarked the repository, not how many shipped with it.`stargazers_count` from the GitHub API for the repository that holds the framework's current source.Reactgithub.com/react/react2026-08-13Solidgithub.com/solidjs/solid2026-08-13npm downloads163,083,190 per week3,456,458 per weekReact — это 47.2× от SolidThe closest thing to a usage count. Inflated by CI runs, but inflated the same way for everyone.npm registry downloads for the last full week, for the package you install to use the framework.Reactapi.npmjs.org/…/react2026-08-13Solidapi.npmjs.org/…/solid-js2026-08-13Stack Overflow questions473,925323React — это 1467.3× от SolidHow likely it is that your problem was already asked and answered by someone else.Question count of the framework's Stack Overflow tag, via the Stack Exchange API.Reactstackoverflow.com/…/reactjs2026-08-13Solidstackoverflow.com/…/solid-js2026-08-13npm maintainers21React — это 2× от SolidHow many people can publish a release. A low number is a bus factor.Length of the `maintainers` array in the npm registry metadata of the framework's primary package.Reactregistry.npmjs.org/react2026-08-13Solidregistry.npmjs.org/solid-js2026-08-13

Стоимость владения

React: 0 из 3, Solid: 1 из 3 · впереди Solid
Чего дерево зависимостей и история релизов просят с годами.ReactSolidAdvisories in shipped packages00у обоих одно и то же значениеKnown vulnerabilities in the packages that reach the browser. These execute on your users’ machines, which makes them a different class of risk from anything in the build toolchain.Each shipped package, at its installed version, queried against the OSV database. Counts packages carrying at least one advisory.Reactreact.dev/learn/build-a-react-app-from-scratch2026-08-13Soliddocs.solidjs.com/quick-start2026-08-13Advisories in the dev tree00у обоих одно и то же значениеKnown vulnerabilities in the packages a fresh checkout installs. These run on developer and CI machines rather than in the browser, but somebody still has to triage every one.Total reported by `npm audit` on the starter project, straight after scaffolding it. Scaffolded on 2026-08-13 with each framework's own getting-started command: react `npm create vite@latest app -- --template react-ts`; vue `npm create vue@latest app -- --default`; svelte `npx sv create app --template minimal --types ts --no-add-ons --install npm`; solid `npm create solid@latest app -- --vanilla --ts --template basic`; angular `npx @angular/cli@21 new app --defaults --skip-git --package-manager=npm`; $mol `git clone --depth 1 https://github.com/hyoo-ru/mam.git app && npm install`.Reactreact.dev/learn/build-a-react-app-from-scratch2026-08-13Soliddocs.solidjs.com/quick-start2026-08-13Breaking releases in 3 years10у Solid ноль, у React 1Major versions shipped since 2023. Every one of them is a migration someone on the team pays for.Count of major semver versions of the framework's primary npm package first published in the last three years. Left blank for packages that do not use semver majors.Reactregistry.npmjs.org/react2026-08-13Solidregistry.npmjs.org/solid-js2026-08-13

Как это измеряется

Каждое значение здесь взято из измерения или из внешнего источника и несёт с собой ссылку и дату, когда оно снято. Метрика идёт в зачёт категории только тогда, когда её публикуют оба фреймворка: иначе тот, у кого таблица полнее, выигрывал бы за счёт полноты данных, а не за счёт самих чисел. Там, где ещё никто не измерял, строка так и говорит, вместо того чтобы гадать.Методика и источники на GitHub

Предложить фреймворк

Какого-то не хватает? Назовите его и заведите issue. Добавить фреймворк — это файл данных с измерениями и, для живых тестов, страница-runner: и то и другое лежит в репозитории рядом с теми, что уже есть.Завести issue
Type to search the documentation.