YeaHub Tech
412 subscribers
343 photos
15 videos
2 files
450 links
Новые технологии, советы и обучающие материалы

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#frontend #template #javascript
📈 Шаблоны для эффективной работы с DOM с помощью <template>

В современных веб-приложениях важны производительность и удобство работы с DOM. Элемент <template> позволяет создавать невидимые шаблоны, которые можно многократно использовать для динамической генерации интерфейса.


📌 Что это такое?

Элемент <template> — это контейнер для HTML-разметки, которая не отображается на странице сразу, а существует как часть DOM. Она активируется только при явном вызове через JavaScript. Это полезно для создания однотипных элементов, таких как карточки, списки, модальные окна.


📌 Как с этим работать?

📖Определение шаблона: внутри <template> можно хранить HTML-код, включая стили и скрипты.
📖Клонирование: с помощью метода .content.cloneNode() шаблон копируется и добавляется в DOM.
📖Инкапсуляция логики: шаблоны можно использовать с Web Components, что делает код более модульным и переиспользуемым.


📌 Где применяется?

📖Компоненты пользовательского интерфейса: карточки товаров, списки задач.
📖Повышение производительности: шаблоны рендерятся быстрее, так как не требуют повторной работы браузера с DOM.
📖Работа с Web Components: для создания модульных элементов интерфейса.

Пример:
<template id="card-template">
<div class="card">
<h3></h3>
</div>
</template>
<script>
const template = document.querySelector('#card-template').content;
const clone = template.cloneNode(true);
clone.querySelector('h3').textContent = "Заголовок";
document.body.appendChild(clone);
</script>


👍 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
#javascript #arraymethods

❓ Находитесь на этапе изучения JavaScript?

Cоветую к прочтению данную статью. Она освещает 10 ключевых методов работы с массивами в JavaScript, таких как forEach(), map(), filter(), reduce(), и других.

Эти функции помогают эффективно обрабатывать данные, сокращают объем кода и улучшают производительность. Также рассматриваются продвинутые приемы, включая цепочку методов и функциональное программирование.

В ней вы сможете найти советы по повышению производительности и правильной обработке ошибок для создания более гибкого и эффективного кода.

✔️ Читать

👍 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#javascript #book

📘 Паттерны проектирования jаvascript

П
рактическое руководство по применению популярных паттернов проектирования в JavaScript, таких как:
Модуль, Наблюдатель, Стратегия, Фабрика и Декоратор.

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


✏️ Книга помогает:

🔸Изучить популярные паттерны проектирования и их применение в JavaScript.
▫️Улучшить структуру и читаемость кода.
🔸Решать типичные задачи разработки с помощью проверенных решений.
▫️Повышает эффективность работы с кодом, облегчая его поддержку и расширение.
🔸Помогает улучшить навыки рефакторинга и оптимизации.


Книга в комментариях ⬇️

👍 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#JavaScript #WebSocket #HTTP2

Как работает WebSocket и HTTP/2 + SSE. Что выбрать?


Современные веб-приложения требуют эффективной и безопасной коммуникации между клиентом и сервером. Среди популярных технологий выделяются WebSocket, HTTP/2 и SSE. Разберем их особенности и поможем определиться с выбором.


✔️WebSocket: быстрые двусторонние соединения

WebSocket обеспечивает двустороннюю связь между браузером и сервером через постоянное соединение.

- Протокол основан на фреймах, что снижает нагрузку на систему.
- Включает механизмы указания размера полезной нагрузки и структуры данных.
- Подходит для приложений, где важна мгновенная передача данных, например, чаты или онлайн-игры.


✔️HTTP/2 + SSE: асинхронные данные и оптимизация

HTTP/2 предоставляет технологию Server Push, позволяющую серверу отправлять данные в клиентский кэш без запроса. SSE (Server-Sent Events) работает через асинхронные однонаправленные соединения:

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


❓ Как выбрать?

Выбор протокола зависит от задач проекта:
- Если нужна двусторонняя связь в реальном времени — используйте WebSocket.
- Для передачи потоковых данных или серверных обновлений с меньшей сложностью — HTTP/2 + SSE.

Также учитывайте поддержку технологий браузерами и серверными компонентами. Правильный выбор протокола улучшит производительность, безопасность и удобство использования приложения.

🔗 Источник

👍 Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#JavaScript

Сравнение методов require() и import() в JavaScript

1️⃣require()

Метод require() представляет собой встроенную функцию среды исполнения Node.js, предназначенную для подключения внешних модулей. Данный метод функционирует в синхронном режиме и обеспечивает возможность вызова из любой точки программного кода. Следует отметить поддержку условных вызовов.


Пример использования:

var module = require('module-name');
if(условие) {
const специфическийМодуль = require('./специфическийМодуль.js');
}



2️⃣import()

Метод import() является компонентом стандарта ECMAScript модулей, функционирующим в асинхронном режиме. При статическом использовании размещение данного метода ограничено начальной частью файла. Необходимо учитывать возможность динамической загрузки с применением оператора await.


Пример использования:

import модуль from 'имя-модуля';

// Динамическая загрузка
let компонент = await import('./компонент.js');



3️⃣ Различия методов

Позиционирование в коде
- require(): допустимо размещение в любой части кода
- import(): при статическом вызове допустимо размещение исключительно в начале файла

Характеристики производительности
- require(): характеризуется блокировкой процесса выполнения
- import(): реализует асинхронное выполнение, что обуславливает повышенную эффективность в крупномасштабных проектах

Условное применение
- require(): полностью поддерживает условные конструкции
- import(): условное применение возможно исключительно в динамическом варианте с оператором await


4️⃣Рекомендации

Применение метода require() целесообразно в:
- проектах Node.js малого и среднего масштаба
- обособленных серверных скриптах
- модулях, требующих условного подключения

Применение метода import() рекомендуется для:
- современных веб-приложений
- проектов, ориентированных на стандарты ECMAScript
- систем, требующих оптимизации производительности


🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#JavaScript

🔖 JavaScript массивы медленные? Хэш-таблицы решают проблему производительности за O(1)

Пока разработчики перебирают массивы циклами, умные используют хэш-таблицы для мгновенного доступа к данным. Google Maps, Netflix, Instagram строят поиск на хэшировании, а не на линейном переборе.

Время сложности O(n) убивает UX в реальном времени.


📎 Что происходит прямо сейчас:

Google Maps — поиск адресов среди миллиардов записей за миллисекунды. Хэш-таблицы индексируют координаты по ключам локаций.

Netflix — рекомендации для 260M+ пользователей в реальном времени. Хэширование по user_id + content_id дает O(1) доступ к предпочтениям.

Instagram — поиск по хэштегам среди триллионов постов. Hash-функции превращают #travel в точный адрес в памяти.


📎 Проблемы массивов в production:

Linear Search Horror
// O(n) - перебор всех элементов
users.find(user => user.id === targetId)

// O(1) - прямой доступ по ключу
usersMap[targetId]


Insertion Performance
Вставка в массив требует сдвига всех элементов. В хэш-таблице — просто хэширование ключа и запись по адресу.

Memory Overhead
Динамические массивы удваиваются при переполнении. Хэш-таблицы выделяют память точечно по мере необходимости.


📎 Архитектура хэш-таблиц:

Hash Function
hash = (key.charCodeAt(i) * i) % tableSize

Преобразует ключ в индекс массива за константное время.

Collision Resolution
Когда два ключа дают одинаковый хэш — используется chaining (цепочки) или open addressing.

Key-Value Storage
hashTable["user_123"] = userData  // O(1)
const user = hashTable["user_123"] // O(1)



📎 Реальные кейсы оптимизации:

• Database Indexing — хэш-индексы для мгновенного поиска записей
• Caching Systems — Redis использует хэш-структуры для кэширования
• Browser Engines — DOM элементы индексируются по ID через хэширование
• SessionStack — анализ пользовательских сессий с O(1) доступом к данным

Выбор структуры данных определяет масштабируемость продукта. O(n) поиск убивает производительность при росте пользователей.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#JavaScript

🔖 Почему ваш JavaScript-бандлер весит как три полнометражных фильма?

Вы загрузили приложение, добавили ещё библиотек, и вот уже бандлер весит 500KB вместо 100KB. Пользователи ждут загрузки 5 секунд вместо 1 секунды. Приложение работает, но медленно. Каждый килобайт JS — это время парсинга, выполнения, разборки браузером. На мобильнике это значит батарея сливается, страница зависает, пользователи уходят к конкурентам.

// Плохо - импортируете всё, используете мало
import _ from 'lodash'; // 70KB, нужна одна функция
import * as echarts from 'echarts'; // 1MB для одного графика
import UILibrary from 'heavy-ui-kit'; // 200KB со всеми компонентами

// Хорошо - импортируйте только нужное
import { debounce } from 'lodash-es'; // Tree-shaking, 2KB
import { BarChart } from 'lightweight-charts'; // 50KB, минимум
import { Button, Input } from '@headlessui/react'; // Tree-shaking, 10KB


Основные проблемы раздутого бандлера:

🔸 Дольше загружается на мобильных сетях (LTE, 3G)
🔸 Браузер парсит и выполняет больше кода — замораживает UI
🔸 На слабых устройствах всё работает медленнее, батарея быстрее сливается
🔸 Поисковики штрафуют за низкую производительность, рейтинг падает

Раздутый бандлер — это не просто цифра на диске. Это деньги компании (CDN трафик), разочарование пользователя (медленная загрузка), потерянные конверсии (люди ушли, не дождались).

✅ Как уменьшить бандлер:

1. Аудит зависимостей — используйте webpack-bundle-analyzer, посмотрите что там. Может быть, импортируете тяжелую библиотеку для одной функции?

2. Code splitting — разделите на чанки, загружайте по требованию. React.lazy(), динамический импорт для маршрутов.

3. Tree-shaking — удаляйте неиспользуемый код. ES модули помогают бандлеру определить, что не нужно.

4. Минификация — Terser, Gzip/Brotli. Просто сжимайте код, функциональность не меняется.

5. Server-side rendering — переложите вычисления на сервер вместо клиента. Меньше JS в браузере = быстрее загружается.

❌ Избегайте:

- Импорта целых библиотек для одной функции
- Неиспользуемого кода (закомментированные куски месячной давности)
- Отключенного tree-shaking в production сборке
- Только клиентского рендеринга для статического контента

Каждый килобайт имеет значение. Производительность = пользовательский опыт = конверсии.


📎 Статья

🎙 Новости

📝 База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#Собес #javascript #dom #events
🤔 Как подписаться на событие клика кнопки в DOM?

💬 Кратко:

Используйте метод addEventListener для подписки на событие click:
document.querySelector('button').addEventListener('click', () => {
console.log('Кнопка нажата!');
});


📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1
🧑‍💻 Вопросы с собесов для Node.js Разработчика

1. Как работает Jest под капотом (разница между jsdom и браузером)?
Jest использует jsdom для эмуляции браузерного окружения в Node.js. Это значит, что тесты могут работать с DOM-методами без запуска реального браузера, но не все браузерные API полностью поддерживаются, и поведение может немного отличаться.

2. Почему MutationObserver использует микротаски в Event Loop?
MutationObserver выполняет свои колбэки в микротасках, чтобы изменения DOM обрабатывались сразу после текущей задачи, но до рендеринга и макротасков. Это позволяет быстро реагировать на изменения, сохраняя высокую производительность.

3. Как избежать переполнения кэша?
Можно ограничивать размер кэша и удалять старые записи по принципу LRU (Least Recently Used) или по времени жизни (TTL). Также важно периодически очищать кэш.

4. Как реализовать кэширование данных без библиотек?
Кэширование можно реализовать с помощью объекта или Map, сохраняя данные по ключу и возвращая их при повторных запросах. Это снижает количество повторных вычислений или запросов к серверу.

5. Какие хранилища подходят для больших данных (LocalStorage, IndexedDB)?
Для больших объемов данных лучше использовать IndexedDB, так как оно поддерживает асинхронную работу и хранение структурированных объектов. LocalStorage подходит для небольших объемов (до ~5 МБ) и синхронных операций.

#jest #jsdom #testing #javascript #mutationobserver #event_loop #cache #lru #ttl #map #localstorage #indexeddb
#Собес #javascript #dom #events
🤔 Как подписаться на событие клика кнопки в DOM?

💬 Кратко:

Используйте метод addEventListener для подписки на событие click:
document.querySelector('button').addEventListener('click', () => {
console.log('Кнопка нажата!');
});


📌 Полный разбор + примеры использования — на платформе:
👉 Перейти к разбору

📣 Все для прокачки навыков:
✅ Анонсы → канал
✅ Комьюнити → чат
✅ База задач и вопросов → платформа
👍1