Назад

Інструменти JavaScript, про які незаслужено мало говорять

html code

Джерело фото: https://goo.su/PMAw

У програмуванні, і особливо JavaScript, регулярно з'являються нові бібліотеки, технології, підходи. Деколи буває складно встежити за тим, що відбувається. Я викладаю JavaScript і за обов'язком служби тримаю руку на пульсі. У цій статті я розгляну зручні інструменти JavaScript, про які ви не могли знати.

Не такі вже відомі методи console

Деколи корисно заглянути в документацію на щось широко відоме. Іноді там можна знайти дуже цікаві речі! Поряд з усіма знайомими console.log() і console.dir() є ще кілька зручних методів, які варто знати.

Метод console.time()

Щоб підрахувати тривалість операції, можна використати метод console.time(). Він приймає як аргумент унікальне ім'я таймера. Потім таймер можна зупинити за допомогою console.timeEnd(). Час, який минув між цими двома викликами, буде виведений у консоль.

стартап
Джерело: https://goo.su/ZIClf

Можна запускати до 10 000 різних таймерів одночасно, а також виводити поточне значення таймера, не зупиняючи його за допомогою console.timeLog().

стартап
Джерело: https://goo.su/roti

Метод console.count()

Цей метод виводить у консоль кількість разів, яку він був викликаний. Він не був би такий корисний, якби не приймав ім'я лічильника як аргумент. Можна зробити скільки завгодно лічильників. Вам більше не потрібно турбуватися про те, де зберігати всі ці тимчасові змінні.

стартап
Джерело: https://goo.su/TIw2mq

Метод console.table()

console.table(<data>) дозволяє вивести в консоль дані у вигляді гарної таблички. Цінність у тому, що він приймає дані у найрізноманітніших форматах: працюють і прості масиви, і масиви в масивах, і масиви об'єктів, і купа інших варіантів. Цей метод не стандартизований і може працювати по-різному залежно від середовища, в якому ви запускаєте код. Десь він може й не працювати зовсім. Однак це не скасовує його корисності при налагодженні.

стартап
Джерело: https://goo.su/L68cLw

Метод console.group()

Цей інструмент JavaScript може стати в нагоді тим, хто любить оформляти не тільки сайти, а й повідомлення в консолі. console.group() зсуває всі наступні повідомлення в консолі трохи праворуч, візуально відокремлюючи блоки один від одного. Скасувати зсув можна за допомогою методу console.groupEnd(). Конкретне відображення зсуву залежить від середовища, що може додавати свої деталі реалізації. Наприклад, у Google Chrome ці групи можна згортати та задавати їм довільні імена за допомогою першого аргументу: console.group('MyGroup').

стартап
Джерело: https://goo.su/mi1V

Модуль cluster в Node.js

Напевно, одне з найчастіших застосувань Node.js – це написання веб-серверів. Для цього завдання event loop, на основі якого побудовано Node.js, підходить ідеально. Але цей підхід має свої обмеження: наприклад, неможливість використання кількох ядер процесора. Однак у вбудованій бібліотеці Node.js є рішення і для таких ситуацій модуль cluster.

Цей модуль дозволяє легко створити кілька дочірніх процесів, які будуть використовувати один і той же серверний порт. Операційна система розподілить їх за різними ядрами процесора. Так ви можете використовувати ресурси комп'ютера на максимум. Звісно, ​​нічого не дається безкоштовно. Використання cluster накладає певні обмеження на структуру вашого сервера: більше не вийде використовувати стан, що зберігається в пам'яті, тому що кожен дочірній процес має свою власну пам'ять. Натомість ми отримуємо можливість легко врівноважувати навантаження без використання додаткових програм, таких як nginx.

І хоча основне призначення кластера - це управління додатками, що працюють з мережею, його, звичайно, можна використовувати і для будь-яких інших програм, які хочуть працювати відразу на кількох ядрах процесора.

Модуль vm в Node.js і isolated-vm

Іноді виникає потреба запускати недовірений код. Наприклад, нам у Bootcamp потрібно автоматично перевіряти код, написаний студентами під час перевірочних робіт. У таких ситуаціях було б класно налаштувати все так, щоб код не міг натворити щось погане в системі перевірки. Перше, що спадає на думку в такі моменти, це різні механізми захисту на рівні операційної системи. Обговорення їх використання та налаштування виходить за межі цієї статті.

Друге, про що ви можете згадати, це вбудований у Node.js модуль vm. Він дозволяє створювати ізольовані контексти всередині однієї програми. На жаль, сила vm обмежується ізоляцією контексту. Він не призначений для запуску потенційно шкідливого коду, про що прямим текстом сказано в перших рядках документації. Я пропоную вам у таких випадках розглянути npm-модуль isolated-vm, який вирішує майже всі проблеми, пов'язані з ізоляцією недовіреного JavaScript-коду. Цей модуль дозволяє забезпечити справжню ізоляцію та контроль пам'яті, що споживається. Він багатопотоковий і, що найголовніше, використовується в кількох великих проектах, а отже, добре випробуваний на практиці.

З погляду продуктивності теж все добре, тому що він використовує систему ізоляції, вбудовану в V8, за допомогою якої ізолюється JavaScript-код різних сайтів. За допомогою isolated-vm можна ізолювати не лише недовірений код, а й код, який потенційно вразливий, або якщо ви не впевнені в його якості. Що, втім, не скасовує рекомендації запускати такий код окремою машиною.

Модуль inspector в Node.js

Ще один інструмент JavaScript - профайлер. Знайти його можна у Chrome DevTools у вкладці Performance. Цей інструмент дозволяє зібрати докладну інформацію про те, як виконувався ваш код. Скільки часу зайняло виконання кожної функції. Як і що виконувалося. Як виділялася та звільнялася пам'ять. Коли запускався збирач сміття та як це впливало на швидкість виконання.

Але часто буває складно розібратися у величезному масиві інформації, яку ми отримуємо після профілювання. У такому разі корисно знати, що профайлер можна запускати ще програмно! Таким чином можна дуже тонко контролювати момент початку та закінчення профілювання та отримувати саму релевантну інформацію. Такий спосіб можна використовувати для тимчасового вмикання профільника навіть на продакшені. Головне не забудьте, що він дуже сильно навантажує процесор.

Бажаємо успіхів!