Skip to content
This repository has been archived by the owner on Feb 13, 2023. It is now read-only.

VKCOM/vkui-benchmarks

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

VKUI - анализ производительности

Сравнение с другими библиотеками (от 30 марта 2021г.)

TLDR:

  • на каждом фреймворке было сделано тестовое приложение, с 3 вариантами экранов
    • default - обычный экран с базовыми компонентами
    • burn (list) - экран с большим списком однотипных интерактивных элементов (500)
    • modals - экран с несколькими открытыми модалками
  • VKUI по показателям +/- на одном уровне с другими библиотеками, сильных просадок, как и сильного превосходства нет
  • Одно из явных проблематичных мест — вложенные Tappable протестированы на большом списке, единственная библиотека в которой есть аналогичный кейс это Material-UI, и VKUI сильно обходит ее по производительности (детали)

Детальный отчет:

Замеры проводятся в LH с конфигурацией по-умолчанию, desktop preset: CPU throttling: 1x slowdown (Simulated) Network throttling: 40 ms TCP RTT, 10,240 Kbps throughput (Simulated) ~ сопоставимо с уровнем флагманского Android устройства

В сторонних приложениях был упор на использование максимально схожих компонентов как у VKUI.

Последний отчёт

Библиотеки использованные для сравнения:

Название библиотеки Сайт/репозиторий библиотеки
VKUI https://github.com/VKCOM/VKUI
Material UI https://material-ui.com/
Yandex UI https://github.com/bem/yandex-ui
Fluent UI https://github.com/microsoft/fluentui
Lightning https://react.lightningdesignsystem.com/
Adobe Spectrum https://react-spectrum.adobe.com/
Ant Design https://ant.design/
Framework7 https://framework7.io

vkui (4.3.0) vs ant:

app type (app link) report performance
vkui (4.3.0) default report 0.99
ant default report 0.99
vkui (4.3.0) modals report 1 🟢
ant modals report 0.99
vkui (4.3.0) list report 0.94 🟢
ant list report 0.89

list: ant не имеет схожего по сложности компонента для отрисовки сложных списков

vkui (4.3.0) vs f7:

app type (app link) report performance
vkui (4.3.0) default report 0.99 🟢
f7 default report 0.98
vkui (4.3.0) modals report 1 🟢
f7 modals report 0.99
vkui (4.3.0) list report 0.94 🟢
f7 list report 0.92

list: Framework7 не позволяет вложить одновременно checkbox и radio в компонент списка (List)

vkui (4.3.0) vs fluent:

app type (app link) report performance
vkui (4.3.0) default report 0.99 🟢
fluent default report 0.94
vkui (4.3.0) modals report 1 🟢
fluent modals report 0.99
vkui (4.3.0) list report 0.94 🔴
fluent list report 0.97

modals: Разница на уровне погрешности

list: Fluent не имеет схожего по сложности компонента для отрисовки сложных списков

vkui (4.3.0) vs lightning:

app type (app link) report performance
vkui (4.3.0) default report 0.99 🟢
lightning default report 0.95
vkui (4.3.0) modals report 1
lightning modals report 1
vkui (4.3.0) list report 0.94 🔴
lightning list report 0.99

list: Lightning не имеет схожего по сложности компонента для отрисовки сложных списков

vkui (4.3.0) vs mui:

app type (app link) report performance
vkui (4.3.0) default report 0.99 🟢
mui default report 0.93
vkui (4.3.0) modals report 1 🟢
mui modals report 0.96
vkui (4.3.0) list report 0.94 🟢
mui list report 0.77

default и modals: Разница незначительная, из-за более длительного First Contentful Paint.

list: При примерно одинаковой загруженности списков в material-ui и VKUI, Average Render Time выигрывает в нашу пользу почти в три раза.

(~1328,6ms в material-ui vs ~476,4ms в VKUI)

List в material-ui image

vkui (4.3.0) vs spectrum:

app type (app link) report performance
vkui (4.3.0) default report 0.99
spectrum default report 0.99
vkui (4.3.0) modals report 1
spectrum modals report 1
vkui (4.3.0) list report 0.94 🔴
spectrum list report 1

list: Spectrum не имеет схожего по сложности компонента для отрисовки сложных списков

vkui (4.3.0) vs yandex:

app type (app link) report performance
vkui (4.3.0) default report 0.99 🔴
yandex default report 1
vkui (4.3.0) modals report 1
yandex modals report 1
vkui (4.3.0) list report 0.94 🔴
yandex list report 1

В первую очередь кажется, что yandex-ui не предназначен для сторонних разработчиков и этому способствует плохая документация. default: Разница на уровне погрешности

list: Yandex-UI не имеет схожего по сложности компонента для отрисовки сложных списков

Подводные камни

В репортах у нас имеется показатель CPU/Memory Power, который не разительно, но отличается в зависимости от воркеров, которые нам может дать GitHub. Из-за этого имеются погрешности в пределах 0,01-0,03, о них нам известно и планируем их устранить.

При 4x slowdown:

  • Мы местами обыгрываем и равняемся по показателям на material-ui;
  • В странице с модальными окнами уделываем yandex-ui;
  • Проигрываем/примерно равны Framework7, у него меньше элементов в DOM списков, но разницу создает невозможность корректно вложить в List одновременно radio и checkbox.

CPU/Memory power может в этом кейсе весомо влиять на результаты

Почему Lighthouse?

Lighthouse - официальный инструмент для измерения Web Vitals и де-факто является стандартом индустрии для оценки производительности в вебе.

Что можно улучшить?

  • LH ругается на styles.css из VKUI из-за большого количества неиспользуемых стилей и они-же замедляют First Contentful Paint

Два CSS чанка, один из которых весит 27,5 Кб

Related: #1335

  • Напрягает показатель Performance в списке с Cell из-за высокой нагруженности Tappable. В примере используется 500 одинаковых по сложности Cell: selectable, в before Avatar, в after IconButton, не disabled.

Важно отметить - CPU throttling при бенчмарке выкручен на 4x slowdown. ~ На уровне бюджетно-среднего Android устройства.

4,2s до возможности использовать приложение. В реальных условиях 500 Cell не нужны, но для каких-нибудь приложений с бесконечными списками это может иметь явное значение (Юла, Работа ВК и пр.)

Related issues: #816, #1442, #1443

  • Можно добавить в наш template упаковку с помощью compress-create-react-app, большинство хостингов статики должны поддерживать передачу gzip, в Ubuntu 20.04 (nginx.conf) она включена по-умолчанию. Это довольно сильно влияет на показатель Performance в LH.

Output после выполнения compress-cra

Github Pages поддерживает gzip

Версии пакетов

"@vkontakte/icons": "^1.82.0",
"@vkontakte/vk-bridge": "^2.4.0",
"@vkontakte/vk-bridge-mock": "^2.1.0",
"@vkontakte/vkjs": "^0.20.0",
"@vkontakte/vkui": "4.3.0",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-scripts": "4.0.2"

На момент тестирования брались свежие версии библиотек

Average Render Time

Default Burn Modals
VKUI ~37,82ms ~457,88ms ~20,7ms

Production-profiling сборка, без троттлинга. Замеры проводились с помощью react-devtools, среднее арифметическое из 5 замеров.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published