Как стать автором
Обновить
1.47

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

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

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

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

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

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

Читать далее

Новости

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

Истории

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

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

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

Читать далее

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

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

Современное оборудование невероятно быстрое. 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 мин
Количество просмотров12K

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

Читать далее

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

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

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

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

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

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

Читать далее

Зачем лабораториям кастомные решения и как мы их создаем

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

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

Читать далее

Factorio: оптимизации 2.0

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров31K
Все мы любим строить всё больше и больше, поэтому когда сталкиваешься с ограничением UPS, это сильно расстраивает. Именно поэтому мы обязаны продолжать свой бесконечный процесс оптимизации игры.

▍ Оптимизация роботов (автор: Rseding)


За годы работы над Factorio я профилировал множество файлов сохранений и регулярно встречал сохранёнки, где большая часть времени обновления тратится на логистику и/или строительных дронов. В этом нет ничего нового, но наряду с дронами существуют и дронстанции (в больших количествах).

Типичная фабрика с кучей дронстанций (Roboport)

Дронстанции никогда не были «медленными», но они всегда присутствуют на карте, и у игроков есть мотивация строить их в больших количествах; к тому же, их будет ещё больше в грядущем Space Age, где нужно будет многое делать удалённо. Сохранение, полученное после последней сессии плейтестинга, снова показало, что они отнимают небольшое, но ненулевое количество времени, поэтому я снова задумался о них.
Читать дальше →

Как мы помогли клиентам автоматически настраивать программы для работы с КЭП

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

Устанавливать и настраивать программы для работы с электронной подписью можно разными способами. Когда-то мы это делали с помощью CD-дисков, а потом поняли, что это долго и неудобно. Тогда мы разработали решение, которое позволяет клиентам Удостоверяющего центра и других продуктов Контура устанавливать и настраивать программы без каких-либо действий со стороны пользователя и практически без инструкций. И имя ему — Контур.Веб-диск.

Я Андрей Чеканов, ведущий инженер-программист и разработчик в Контуре. В статье расскажу, как мы создавали это решение и почему не все получилось сразу.

Читать далее

Насколько быстр Javascript? Симулируем 20 миллионов частиц

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

Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.

Поехали.

Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.

Читать далее

Профайлер памяти. Зачем он нужен и как использовать

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


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

Профайлер можно использовать не только в разработке, но и в системном администрировании, чтобы отслеживать рабочие процессы конкретных приложений, скриптов и задач.
Читать дальше →

Юнит-экономика: база простыми словами с примерами

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

🤬 ARPC = (AvP – COGS) × APC — 1s COGS

🤬 LTV = (AVp − VC × AVp) × RPR × Lifetime

🤬 ARPPU = (AVp − COGS) × APC − 1COGS

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

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

Читать далее
1
23 ...

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