Обновить
19.6

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

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

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

Кто такой CDTO и зачем он нужен бизнесу

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

ВВЕДЕНИЕ

В статье разбирается, почему роль CDTO (Chief Digital Transformation Officer, директор по цифровой трансформации) перестала быть модным западным термином и стала практическим ответом на российские реалии — импортозамещение, рост сложности IT‑ландшафта, усиление регуляторных требований и ускорение конкуренции. Автор показывает типичную картину в компаниях от 300 до 5000 сотрудников: есть множество внедрённых систем (1С, Битрикс24, облака Яндекса и VK, ClickHouse, HR‑ и аналитические решения), но нет единой стратегии, приоритизации и человека, который связывает интересы CEO, CIO, CTO, CFO и бизнеса.

Через конкретные примеры и цифры описывается цена хаотичной цифровизации: проваленные сроки проектов, технический долг, сопротивление сотрудников, неэффективные траты 15–30% IT‑бюджета и потеря доли рынка из‑за медленной трансформации. CDTO в этой логике выступает не «ещё одним айтишником», а владельцем стратегии трансформации, архитектуры, данных, процессов, команды и ROI инвестиций.

Статья даёт структурированный «путеводитель» для собственников и CEO: объясняет, чем CDTO отличается от CIO и CTO, какие функции он берёт на себя ежедневно, какой профиль кандидата искать и по каким критериям его оценивать. Отдельные разделы посвящены первым 100 дням CDTO, пошаговому roadmap трансформации на 36 месяцев, реальным кейсам российских компаний, метрикам и KPI, а также критическим ошибкам, которые чаще всего убивают трансформацию. Завершает материал практический чек‑лист: нужен ли CDTO именно вашей компании, какие есть альтернативы и в каких ситуациях промедление с назначением CDTO превращается в стратегический риск.

Читать далее

Новости

Самый тупой способ повышения производительности

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

Введение

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

Читать далее

Любительское программирование, как оптимизация рабочих процессов

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

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

Читать далее

Я создал вдвое более быстрый лексер, но обнаружил, что узким местом был ввод-вывод

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

Я создал лексер ассемблера ARM64 (ну, точнее, сгенерировал его из моего собственного генератора парсера, но пост не об этом), обрабатывающий код на Dart вдвое быстрее официального сканера. Этого результата я добился при помощи статистических методик надёжного измерения малых различий в производительности. Затем я провёл его бенчмарк на 104000 файлов и обнаружил, что узким местом был не мой лексер, а ввод-вывод. Это история о том, как я случайно узнал, почему pub.dev хранит пакеты в виде файлов tar.gz.

Читать далее

Структуры данных на практике. Глава 3: Бенчмаркинг и профилирование

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

Проблема измерений

Узнав из Главы 2 об иерархии памяти, вы, возможно, захотите оптимизировать свой код. Но есть одна проблема: как понять, что оптимизация на самом деле сработала?

Этот урок дорого мне обошёлся.

Я оптимизировал реализацию хэш-таблицы в загрузчике. Исходя из своего понимания поведения кэша, я переписал хэш-функцию так, чтобы она была «более дружественной к кэшу», и был уверен, что она станет быстрее.

Я запустил код. Мне показалось, что он быстрее. Я закоммитил изменения.

Неделю спустя коллега провёл бенчмарки и выяснил, что моя «оптимизация» замедлила код на 15%. Я оптимизировал не то, но у меня не было данных, чтобы подтвердить мои предположения.

Вывод: никогда не доверяйте своей интуиции, всегда проводите замеры.

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

Читать далее

Структуры данных на практике. Глава 2: Иерархия памяти

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

«Память — это современный диск, диск — это современная лента», — Джим Грей

Проблема ста тактов

В Главе 1 мы говорили о том, что промахи кэша стоят 100-200 тактов, а попадания в кэш — всего 1-4 такта. И это не какая-то мелкая деталь, а самый важный фактор современной производительности.

Ниже я расскажу, почему это так.

Однажды я оптимизировал драйвер устройства для встраиваемой системы на RISC-V. Драйвер должен был обрабатывать пакеты от сетевого интерфейса, но при большой нагрузке мы теряли пакеты. CPU работал с частотой 1 ГГц, а для обработки каждого пакета требовалось около 500 команд. Простая математика:

500 команд ÷ 1 ГГц = 500 наносекунд на пакет

При скорости 500 нс на пакет мы могли бы обрабатывать 2 миллиона пакетов в секунду. Однако мы справлялись всего с 200 тысячами пакетов в секунду, то есть в десять раз меньше, чем ожидалось.

Профилировщик показан следующее:

$ perf stat -e cycles,instructions,cache-misses ./driver_test Performance counter stats:

5,000,000 cycles

500,000 instructions

45,000 cache-misses

Постойте-ка: 500000 команд должны занимать 500000 тактов (при 1 IPC). Но мы видим 5 миллионов тактов. Куда подевались лишние 4,5 миллиона тактов?

Читать далее

Как я сделал классификатор обращений для телеком-поддержки на своей LLM за $10/месяц

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

Fine-tuned Qwen2.5-0.5B для классификации обращений в поддержку: intent, category, urgency, sentiment, routing — всё в одном JSON. Модель 350 МБ, работает на CPU, стоимость инфраструктуры $10/месяц. Рассказываю как обучал, квантовал и деплоил.

Читать далее

Клиенты, отток и приток: где бизнес чаще всего ошибается?

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

Начнем данную статью с казалось бы простого вопроса: "Кто такие клиенты и зачем их считать?". Ответ на данный вопрос не такой простой и вообще философский! Каждая компания и человек в отдельности ответят на него по-своему.

В телеком компании вам скажут: "Клиент = абонент. Мы считаем их прирост, а также дни, в течение которых они платят нам абонентскую плату.". В небольшой парикмахерской вам, возможно ответят так: "Ну вот кто пришел стричься, тот и клиент. Считаем количество тех, кто постригся за отрезок времени.". Подсчет клиентов может даже пригодиться для оценки компании третьими лицами, здесь также используются свои методологии. И так далее... Думаю, мораль ясна, каждый определяет для себя сам, кто является клиентом и как их считать.

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

Читать далее

Оптимизация кода. Что быстрее: циклы vs стрелочные функции. Простая задача с собеседования

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

Оптимизация кода. Что быстрее: циклы vs стрелочные функции. Простая задача с собеседования. Разбор простых итераций с примерами кода

Читать далее

Структуры данных на практике. Глава 1: Разрыв в производительности

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

Часть I: Основы

«В теории теория и практика одинаковы. На практике это не так». — авторство приписывается разными специалистам по computer science

Загадка

Два часа утра. Я смотрю на совершенно нелогичные данные профилирования.

В процессе работы над загрузчиком для SoC RISC-V у нас возникла проблема с производительностью. Загрузчик должен был искать конфигурации устройств в таблице: примерно пятьсот элементов, каждый с 32-битным ID устройства и указателем на данные конфигурации. Всё просто.

Мой коллега реализовал эту систему с помощью хэш-таблицы. «Поиск за O(1), — сказал он уверенно, — лучше уже некуда».

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

Я попробовал использовать очевидную оптимизацию: заменить хэш-таблицу двоичным поиском по отсортированному массиву. Двоичный поиск занимает O(log n), что теоретически хуже, чем O(1). Так написано в учебниках. Мой преподаватель алгоритмов был бы разочарован.

Но в результате загрузчик оказался на 40% быстрее.

Как O(log n) смогло победить O(1)? Что происходит?

Читать далее

Насколько быстро браузеры могут обрабатывать данные в Base64?

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

Base64 — это схема кодирования двоичных значений в текст, преобразующая произвольные двоичные данные (например, изображения, файлы или любые байтовые последовательности) в безопасную печатную ASCII-строку, состоящую из 64-символьного алфавита (A–Z, a–z, 0–9, +, /). Браузеры применяют эту схему в JavaScript для встраивания двоичных данных непосредственно в код/HTML или для передачи двоичных данных в виде текста.

Недавно в браузерах появились удобные и безопасные функции для обработки Base64: Uint8Array.toBase64() и Uint8Array.fromBase64(). Хоть у них и есть множество параметров, смысл их сводится к кодированию и декодированию.

При кодировании они берут 24 бита из входных данных и разделяют их на четыре сегмента по 6 бит, и каждое 6-битное значение (в интервале от 0 до 63) соотносится с конкретным символом из алфавита Base64: первые 26 символов — это буквы A-Z в верхнем регистре, следующие 26 — a-z в нижнем, затем идут цифры 0-9 и, наконец, символы «+» и «/» в качестве 62-го и 63-го символов. Если длина входных данных не кратна трём байтам, то в качестве заполнителя используется знак «=».

Насколько же быстро могут работать эти функции?

Читать далее

ЕРИП перешел на онлайн-возвраты — что это меняет?

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

Система ЕРИП (Автоматизированная информационная система «Расчет») функционирует в Беларуси с 2008 года. До недавнего времени для предпринимателей и бизнесменов, принимающих через нее платежи, возврат средств был болезненной темой. Уведомление о платеже поступало мгновенно — а вот вернуть деньги клиенту можно было только через многоэтапную, ручную процедуру, требующую сбора реквизитов, согласований и ожидания. 

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

Разбираемся, что изменилось и как агрегаторы превращают возвраты в полуавтоматическую операцию за пару минут.

Читать далее

Инженерия UX и производительности: от ядра к периферии

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

Очень краткий рассказ про семь проектов, построенных одним инженером на унаследованной платформе.

Легаси. Много дополнительных модулей. Очень медленная загрузка страниц. Визуально сайт выглядит морально устаревшим. Мобильного приложения нет. Пользователи есть, пользуются, но страдают (с большими экранами очень страдают).

Хотелось не просто ускорить метрики, а выстроить полноценную систему, которая бы работала для пользователя как обычное SPA-приложение: быстро, плавно, визуально современно, а главное с уважением к пользователям.

Читать далее

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

Нейробиология в дизайне: как минималистичный UI снижает когнитивную нагрузку

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

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

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

Читать далее

Знай своих потребителей в лицо: бизнес-вызовы текущего момента в очень простой двоичной логике (специально для Хабра)

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

ЗРИ В КОРЕНЬ:            
Про вызовы текущего момента в очень простой двоичной логике (специально для ХАБРа).

В качестве введения

 Те, кто системнее понимает прикладную задачу (структуру, условия, взаимосвязи), тот сделает лучшую постановку задачи и достигнет больших результатов от ее решения. Поэтому предлагаю читателям ХАБРа познакомиться с системным подходом для анализа Прикладного промышленного мира и постановкой задачи по радикальному повышению экономической эффективности деятельности промышленных предприятий/цепей поставок от эксперта консалтинговой группы компаний «Приоритет».

Я поделюсь знаниями из нашей «внутренней кухни», чтобы содействовать сближению видения представителей Прикладного промышленного и IT миров на постановку задачи: «Что делать, чтобы стать лучше? Намного лучше!».

 Глава 1. «Бытие определяет сознание, или что происходит и к чему это обязывает?»

 Пара вопросов в качестве разогрева и гимнастики для ума:

Читать далее

Я написал алгоритм вычисления дат, который на 30–40% быстрее остальных

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

В этой статье я представлю мой завершённый очень быстрый алгоритм преобразования дат.. Он обеспечивает существенный прирост скорости, по величине сравнимый с приростом, достигнутым предыдущим самым быстрым алгоритмом (Neri-Schneider 2021) относительно его предшественника (C++ Boost). Полная реализация алгоритма на C++ выпущена как свободное и бесплатное ПО (лицензия BSL-1.0).

Алгоритм генерирует точные результаты за период ±1,89 триллиона лет, поэтому подходит для обработки полного 64-битного времени UNIX (в секундах).

Читать далее

Как оптимизировать код WebAssembly при помощи встраивания функций и деоптимизации

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

В этом посте будут объяснены две стратегии оптимизации WebAssembly, которые не так давно были реализованы в движке V8 и вошли в версию браузера Google Chrome M137. Речь пойдёт о спекулятивном встраивании call_indirect inlining и о поддержке деоптимизации в WebAssembly. В сочетании два этих приёма помогают генерировать более качественный машинный код, так как основаны на допущениях, которые строятся, исходя из обратной связи, поступающей от среды исполнения. Благодаря этому, WebAssembly выполняется быстрее, особенно это касается программ WasmGC. Например, проверив эти приёмы на наборе микробенчмарков, написанных на Dart, видим, что комбинация двух оптимизаций даёт ускорение в среднем более чем на 50%. В более крупных и реалистичных приложениях и на тех бенчмарках, которые рассмотрены ниже, достигается ускорение между 1% и 8%. Деоптимизации — также очень важная составляющая для дальнейшей оптимизации в будущем.

Читать далее

Client Hints: разбор технологии, которая заменит User-Agent

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

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

Раньше для этого можно было использовать только строку User‑Agent, которую браузер отправляет автоматически, но её избыточность и сложность парсинга стали сдерживать развитие веба. Client Hints предлагает другой подход: вместо того чтобы сразу раскрывать всю информацию, браузер передаёт только те данные, которые действительно нужны сайту.

На связи Степан из команды Яндекс Браузера. Сегодня поговорим о том, как мы переходим от устаревшего User‑Agent к современной технологии Client Hints. В статье разберём, почему User‑Agent стал проблемой, как работают хинты под капотом и какие перспективы у перехода на новую технологию.

Читать далее

Как молодой девушке уехать на Яндекс.Такси в промзону и пропасть среди гаражей

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

Прошло почти 5 лет с момента вскрытия уязвимости кнопки «Безопасность» в сервисе Яндекс.Такси, который ныне зовётся YandexGo. Но я снова решил сожрать тот же кактус.

И отправил двух дорогих мне людей на этом сервисе...

Уехать в гаражи на Яндекс.Такси...

Оптимизация памяти в C# (и немного в Unity): эффективные методы и стратегии

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

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

Язык программирования C#, несмотря на то, что обеспечивает автоматическое управление памятью с помощью механизма сборки мусора (GC), требует от разработчиков специальных знаний и навыков для оптимизации работы с памятью.

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