Отменяйте «устаревшие» запросы при живом поиске: AbortController защищает от гонок (когда медленный ответ перезаписывает свежие данные) и экономит трафик. let controller; async function search(query) { controller?.abort(); // отменяем предыдущий controller = new AbortController(); try { const res = await fetch('/api/search?q=' + encodeURIComponent(query), { signal: controller.signal }); if (!res.ok) th…

Channel
JavaScript в картинках | Программирование
@javascriptX
On this record: Growth · Engagement · Posts · Cite this entry
21subscribers
+1 since we began measuring on 7 August 2026
Risers and fallers across the register · movement among entries of Under 1,000.
Register entry
| Telegram ID | -1001636622176 |
|---|---|
| Type | Channel |
| Username | @javascriptX |
| Created | Between 1 December 2021 and 30 April 2023— estimated from Telegram’s id allocation, not measured. How this range is calculated. |
| First recorded | 11 August 2026 |
| Last confirmed live | 21 August 2026 |
| Measurements held | 3 |
| Confirmed unchanged | 1 time, most recently 21 August 2026 |
| On Telegram | t.me/javascriptX |
Growth
| Measured (UTC) | Subscribers | Change |
|---|---|---|
| 21 Aug 2026, 11:36 | 21 | +1 |
| 11 Aug 2026, 15:16 | 20 | no change |
| 7 Aug 2026, 00:55 | 20 | first reading |
Engagement
20 posts held, back to 9 July 2023 — the reader has not yet reached the start of this channel’s public history, so older posts may sit further back, unread. Read across 1 pageof Telegram’s post history, 20 posts per page.
Nothing published in the last 30 days. ERR and ER are rolling 30-day measures, so there is nothing to compute — we hold 20 posts for this entry, the most recent from 14 September 2025. An engagement rate over an empty window would be a number about nothing.
Recent posts
useMemo в React — кэшируем «дорогие» вычисления и фиксируем ссылочные значения, чтобы не дёргать лишние рендеры. Пример: const visible = useMemo(() => items.filter(it => it.title.includes(query)).sort(sorter[sortKey]), [items, query, sortKey]); — пересчёт только при изменении зависимостей. Стабилизация пропсов: const columns = useMemo(() => [{id: 'name'}, {id: 'age'}], []); передайте columns в дочерний компонент …
Fuse.js — библиотека для «нечёткого» поиска по массивам прямо в браузере: находит результаты с опечатками и частичными совпадениями, поддерживает веса полей и работает без сервера. Быстрый старт: const fuse = new Fuse(items, { keys: ['title', 'tags'], threshold: 0.3 }); const results = fuse.search('react hooks'); — получите отсортированный по релевантности список. #javascript #гайды #frontend #сайтыподключ
useEffect в React: кладите в массив зависимостей всё, что используется внутри эффекта (пропсы, стейт, функции), иначе получите устаревшие значения; чтобы стабилизировать функции и объекты и не триггерить эффект лишний раз — оборачивайте их в useCallback/useMemo. Для подписок и таймеров возвращайте очистку (unsubscribe/clearInterval) из эффекта — она сработает при размонтировании и при изменении зависимостей. Не вы…
Разница между var, let и const — в области видимости и возможности переназначения. var имеет функциональную область, поднимается с инициализацией undefined и допускает повторное объявление; let/const — блочная область, поднимаются без инициализации (TDZ) и не позволяют повторно объявлять в том же блоке. const запрещает переназначать переменную, но свойства объектов и элементы массивов менять можно; по умолчанию …
Zod — библиотека для валидации данных в JS/TS: описываете схему, получаете типы из неё и безопасно парсите входные данные с понятными ошибками. Удобно проверять формы и ответы API, уменьшая количество багов в рантайме. #javascript #гайды #frontend #сайты
Если список рендерится медленно, проверьте, не пересоздаются ли функции-колбэки на каждый рендер. Оберните дочерний компонент в React.memo, а обработчики в родителе — в useCallback(fn, [deps]); так React отследит неизменённые ссылки и перерисует только обновившиеся элементы. #react #hooks #гайды #javascript
Ускоряем массовые вставки в DOM собирайте элементы в DocumentFragment и заполняйте его циклом и одним append вставляйте в нужный контейнер — браузер выполнит перерисовку лишь раз, без лишних reflow/paint. #фишки #javascript #frontend #оптимизация
Сократите стартовый бандл, перенеся тяжёлые зависимости в динамический import(): await import('./chart.js') - вызывается только при открытии нужного блока. Webpack/Vite автоматически вынесет код в отдельный чанκ, ускорив First Paint и снизив initial payload. #javascript #фишки #performance #frontend
useRef — способ хранить «что-угодно», не вызывая лишних рендеров: сохраняем id таймера setInterval в id.current, а при размонтировании чистим его; стейт не трогаем — компонент молчит, но таймер живёт. #гайды #react #hooks #javascript #frontend
Деструктуризация объекта: const { name, age } = user; Избавляемся от user.name и user.age, код становится короче и чище, особенно в React-props и ответах API. #javascript #гайды #frontend
localStorage переживает перезагрузку страницы: localStorage.setItem('theme', JSON.stringify({mode: 'dark'})). При чтении используйте const {mode} = JSON.parse(localStorage.getItem('theme') || '{}'); — быстрый способ запомнить настройки пользователя без сервера. #гайды #javascript #frontend
Showing the 12 most recent of 20 posts we hold for @javascriptX. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.
Cite this entry
A live page changes as we take new readings, so a citation should name the measurement it is based on, not just the URL. The line below cites the subscriber count as measured 21 August 2026 — this entry's latest reading, not the date you are reading this.
“JavaScript в картинках | Программирование” (@javascriptX), 21 subscribers as measured 21 August 2026. Telegram Register, tgregister.com/channel/javascriptX.
Full measurement history, CC BY 4.0. Every reading this register holds for this entry, not just the latest one, as a dated, downloadable record: CSV · JSON. Free to use with attribution to tgregister.com. Each file carries its own generation timestamp, which is the figure to cite for exactly when the data was retrieved.