Обновить
40.78

Клиентская оптимизация *

Делаем сайты удобнее и приятнее

Сначала показывать
Порог рейтинга
Уровень сложности

Performance и оптимизация TypeScript-типов в больших проектах

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров12K

Узнайте, почему большие TypeScript-проекты начинают "захлёбываться" от рекурсивных типов и обилия импортов, и как с помощью правильной структуры монорепы, настройки tsconfig и диагностики ускорить время компиляции и работу IDE. Рассматриваем инструменты, параллельную сборку, оптимизацию рекурсивных типов и прочие техники, которые помогут сохранить ваш проект быстрым и удобным.

Читать далее

Взгляд с другой стороны на useMemo, useCallback и React.memo в React: когда их стоит использовать

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров7.8K

Оптимизация производительности React приложений — важная часть разработки, особенно когда речь идет о сложных интерфейсах. В основном разработчики лишь краем уха слышат о необходимости использования хуков useMemo, useCallback и React.memo для оптимизации кода. Но если бездумно использовать их, то можно даже навредить вашему приложению

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

Читать далее

Оптимизация React-приложений: Используем useTransition, useDeferredValue и useOptimistic для плавного UI

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров15K

Сделайте интерфейс React-приложения более отзывчивым и плавным с помощью хуков useTransition, useDeferredValue и useOptimistic. Управляйте приоритетами рендеринга, избегайте подвисаний при работе с большими данными и реализуйте оптимистичные обновления для мгновенной реакции интерфейса. Практические примеры и полезные советы ждут вас! 🚀

Читать далее

Деление беззнаковых 8-битных чисел

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров6.6K

Деление — достаточно затратная операция. Например, на CPU Cannon Lake задержки 32-битного деления находятся в интервале 10-15 тактов, а на Zen4 — 9-14 тактов. Задержки 32-битного умножения на обоих CPU составляют 3-4 такта.

Ни в одном из популярных ISA SIMD (SSE, AVX, AVX-512, ARM Neon, ARM SVE) нет целочисленного деления, оно есть только в RISC-V Vector Extension. Однако во всех этих ISA есть деление с плавающей запятой.

В этой статье мы представим два подхода к реализации SIMD-деления 8-битных беззнаковых чисел.

Читать далее

Раскрыто дело о тайных пациентах медицинских компаний

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.3K

Медицинские компании, помимо приёма пациентов, должны качественно и безопасно хранить все данные, связанные с лечением, осмотрами и процедурами. От этого зависит не только имидж, но и лицензия организации.

Читать далее

Чек-лист по запуску нового сайта: что нужно учесть?

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.1K

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

Читать далее

WebMarkupMin: Обновления в ASP.NET Core-расширениях, вызванные выходом .NET 9 и не только

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.8K

Уже стало традицией, что выход очередной версии .NET становится поводом для выпуска новой версии WebMarkupMin. Обычно подобные выпуски WebMarkupMin сопровождаются обновлением расширений для ASP.NET Core и этот раз не стал исключением. Многие ожидали, что с появлением .NET 9 появится новый модуль WebMarkupMin.AspNetCore9, но этого не произошло. В этой статье я расскажу о причинах такого решения. Кроме того, в этот раз в ASP.NET Core-расширениях довольно много изменений, а поскольку для большинства разработчиков основным источником информации об этих расширениях является уже немного устаревшая статья Эндрю Лока «HTML minification using WebMarkupMin in ASP.NET Core», то я постараюсь разъяснить некоторые неочевидные моменты.

Читать далее

Правда или миф: почему в разработке не все так быстро, как кажется

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров3K

Клиент заказал разработку сайта.

Ожидание: все готово еще вчера.
Реальность: составление ТЗ, прототипирование, доработки, конфликты, снова доработки, и только потом результат.

Читать далее

Как избежать разочарования пользователя: от NPS к ценности

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров1.4K

Привет, Хабр! Это Глеб Михеев — член ПК, отвечающий за программу широко известной в узких фронтендерских кругах конференции FrontendConf, автор канала «Уставший техдир» и знатный амбассадор работы с джунами. Эту статью я написал по мотивам выпуска моего подкаста Фичи Катятся, где мы с Серёжей Паращенко, автором канала Product Cult, обсудили продуктовый подход. Предлагаю разобраться в теме разочарования. Что именно разочаровывает пользователей, и как это можно изменить. Поехали!

Читать далее

Как мы разработали и добавили «истории» в сервис для поиска работы за 3 месяца

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров367

Привет, Хабр! В этой статье расскажу, зачем приложению по поиску работы понадобился видеоконтент, как нам с командой удалось его реализовать и с какими сложностями мы столкнулись. 

Для начала расскажу о нашей платформе. Идея ее создания возникла из наблюдений за знакомыми, работающими в различных сферах. Мы заметили, что есть потребность в сервисе, который помогал бы индивидуальным предпринимателям и малому бизнесу находить не только постоянных, но и сменных сотрудников. Основная цель заключалась в том, чтобы упростить поиск временной работы для тех, кто не стремится работать на постоянной основе, и предоставить возможность находить подработку людям с различными навыками и профессиями.

При этом поиском подработки мы не ограничились. Мы ввели на платформу механики check-in и check-out, подобные тем, что есть у таксистов Яндекса. С их помощью человек мог регистрировать время выхода на работу, различные паузы, а также время завершения смены.

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

Читать далее

Как я создавал бесплатный сервис оптимизации изображений FlashImg.ru

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров2.6K

Всем привет. В этом материале я расскажу как создавал беспслатный сервис оптимизации изображений FlashImg.ru

Читать далее

Я прождал 10 миллиардов тактов и дождался лишь экрана загрузки

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров17K

Современное оборудование невероятно быстрое. M1 Max, на котором я пишу эту статью, работает с частотой 3,2 ГГц. То есть 3,2 МИЛЛИАРДА тактов в секунду. Однако Microsoft Teams требуется 3 секунды, чтобы открыть ссылку, и я отказываюсь верить, что для открытия ссылки требуется 9,6 МИЛЛИАРДА тактов. Очевидно, я упрощаю, но смысл остаётся прежним: как так получается, что оборудование становится быстрее, а приложения — только медленнее?

«Потому, что мы выполняем гораздо больше задач». Так считает любитель позднего капитализма. Позвольте объяснить.

Превосходный пример мощи современного «железа» — это видеоигры. Я могу симулировать огромные 3D-среды с физикой и освещением, полученным трассировкой лучей, при этом играть в реальном времени с друзьями из других штатов и даже стран; вполне доступный компьютер потребительского уровня выдаёт 124 миллионов пикселей в секунду1.

[1. 1080p при 60 FPS = 1920 × 1080 × 60 = 124416000]

Можно посмотреть и в обратном направлении: людям удаётся запускать DOOM на почти любом устройстве с процессором: на калькуляторах, iPod, фотокамерах. Невероятно маломощные, зачастую одноразовые устройства обладают достаточными вычислительными ресурсами, чтобы выполнять сверхсовременную на 1993 год игру. Это не особо удивляет, ведь прошло три десятка лет, но показывает, какой путь мы проделали.

Читать далее

Насколько быстры B-деревья по сравнению с хэш-таблицами?

Время на прочтение12 мин
Количество просмотров13K

Во многих «скриптовых» языках для стандартных ассоциативных структур данных используется хэш-таблица (hashmap) (объекты Javascript, словари Python и так далее). Хэш-таблицы обладают множеством раздражающих свойств:

  • Уязвимость к hash flooding.
  • В случае защиты от hash flooding случайными seed порядок итераций становится недетерминированным, что мешает при тестировании снэпшотов, создании воспроизводимых сборок и так далее.
  • При вставке может требоваться рехэширование, что в наихудших случаях создаёт для больших хэш-таблиц ужасные задержки.
  • Многократное увеличение больших распределений памяти без фрагментации сложно реализовать в целевых платформах wasm, потому что трюки с виртуальной памятью недоступны, а для страниц невозможно выполнить unmapping.
  • Векторные команды в wasm ограничены, а команды AES отсутствуют. Это делает многие хэш-функции ещё более медленными.

Упорядоченные структуры данных наподобие B-деревьев не имеют этих недостатков. Обычно они медленнее хэш-таблиц, но меня удивило, насколько разнятся ожидания людей относительно их скорости.
Читать дальше →

Ближайшие события

От коммивояжера до эмпатичного ИИ: как менялась работа с обратной связью

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров895

Теоретически в нашей вселенной можно найти компанию, которую не интересовало бы мнение ее клиентов. Сделать это будет крайне сложно, тут придется постараться. И, конечно, такая компания вызовет недоумение: как она до сих пор умудряется существовать?!

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

Поэтому так важен ЛЮБОЙ отзыв. Каждый – от простого лайка в соцсети до развернутого описания опыта взаимодействия с брендом – тщательно анализируется компанией. После чего вносятся изменения в бизнес-процессы и улучшается клиентский опыт.

Сбор и анализ обратной связи – достаточно сложный процесс. Тут бизнесу пригодятся специальные инструменты. Скоро расскажем, как именно мы определяем настроения клиентов и как полученные данные используем. А начнем с поста про то, как «эволюционировала» работа с обратной связью. Это и интересно, и позволит понять, как она будет развиваться в будущем, в том числе и с точки зрения технологий. После прочтения статьи написанной Александром Бурыгиным, Директором Дивизиона Поволжье Группы М.Видео-Эльдорадо, вы сможете блеснуть почерпнутой информацией среди коллег или на каком-нибудь совещании (это минимум), а кто-то даже обзаведется каким-нибудь полезным для работы инсайтом.

Читать далее

Улучшение производительности рендеринга с помощью CSS content-visibility

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров8K

Недавно я обнаружил интересную ошибку в работе emoji-picker-element:

Я работаю на экземпляре fedi с 19 тыс. пользовательских эмодзи [...], и когда я открываю панель выбора эмодзи [...], страница замирает как минимум на целую секунду, а после этого на некоторое время замирает общая производительность.

Если вы не знакомы с Mastodon или Fediverse, то на разных серверах могут быть свои собственные эмодзи, как в Slack, Discord и т.д. Наличие 19k (на самом деле ближе к 20k в данном случае) крайне необычно, но не является чем-то неслыханным.

Читать далее

Как я ускорил свое мобильное приложение BookDesk на React Native в 3 раза?

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров3.4K

Всем привет! В этом материале я поделюсь с вами практическим опытом по оптимизации своего мобильного приложения на React Native. Я расскажу как я ускорил свое приложение в 3 раза.

Я разрабатываю свое мобильное приложение BookDesk для хранения прочитанных книг. Предыдущие серии: 123

Читать далее

strlcpy, или как CPU противоречат здравому смыслу

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров17K

Один из моих старых постов о strlcpy недавно вызвал обсуждения на различных форумах. Вероятно, с этим как-то связан выпуск новой версии POSIX. Многие авторы приводили один контраргумент, который я слышал и раньше:

«В общем случае, когда исходная строка умещается в конечный буфер, strlcpy будет обходить строку только один раз, а strlen + memcpy будут обходить её дважды».

Под этим аргументом скрывается допущение о том, что однократный обход строки выполняется быстрее. И, честно говоря, это вполне разумное допущение. Но справедливо ли оно? Об этом мы и поговорим в статье.

Читать далее

Два потока, одно ядро: как устроена одновременная многопоточность

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров32K

Одновременная многопоточность (Simultaneous multithreading, SMT) — это функция, позволяющая процессору одновременно обрабатывать команды из двух разных потоков. Но задавались ли вы когда-нибудь вопросом, как это работает? Как процессор отслеживает два потока и распределяет ресурсы между ними?

В статье я объясню, как устроена эта функция. Понимание внутреннего устройства SMT поможет вам решить, подходит ли она для ваших продакшен-серверов. Иногда SMT способна резко повысить производительность системы, но в некоторых случаях она приводит к замедлению. Знание подробностей позволит вам сделать правильный выбор.

Примечание: основная часть изложенного в статье относится к реализации SMT компании Intel, также называемой гипертредингом (hyper-threading). Она основана на научной статье компании, опубликованной в 2002 году.
Читать дальше →

Оптимизация производительности Flutter приложений

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.2K

Привет, Хабр!

У меня есть несколько советов по оптимизации производительности приложений на Flutter. Хотя фреймворк и имеет высокую производительность по умолчанию, неправильное написание кода может привести к проблемам с быстродействием. Давайте рассмотрим несколько важных моментов, которые помогут вам написать быстрый и эффективный код.

Читать далее

CPP — custom product page для мобильных приложений

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1K

CPP - custom product page для мобильных приложений.

Привет, коллега! Пора обсудить такую тему, как CPP. В рядах прошаренных мобильщиков этот формат рекламной кампании уже давно используется для снижения стоимости закупки. Но если ты пропустил эту тему, то тебе к нам — читать статью и просвещаться.

Читать далее

Вклад авторов