DevNotes Live
6 subscribers
84.2K photos
12K videos
195 files
35.4K links
Автоматический агрегатор IT ресурсов в Telegram (@devnotes_robot)
Информация: https://t.me/devnotes_live/121
Download Telegram
Forwarded from Daily Coding 🔥
🛠 BaguetteBox - это библиотека на основе JavaScript для создания адаптивных галерей лайтбоксов. Она очень легкая, доступна для мобильных устройств, проста в использовании и настройке и использует CSS3-переходы для плавных переходов изображений.

🌍 Сайт

Daily Coding #инструменты #JavaScript & Max
Скрытые убийцы Event Loop: ICU и Regex в Unicode-строках

Многие знают, что JSON.parse или fs.readFileSync блокируют Event Loop. Но есть враги похитрее - синхронные вызовы ICU и регулярных выражений на unicode-строках. Типичная ошибка: разработчики не подозревают, что методы нормализации или unicode-регулярки могут висеть десятки миллисекунд, оставаясь незамеченными до production-нагрузки.

Где прячется ICU
ICU тихо сидит в методах:
* String.prototype.normalize()
* String.prototype.toLocaleLowerCase()
* Intl API

Регулярки с флагами /u или /s на больших строках (эмодзи, иероглифы) могут висеть синхронно десятки миллисекунд. И ты даже не сразу поймешь, почему твой сервер тупит.

Пример скрытой блокировки
const hugeText = '🦄'.repeat(100000);
const start = performance.now();
hugeText.normalize('NFC'); // ICU молча обрабатывает 100к символов
console.log(Блокировка: ${performance.now() - start}ms);


Как профилировать
* Используй --prof флаг Node.js, потом node --prof-process.
* Разбрасывай логи с performance.now() до и после подозрительных операций.
* Clinic.js: npx clinic doctor -- node app.js

Как устранять

Для ICU:
* Выноси нормализацию в Worker Threads
* Режь на чанки по 1000 символов, обрабатывай порциями
* Предобрабатывай данные на этапе загрузки, а не в рантайме

const { Worker } = require('worker_threads');
const worker = new Worker('./normalize-worker.js');
worker.postMessage(hugeText);


Для RegExp:
* Типичная ошибка: паттерны с backtracking, например (a+)+b. Меняй на a+b.
* Попробуй re2 - без backtracking, работает предсказуемо
* Разбивай строку через string.slice, если можно

const safePattern = /^[a-z]+$/u;


Практический совет
Используй monitorEventLoopDelay() из perf_hooks - он показывает задержки Event Loop в наносекундах. Запусти его в фоне и сравнивай с пиками нагрузки.

Вывод: ICU и unicode-регекспы выглядят безобидно, но регулярно просаживают производительность - профилируйте их отдельно под нагрузкой, а не только в изолированных тестах.
This media is not supported in your browser
VIEW IN TELEGRAM
Коллекция анимированных сайтов для вдохновения.😍🐈‍⬛

www.landing.love

А также галерея мобильных приложений с анимированным интерфейсом 📲

appmotion.design
Please open Telegram to view this post
VIEW IN TELEGRAM
Дизайн упаковок овсяных каш Quite Nice.

Дизайн: Herefor Studio

#упаковка
Forwarded from Designdealer
This media is not supported in your browser
VIEW IN TELEGRAM
Если не хватает свежей насмотренности, загляните в Recent.

Каждый день сервис публикует новую подборку лучшего дизайна со всего интернета.

recent.design
This media is not supported in your browser
VIEW IN TELEGRAM
Сайт-портфолио дизайнера Felipe Elioenay выделяется среди других за счет яркой цветовой палитры и пролистывания экранов, как карточек. По структуре все достаточно просто. Нет кнопки "вверх", но есть большой ярковыраженный переход на главную, так что не потеряешься. В целом все контрастно, ярко и по делу.

Сайт тут
Forwarded from Daily Coding 🔥
🛠 История активных сессий для Postgres — облегченная выборка событий ожидания без раздувания.

🌍 Сайт

Daily Coding #инструменты #SQL & Max