🧑‍🏫 Почему «BigO» так важен в «Web Performance»?

В этом треде автор постарается объяснить, почему в «Web Perf» нет места хакам, а подебажить алгоритм на бумаге — это круто.
📝 Disclaimer

Автор треда — адепт старой школы и в 2k21 зачем-то учится в универе, хотя это уже не модно. Убеждён, что если у тебя нет фундаментальных знаний, то «инженером» называть себя не стоит. Примерно о том же говорит и Wikipedia в определении «Engineer». Image
Я не уверен, знают ли ребята без фундаментального образования, как обозначается блок модификации на блок-схеме, да и о чём он вообще.

Алгоритмизация закаляется в учебных заведениях. Сейчас же, в эпоху шейминга вышки, если сам не выучил, то… я даже не знаю что.

Ничего? Image
Если ты начертился на бумаге алгоритмов, то ставь класс. Image
Придётся рассказать про опыт «старой школы» — мой.

Конкретно у меня было 2 преподавателя по алгоритмизации с абсолютно разными подходами.
Алгоритмизация (опыт в техникуме)

Преподаватель давал разные задачи и принимал решения любой ценой.

Это олимпиадный подход. Ты забиваешь на всё и решаешь на скорость. Лишь бы потом эту программу было не лень вбивать в Pascal.

И это хороший опыт.
Алгоритмизация (опыт в универе)

Преподаватель давал не ёмкие задачи и принимал только максимально оптимизированные решения.

И это лучший, как мне кажется, опыт!

P. S. У меня как-то не приняли лабу, потому что сложность была «N», а не «N-1». Image
Было забавно наблюдать за проверкой алгоритмов. Студент с алгоритмом на 10 блоков мог отлететь, а вот блок-схема на 3 листа сдавалась на «ОТЛ».

Кажется, где-то на этих занятиях я стал понимать как интерпретатор идёт по коду, процессор делает такт, а в памяти создаётся ячейка. 🤖
НО!

Я не могу понять почему не использовал даже простые оптимизации первые 2 года в своём коде, вообще.

Наверное, пока ты юниор, ты все силы тратишь на то, чтобы код был читаемым, а не эффективным. 

И это нормально, нет проблем. Точите паттерны, ребята! Image
Когда алгоритмическая база освоена, самое время расширить свои знания о структурах данных. Ещё.

Ибо если загуглить «BigO», то одним из топ-результатов будет bigocheatsheet.com , где чётко понимаешь, что тут структур данных больше, чем ожидал. Надо гуглить. Image
– «Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и их отношениях» ©

Собственно, эту фразу Линус Торвальдс говорил в контексте «Git». Так что, тут говорится не об отличиях списка и массива. Повысьте градус контекста этой цитаты.
«BigO» и понимание структур данных — неотъемлемы.

Поэтому, затраты на: чтение, поиск, вставку и удаление сначала (увы, тупо) заучиваешь.

Потом, уже понимаешь «почему так?».
Затем, больше не возвращаться к шпаргалкам.
Там еще есть такой прикольный момент, когда ты сам понимаешь цену вставки:
- в начало
- в середину
- и в конец
для всех ходовых типов данных.

Потом, так же понимаешь и про «удаление». 

Рекоммендую. Прикольное чувство. Image
И вот когда у тебя в голове есть понимание структур данных, а твои руки могу зачертить блок-схему, чтобы это понял кто-то из команды, то ты оптимизируешь иначе.
Со временем, у тебя появляются следующие повадки:
- Ты исследуешь алгоритм на неоптимальность;
- У тебя намётан глаз на квадратичную сложность;
- Ты чётко видишь лишнюю работу в чейне вызовов;
- Профайлер начинает кипятить Макбук;
- ???
- Ты начинаешь исследовать.

🥲
И восприятие эвристики оптимизации программы, меняются.

Нпример, помню свои мысли, когда увидел `optimize-js`: «Ого, вот это показатели!»

Сейчас, более интересным кажется раздел объяснения алгоритма: github.com/nolanlawson/op…

И вердикт: «Использовать я его, конечно, не буду». Image
В трюк с обёртыванием объектов в `JSON.parse` уже хочется вникнуть, а не просто использовать.

Что ж, идешь и смотришь объяснение от Матиаса:

Всё становится на свои места.

Ref: v8.dev/blog/cost-of-j… Image
А затем у тебя начинают вызывать вопрос: `React.memo`, `shouldComponentUpdate` и кастомные компараторы.

– «А зачем в этот узел вообще текут данные, если на вход мемоизация? Может, структуру компонента и поток данных сначала пересмотреть?»

Нам надо чаще думать о потоке данных.
Итого, что нам даёт понимание «BigO» и структуры данных?

Они дают надежду, что «Web Performance» не скатится в чек-лист быстрых решений, а оптимизаторы будут не только созерцать графики «Web Vitals», но и думать о «Total Blocking Time».

web.dev/tbt/
И тогда, придёт и понимание того, что «UX» не заканчивается при остановке профайлера в "Idle", путь пользователя здесь только начинается.

С этими знаниями, может, и не потеряем инженерную культуру. 🥲

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jsunderhood

jsunderhood Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jsunderhood

28 Mar
🚀 Web Performance Profiling: 101

В этом треде найдём все неоптимизированные строки кода в рамках одного файла и поговорим о нюансах работы DevTools.

Хорошая привычка, если не хочешь копить Perf-долг.
⚠️ Disclaimer:
От этого треда не стоит ждать решения всех Performance-проблем. Ибо «DevTools» – не тот инструмент, мануал которого можно изложить в одном треде.
en.wikipedia.org/wiki/101_(topi…
📝 Предварительные требования:
1) Понимать что такое стек вызовов (LIFO)
2) Примерно понимать как интерпретатор JS «идёт» по коду

Ref: ru.hexlet.io/courses/js-asy… Image
Read 16 tweets
21 Mar
С вами была Ирина Соколовская, и моя неделя в этом аккаунте подошла к концу. Вы классные, мне было с вами интересно, надеюсь и вам со мной тоже :)
Мой личный твиттер: @ierhyna
В реплаях соберу тред тредов из всего, о чем рассказала на этой неделе.
Опросы о том, насколько аудитория андерхуда знакома с темой веб-производительности:
Read 6 tweets
19 Mar
Привет! Сегодня поговорим про оптимизации, что влияет на метрики, расскажу про best practices и случаи из жизни :)
Выделю три основные направления возможных оптимизаций:
- размеры бандлов и их доставка
- загрузка и отрисовка страницы
- взаимодейстивие со страницей, отзывчивость, UX
1. Про бандлы и доставку:
Read 45 tweets
5 Feb
Всем доброй пятницы!
Вчера вечером мы поговорили про деньги и где их можно заработать, подробности вот в треде 👇
Ну и самая главная мысль: легких денег не бывает. Нет ни одной волшебной схемы, которая сделает тебя богатым. Путь к бабкам всегда труд
Труд не такой, что сутками пахать на износ на заводе — так много не заработаешь. Труд состоит в том, что ты должен потратить ГОДЫ, чтобы создать капитал. И эти годы ты должен быть сконцентрирован, не бросать то что начал, не верить в «схемы».
То же самое применимо к зарплате в IT. Хочешь 500к? Будь готов потратить несколько лет на получение опыта и экспертизы. Тебе придётся интересоваться всем что происходит. Можешь сидеть с 9до5, а после забывать про разработку, но тогда 500к не жди.
Read 4 tweets
4 Feb
Фуф, ну и денёк сегодня выдался.
Как и обещал, давайте поговорим немного про бабки 💸
Все их любят, всем они нужны для того, чтобы влачить своё существование. Но где их взять, как сохранить и преумножить?
Пока я пишу тред кидайте свои варианты
Первое и самое очевидное — зарплата.
Вы меняете своё время и навыки на деньги. Все это делают, большинство только этим и живёт. У зарплаты есть такие свойства: она ограничена кол-вом часов в сутках, вашими умениями и часто геопозицией.
Мы можем работать N часов в сутки и получать M шекелей за час. M зависит от того сколько стоят ваши навыки на рынке в вашей местности. Также зарплата может резко сократиться до 0 если вы заболеете, получите неисправимую травму или больше будете не нужны на рынке.
Read 19 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!