Обновить
128K+

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

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

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

Автоматическая маршрутизация: как оптимизация маршрутов помогает снижать транспортные расходы

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

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

Читать далее

Новости

Холмс, 993 вызова исчезли, и лучше не становится. Три ловушки Rust IPC в Tauri 2

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.9K

Холмс, я убрал 993 лишних IPC-вызова, и моё приложение стало тормозить в два с половиной раза сильнее. В логах было тихо. Бэкенд на Rust молчал. На границе с WebView творилось что-то необъяснимое…

Следствие начинается!

Как FMCG‑компаниям сэкономить деньги на планировании: 3 метода оптимизации на основе практических кейсов

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

Всем привет! Меня зовут Сергей Ронжин, я архитектор CPM/IBP-платформы Optimacros для интегрированного планирования, бюджетирования и бизнес-аналитики. В статье поделюсь своим опытом – расскажу о планировании в FMCG-бизнесе и том, какую цену платят компании, когда допускают ошибки в этом процессе. Чтобы добавить статье пользы, поделюсь практическими советами, как от «планирования ради плана» перейти к «планированию для прибыли». Статья будет полезна моделерам и архитекторам CPM/IBP-решений, а также бизнес-пользователям FMCG-компаний и специалистам по планированию.

Читать далее

Интерпретатор Python в 1024 байтах

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

Чтобы всё ещё ощущать себя человеком, по выходным я пишу код вручную.

Недавно я поставил перед собой задачу создания интерпретатора в 512 1024 байта старого доброго кода на C. И да, без хитростей с макросами и библиотеками.

def buzz():
for n in range(101):
if n % 15 == 0:
print("FizzBuzz")
else:
if n % 3 == 0:
print("Fizz")
else:
if n % 5 == 0:
print("Buzz")
else:
print(n)
buzz()

Наверно, мне не удастся уместить весь язык Python в интерпретатор такого размера. Так что же можно уместить в этот код?

Эта программа fizzbuzz явно выглядит, как Python. В ней есть def, двоеточия, отступы и отсутствуют скобки в операторах if. Мне кажется, это вполне походит на Python! Разумеется, наряду с использованием только подмножества синтаксиса придётся добавить и другие ограничения.

Но моя первая попытка оказалась неудачной.

Читать далее

«Билайн.Продвижение»: от тяжелого B2B к любви малого бизнеса

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.6K

Билайн.Продвижение — это маркетинговая платформа для В2В на базе BigData телекома. Такие платформы есть у каждого оператора: МТС Маркетолог, Мегафон Таргет. Сегодня разберу Билайн.Продвижение с точки зрения UX и что бы я делала, если была бы продактом. В этой статье я не буду рассматривать этическую сторону вопроса.

Привет! Меня зовут Маша, я Senior Product Manager и разбираю только те продукты, над которыми сама хотела бы поработать, так как ими пользуюсь, люблю и вижу, где есть потенциал роста. Мне драйвово искать для них решения, которые выводят продукт на новый уровень не только по деньгам, но и по UX и любви пользователей. Мои другие разборы: Как я искала точки роста для «Звука»: догонять рынок или создавать новый? и «Рейтинг ни на что не влияет»: Почему Яндекс.такси выбирает газлайтинг вместо честного UX.

Читать далее

Счётчик Яндекс.Метрики отнял у меня 30 баллов Lighthouse. Выключение Вебвизора не помогло

Время на прочтение7 мин
Охват и читатели7.2K

Одна и та же страница, три варианта, медиана трёх мобильных прогонов Lighthouse 12: без счётчика — 99 баллов и TBT 0 мс, со штатным сниппетом Яндекс.Метрики — 70 баллов и 2289 мс. Самый популярный совет «выключите вебвизор в init» не даёт почти ничего: те же 70 баллов и 2196 мс.

Как отделить счётчик от остального шума на A/B-стенде из локальных копий страницы, почему сам Lighthouse показывает виновника неправильно (third-party-summary рисует 70 мс при TBT больше двух секунд, потому что вся работа падает в bootup-time и остаётся неатрибутированной) и как вернуть 99 баллов, не потеряв данные, ради которых счётчик и ставился.

Читать далее

Кэшбек Шрёдингера и молчаливые проценты: Dark Patterns в банкинге

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

Газпромбанк появился у меня как и все другие - корпоративный банк, куда начислялась зарплата. На данный момент у них 5,7 млн активных розничных клиентов.

Второй банк которым я пользуют Т-банк - единственный банк, который я выбрала сама.

До этого у меня ещё была карта Альфа-банка, также корпоративная - её я закрыла после того, как внезапно обнаружила что несколько месяцев с меня списывали услугу, которую сами подключили. Раньше это был очень популярный даркпаттерн телекома, но они от него отказались, поняв, что отток не покрывает краткосрочную выгоду. Банки - пока этого не поняли, к сожалению.

Привет! Меня зовут Маша, я Senior Product Manager и разбираю только те продукты, над которыми сама хотела бы поработать, так как ими пользуюсь, люблю и вижу, где есть потенциал роста. Мне драйвово искать для них решения, которые выводят продукт на новый уровень не только по деньгам, но и по UX и любви пользователей. Мои другие разборы: «Рейтинг ни на что не влияет»: Почему Яндекс.такси выбирает газлайтинг вместо честного UX и Тест-драйв 2GIS: как завалить навигатор рекламой и потерять базовый UX.

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

Где нас запутали?

Структуры данных на практике. Глава 20: Исследование бенчмарков

Время на прочтение14 мин
Охват и читатели8.7K

«Существуют три вида лжи: ложь, наглая ложь и бенчмарки», — почти Марк Твен

В два часа ночи ведущий архитектор процессорного стартапа Сара Чен получила письмо, которое изменит траекторию движения её компании. Конкурент опубликовал подробный технический анализ, развенчивающий заявления о производительности флагманского продукта компании. Заголовок был жёстким: «Маркетинговый хайп против реальности: как X искусственно увеличила результаты бенчмарков на 300%».

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

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

Читать далее

Управляемые корутины в TypeScript: как получить контроль над асинхронностью и памятью. Разбираемся во всех аспектах

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели8.8K

Современный JavaScript / TypeScript сегодня, предоставляет мощный инструмент для асинхронного программирования, который знаком каждому - async/await на основе Promise. Он позволяет писать последовательный код и легко обрабатывать ошибки. Однако за простотой скрываются серьёзные ограничения, которые становятся критичными в высоко-нагруженных системах, играх, сложных пользовательских интерфейсах и приложениях, требующих предсказуемой производительности.

Представьте себе сервер, обрабатывающий тысячи запросов одновременно. Все они конкурируют за процессорное время. Как гарантировать, что запрос от клиента выполнится раньше, чем фоновая синхронизация? Как отменить долгую операцию, если клиент разорвал соединение? Как избежать пауз сборщика мусора при создании миллионов временных объектов? Нативный async/await не даёт ответов на эти вопросы - он лишь оборачивает асинхронные операции в удобный синтаксис.

В этой статье мы разберём, как кооперативные корутины (Coroutines) решают эти задачи на примере моей библиотеки ts-adaptive-coroutines, изучив каждый аспект по кирпичикам, посмотрев на инструмент, который добавляет в TypeScript адаптивные приоритеты, арены памяти, каналы, семафоры и много-поточность.

Читать далее

Скролл-фильм на лендинге весил 84 МБ. WebCodecs ужал его до 18 — вот что сработало, а что нет

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.3K

Скролл-фильм на лендинге — это обычно сотни WebP и десятки мегабайт. Рассказываю, как заменил секвенции кадров сырым H.264-потоком без контейнера и WebCodecs-декодером: 84 → 18 МБ на мобиле. С параметрами кодирования и тремя честными тупиками: почему HEVC оказался хуже x264, зачем шумодав не нужен и как B-кадры сломали фильм на живом iPhone так, что валидация этого не увидела.

Читать далее

Структуры данных на практике. Глава 19: Управление памятью в прошивках

Время на прочтение12 мин
Охват и читатели17K

«Управление сложностью — сама суть программирования компьютеров.» — Брайан Керниган

Стадия финального тестирования

Мы находились на этапе финального тестирования проекта IoT‑датчика — устройства для умного дома с 128 КБ ОЗУ, которое отслеживает температуру, влажность и качество воздуха. Прошивка прошла все функциональные тесты. Юнит‑тесты: зелёные. Интеграционные тесты: зелёные. Энергопотребление: в пределах спецификации.

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

Спустя три дня я пришёл в лабораторию, ожидая собрать логи тестирования и завершить проект.

Но вместо этого выяснилось, что все двенадцать устройств аварийно выключились.

В консоли последовательного порта на каждом устройстве была одна и та же ошибка:

[72:14:23] malloc failed: out of memory
[72:14:23] Fragmentation: 45%
[72:14:23] System halted

У меня cкрутило желудок. Проект планировалось выпустить через две недели. Я в точности знал, что произошло, и понимал, что решать проблему будет очень трудоёмко.

Читать далее

«Рейтинг ни на что не влияет»: Почему Яндекс.такси выбирает газлайтинг вместо честного UX

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

Долгое время в такси у меня был рейтинг 5 звёзд.

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

После этого, ждать такси я стала дольше, а рейтинг у приезжающих водителей — ниже. Пожаловалась очередному таксисту, и он сказал «Так у тебя рейтинг плохой, я тоже думал отказать». 4,85.

Привет! Меня зовут Маша, я Senior Product Manager и разбираю только те продукты, над которыми сама хотела бы поработать, так как ими пользуюсь, люблю и вижу, где есть потенциал роста. Мне драйвово искать для них решения, которые выводят продукт на новый уровень не только по деньгам, но и по UX и любви пользователей. Мои другие разборы: Как я искала точки роста для «Звука»: догонять рынок или создавать новый? и ВкусВилл: UX, который покоряет, и ложка дёгтя в офлайне. В этот статье разбираю ситуацию когда счастье пользователя противопоставляется экономическим затратам на продукт и как принимает решение Яндекс.такси сейчас.

Читать далее

Как агентский ИИ перестраивает клиентский опыт

Время на прочтение8 мин
Охват и читатели8.1K

Привет, Хабр! Представьте ситуацию в интернет-магазине. Клиент звонит и пишет в поддержку, так как получил поврежденный заказ. При этом он уже откладывал повторную покупку из-за долгой доставки в прошлый раз и не дописал отзыв, который хотел оставить неделю назад. Человек на грани ухода к конкурентам. Что увидит типичный оператор поддержки? Да просто текущее обращение. Он оформит возврат, закроет тикет — и на этом как бы все. Остальные сигналы останутся незамеченными им. В противовес ему, агентная система видит всю картину, ловит паттерны и закрывает боли клиента: оформляет возврат, предлагает промокод на следующую покупку, устраняет причину недовольства. Это рабочая модель, которую уже описывают аналитики McKinsey в свежем отчете о перестройке клиентского опыта в эпоху агентского ИИ.

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

Читать далее

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

Use-As-Dictionary: как мы перестали отдавать один и тот же бандл по пять раз в день

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

У нас в среднем два релиза в день, бандл весит 7,76 МиБ после brotli, и половина клиентов качает его заново по несколько раз в сутки: хеш в имени файла поменялся - значит, кеш мимо. Compression Dictionary Transport (RFC 9842) позволяет объявить вчерашнюю сборку словарём для сегодняшней, и вместо 7,76 МиБ уезжает 15 КБ.

Рассказываю, что из этого работает на практике при непрерывной поставке: почему дельты только к предыдущей сборке хватает лишь на 43% визитов, как считать окно словарей по своим логам, как отдавать дельты из nginx без reload на каждый релиз, и что ломается на откатах, канарейках и бампах зависимостей. Все цифры - с нашего портала, методика в конце.

Читать далее

Как я CRM в шаверму продал или… Автоматизация для новичков на примере малых предприятий

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели10K

«Паша! Я конечно не МГИМО финишед, но можешь хотя бы по‑русски, а?» — попросил Азиз когда я выпалил ему питч, заготовленый для грядущего ивента в 71 блоке на one North. Тогда я понял, что…
Потенциальный клиент для внедренца not!= специалист.
И я сделал то, что планирую сделать в этой серии статей — рассказал про интеграцию автоматизированного учёта в малом бизнесе простыми словами.

Взять шаверму...

Подготовка к роли Lead Collection в банк Plata: из чего состоит, метрики и гипотезы роста

Уровень сложностиПростой
Время на прочтение22 мин
Охват и читатели8.6K

Я регулярно смотрю на рынок и ищу интересные вакансии. Попалась вакансия Банка Плата с переездом в Мексику на лида пользовательских путей всего процесса взыскания (начиная от PreCollection и до взысканий, списаний и судов), управлять всеми каналами коммуникации (смс, пуши, whatsapp, IVR, звонки), выявлять операционную неэффективность. Звучит очень вкусно и как раз то, чем я люблю заниматься - повышать любовь пользователей и растить деньги бизнесу, а здесь просто поле непаханое!

Привет! Меня зовут Мария Минакова, я Senior Product Manager и я разбираю только те продукты, над которыми сама хотела бы поработать, так как ими пользуюсь, люблю и вижу, где есть потенциал роста. Мне драйвово искать для них решения, которые выводят продукт на новый уровень не только по деньгам, но и по UX и любви пользователей. Мои предыдущие разборы: Яндекс.Музыка: как нарисовать красивые метрики, испортив продукт и ВкусВилл: UX, который покоряет, и ложка дёгтя в офлайне.

В этой статье я поделюсь как готовлюсь к вкусным позициям на примере вакансии в Plata Bank. По этапам расскажу ход моих мыслей, что важно изучить на мой взгляд и как я подхожу к процессу подготовки к собеседованию на роль продакта. А ещё немного о том, что я посчитала важным изучить о стране ДО переезда. Будет интересно тем, кто как я не знает ничего о процессе коллекшена, а для тех, кто хочет посмотреть на этапы подготовки - составила содержание 🥰

Погрузиться в коллекшн

Как мы вынесли алгоритм ценообразования из кода Яндекс Такси (и почему это не было очевидно с самого начала)

Время на прочтение17 мин
Охват и читатели26K

Когда вы открываете Яндекс Go для заказа такси и вводите адрес, приложение за доли секунды показывает цену. Кажется, что это несложно: Кажется, что это несложно: взять расстояние и время в пути, умножить их на значения из тарифа. На самом деле, за этой ценой стоит не один десяток факторов — например, скидки, спрос, геозоны. И это ещё без учёта того, что пассажир взял с собой кота или лыжи.

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

Читать далее

Как я искала точки роста для «Звука»: догонять рынок или создавать новый?

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

После того, как я раскритиковала Яндекс.Музыку, следуя своему принципу "Критикуя - предлагай" я решила накидать идей, куда бы я копала с музыкальным стримингом крупными блоками.

Почему именно Звук? Потому что у меня туда был собес и я думала про него) 

Ещё потому что: 

- Яндекс в последние года активно выпускает фичи ради фичей в своих продуктах, 

- VK активно вызывает негатив насильственной политикой внедрения некачественных продуктов,

- МТС.музыку что-то забросили и там маленькая библиотека. 

Читать далее

Чат на сайте стоит дороже, чем кажется: как я замерил его цену и переписал виджет под результат

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

Полгода назад я закрывал технический долг по производительности на клиентском проекте. Обычная история: интернет‑магазин, мобильный Performance в PageSpeed — 29, владелец каждую неделю спрашивает, когда будет зелёная зона. Мы сделали всё, что делают в таких случаях. Перегнали изображения в WebP и AVIF, вынесли критический CSS в инлайн, убрали три подключения Google Fonts на self‑host, порезали неиспользуемый JavaScript, настроили кэширование на уровне Nginx, подключили CDN. Работы на два месяца.

Мобильный Performance стал 31.

Я открыл трейс в DevTools, развернул Main thread и минут пять просто смотрел. Больше половины длинных задач на главном потоке не имели никакого отношения к сайту. Это был чат.

Дальше начинается то, ради чего написана статья. Я задал себе вопрос, который до этого не задавал ни разу за десять лет работы: а сколько вообще стоит чат на сайте? Не в рублях в месяц — в миллисекундах. И обнаружил, что честного ответа нет ни у кого. Вендоры публикуют вес загрузочного скрипта, обычно 8–15 КБ, и это правда ровно настолько, насколько правдива фраза «билет на самолёт стоит 40 долларов» без учёта багажа, сборов и трансфера. Lighthouse показывает общий счёт по странице и не выставляет его отдельным подрядчикам. Владелец сайта видит красную цифру и не знает, чья она.

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

Читать далее

Интеграция SAP с ИИ: от прототипа к промышленному решению на ABAP

Время на прочтение4 мин
Охват и читатели6.8K

Привет, Хабр! Меня зовут Виктория Мохирева, я консультант SAP MM. Моя прошлая статья была посвящена тому, как с помощью локального класса и глобального API мы с командой «приручили» большую языковую модель для работы с пересортицей. И, как это часто бывает, с прототипа все только началось.

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