Дивовижний світ веброзробки — тепер і в твоєму телеграмі. Анонси відео з YouTube-каналу «Сергій Бабіч та Дивовижний світ веброзробки», стріми, авторські статті та цікаві знахідки.
youtube.com/@babichweb
Реклами та інтеграції обговоримо
Post #122
2.1K
Північ памʼятає! А от твоєму коду — необовʼязково.
Дуже часто, говорячи на співбесідах про оптимізацію швидкодії, перше, що я чую — треба все мемоїзувати. Чи приймаю я це за вірну відповідь? Заледве.
Мемоїзація — це така техніка збереження результату якихось обчислень за умови, що вхідні параметри не змінено.
В цьому дуже спрощеному прикладі з псевдокодом мемоїзується обчислення квадрата числа. І на початку відбувається перевірка, чи ми таке число вже обробляли. Якщо так — повертаємо збережене значення, якщо ні — рахуємо, зберігаємо і вже тоді повертаємо значення з кешу.
Так от. Головне питання — коли ж має сенс користуватися мемоїзацією?
Відповідь проста — коли обчислення дійсно дорогі, і надмірне їх використання може призвести до суттєвих витрат обчислювальних ресурсів.
Часто я бачу в коді "оптимізацію" на кшталт
І це зовсім не оптимізація. На ділі
У випадку з
І усе це — заради однієї операції, яка сама по собі відбудеться настільки блискавично, що ваш M4 навіть її не помітить.
Звичайно, майже не помітить він і виконання усієї катавасії з useMemo, але якщо таких "оптимізацій" назбирається достатньо, то це може стати вже відчутним.
Мемоїзація, безперечно, є надзвичайно потужним інструментом, який дозволяє заощадити час та ресурси. Якщо користуватися ним там, де воно дійсно потрібно.
Якщо ж бездумно "оптимізувати" усе, що бодай трохи нагадує обчислення, швидше за все ви будете виконувати стільки надмірного коду, що швидкодія вашого застосунку погіршиться ще більше.
Тож давайте занотуємо: мемоїзація — це не синонім продуктивности. Це засіб уникнути повторної роботи там, де вона справді затратна. Якщо обчислення швидкі, чи виклики функції одноразові — не чіпайте.
Якщо ж вартість обчислення відчутна, а повторюваність висока — тоді так, мемоїзація стане у пригоді. Але важливо пам’ятати: використання мемоїзації — не ритуал "на гарну швидкодію", а осмислене інженерне рішення, яке має свої наслідки.
***
Пропоную разом із вогником або серденьком до цього допису додати ще й 5 гривень донату на Mavic для 184 навчального центру. Дякую всім і цьом вам у лобіка.
https://send.monobank.ua/jar/AeXQ6YRf2X
5375411202918178
***
@babichdev
Дуже часто, говорячи на співбесідах про оптимізацію швидкодії, перше, що я чую — треба все мемоїзувати. Чи приймаю я це за вірну відповідь? Заледве.
Мемоїзація — це така техніка збереження результату якихось обчислень за умови, що вхідні параметри не змінено.
cache = {}
fn square(x):
if not (x in cache):
cache[x] = x * x
return cache[x]В цьому дуже спрощеному прикладі з псевдокодом мемоїзується обчислення квадрата числа. І на початку відбувається перевірка, чи ми таке число вже обробляли. Якщо так — повертаємо збережене значення, якщо ні — рахуємо, зберігаємо і вже тоді повертаємо значення з кешу.
Так от. Головне питання — коли ж має сенс користуватися мемоїзацією?
Відповідь проста — коли обчислення дійсно дорогі, і надмірне їх використання може призвести до суттєвих витрат обчислювальних ресурсів.
Часто я бачу в коді "оптимізацію" на кшталт
const doubled = useMemo(
() => value * 2,
[value]
);
І це зовсім не оптимізація. На ділі
value * 2 виконується практично миттєво, а головне — без використання надлишкових ресурсів.У випадку з
useMemo, відбудеться наступне: спершу створюється екземпляр анонімної функції, потім — новий масив залежностей; далі виконується useMemo, у якому спочатку порівнюються поточні залежності з попередніми, а за тим — відбувається умовна перевірка; і якщо value змінилося — то запускається ще й саме обчислення.І усе це — заради однієї операції, яка сама по собі відбудеться настільки блискавично, що ваш M4 навіть її не помітить.
Звичайно, майже не помітить він і виконання усієї катавасії з useMemo, але якщо таких "оптимізацій" назбирається достатньо, то це може стати вже відчутним.
Мемоїзація, безперечно, є надзвичайно потужним інструментом, який дозволяє заощадити час та ресурси. Якщо користуватися ним там, де воно дійсно потрібно.
Якщо ж бездумно "оптимізувати" усе, що бодай трохи нагадує обчислення, швидше за все ви будете виконувати стільки надмірного коду, що швидкодія вашого застосунку погіршиться ще більше.
Тож давайте занотуємо: мемоїзація — це не синонім продуктивности. Це засіб уникнути повторної роботи там, де вона справді затратна. Якщо обчислення швидкі, чи виклики функції одноразові — не чіпайте.
Якщо ж вартість обчислення відчутна, а повторюваність висока — тоді так, мемоїзація стане у пригоді. Але важливо пам’ятати: використання мемоїзації — не ритуал "на гарну швидкодію", а осмислене інженерне рішення, яке має свої наслідки.
***
Пропоную разом із вогником або серденьком до цього допису додати ще й 5 гривень донату на Mavic для 184 навчального центру. Дякую всім і цьом вам у лобіка.
https://send.monobank.ua/jar/AeXQ6YRf2X
5375411202918178
***
@babichdev
- 🔥 69
- ❤ 11
- 👏 3
- 🤔 1





