Разработка онлайн-графического редактора под ключ (аналог Canva)

Заказчики уходят, если редактор тормозит на сложном макете или теряет правки при пиковой нагрузке. Мы разрабатываем онлайн-графический редактор под ключ: собираем графическое ядро, редакторские сценарии и поддержку так, чтобы работа с холстом оставалась предсказуемой при росте числа пользователей. Обсудим задачу — вернёмся с оценкой и планом.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка онлайн-графического редактора под ключ (аналог Canva)
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

Разработка онлайн-редактора: где ломается производительность

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

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

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

За всеми тремя сбоями стоит одна архитектурная причина: документ обрабатывается целиком, а не по частям, и не имеет надёжной точки восстановления. Разбираем, как это закрывается — на уровне модели документа, хранения версий и синхронизации участников.

Что меняется после переработки ядра редактора

После переработки ядра редактор перестаёт «задумываться» на больших макетах, а работа пользователя переживает обрыв связи. Эффект мы замеряли до и после по четырём величинам: время отклика интерфейса, доля успешных сохранений, время восстановления после сбоя и класс отказов, которые ушли.

Скорость отклика интерфейса на больших макетах

Раньше каждое действие перерисовывало весь холст: правка в макете на сотни слоёв давала заметную паузу, перетаскивание «догоняло» курсор, панель слоёв подвисала. Ядро перевели на инкрементальную отрисовку — обновляется только изменённая область, тяжёлые операции ушли в фоновый поток, список слоёв виртуализирован. Отклик сократился с секунд до долей секунды и почти не зависит от числа слоёв: макет в разы тяжелее ведёт себя так же.

Сохранность работы пользователя при обрыве связи

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

Совместная работа над макетом

Правки сливаются по объектам: изменение одного блока не блокирует макет целиком, текст сводится посимвольно, конфликт разрешается детерминированно, курсоры коллег видны в реальном времени. Доля успешных сохранений держится выше 99 %, а класс отказов «правки потеряны при обрыве» ушёл полностью.

Способы организации графического ядра: сравнение подходов

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

Серверный и клиентский пути отрисовки

Серверная отрисовка макетов предсказуема: один и тот же файл даёт одинаковый результат независимо от устройства и набора шрифтов в системе. Клиентская отрисовка в браузере даёт мгновенный отклик на перетаскивание и зум, потому что кадр считается локально, без обращения к серверу. Так устроены редакторы уровня Canva, где холст и история правок живут у пользователя.

Вариант Когда подходит Ограничения
Серверная отрисовка макетов Пакетные задачи: превью, печатные шаблоны, отчётные документы, макеты фиксированного формата Правка запаздывает: каждый шаг — запрос и очередь. При насыщении сцены объектами время отклика растёт линейно
Клиентская отрисовка в браузере Интерактивный холст, где важны зум и перетаскивание без задержки; крупные многослойные макеты Ограничена память вкладки: тяжёлые сцены дробим на слои и подгружаем частями. Поведение зависит от браузера
Гибрид: сцена в браузере, тяжёлые операции на сервере Основной сценарий продукта: правки у пользователя, экспорт и печать на стороне сервиса Нужна синхронизация сцены и стабильный формат обмена, иначе версии расходятся при конфликте правок

Как выбрать режим под профиль нагрузки

Считаем профиль: сколько объектов в типовом макете, сколько участников правят его одновременно, какая доля сессий заканчивается экспортом. Если холст небольшой и важнее точность печати — ведём сцену на сервере; если макет растёт до тысяч слоёв и его правят вживую — считаем в браузере, а экспорт выносим на сервер. Формат хранения при этом один: векторное дерево слоёв плюс изображения отдельными объектами, без встраивания в файл сцены. Так макет остаётся компактным, а совместные правки сводятся быстро.

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

Этапы внедрения: от аудита текущего кода до передачи

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

Что происходит на этапе обследования

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

  1. Обследование. Код, данные, замеры времени отклика на реальных сценариях.
  2. Схема данных и прав. Формат документа, версионирование, роли, общие папки.
  3. Ядро редактора. Холст, слои, инструменты, экспорт с сохранением совместимости форматов.
  4. Совместная работа. История правок, автосохранение, откат к предыдущей версии.
  5. Нагрузочная проверка редактора. Пиковая одновременная работа и пакетный экспорт крупных макетов.
  6. Приёмка и передача. Проверка по списку сценариев, код, схемы, документация.

Как проходит приёмка результата

Приёмка редактора идёт на стенде, повторяющем рабочую конфигурацию: создание макета, соавторство, экспорт, восстановление после обрыва связи. Смотрим не только «работает», но и как ведёт себя система под нагрузкой и после отката. Вместе с кодом передаём схему данных, описание прав и порядок развёртывания — чтобы команда могла развивать редактор дальше без нас.

Схемы, политики доступа и регламенты выпуска версий

Редактор передаём не «чёрным ящиком»: вместе с документацией на редактор, по которой новый инженер поднимает окружение и разбирается в модели данных. Ниже — перечень артефактов, которые остаются у команды заказчика после запуска.

Схемы хранения и совместной работы над макетом

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

Регламенты выпуска версий и отката

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

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

Кейс: как редактор перестал терять правки при пиковой нагрузке

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

Что было до переработки

На макетах от двухсот слоёв отклик на действие доходил до 2,5 секунды: каждое перемещение блока пересобирало состояние всего документа. На пике — около трёхсот одновременных сессий — доля потерянных правок доходила до 7%, а сбои сессий случались в 4–6% подключений в час. Конфликт разрешался по принципу «побеждает последнее сохранение»: двое двигали один блок — версия одного молча пропадала.

Что изменилось после

Состояние перевели на операции по слоям: правка применяется атомарно к конкретному объекту, а не к документу целиком. При одновременном изменении одного блока обе версии сохраняются и показываются автору как варианты — класс «тихой» потери правок ушёл. Ориентиром по плавности был уровень, заданный Canva, но удержать его требовалось на тяжёлых макетах.

Метрики после: отклик на макете от двухсот слоёв — 250–300 мс вместо 2,5 с, потерянных правок — ноль, сбои сессий на пике — десятые доли процента. Группировка операций в пачки снизила число обращений к серверу в пиковые минуты примерно в шесть раз.

Что делать, если редактор уже запущен и требует развития?

Живой редактор — не завершённый проект, а поток изменений: сцены, слои, история действий, экспорт. Доработка готового редактора начинается не с кода, а со снятия замеров: где отваливается отрисовка при большом числе объектов, на каких операциях растёт время ответа, какие ошибки пользователи обходят вручную. Без этих цифр перестройка превращается в спор о вкусах.

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

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

Замена ядра без простоя идёт через параллельный контур. Новая версия поднимается рядом, на неё направляют часть трафика, результаты сверяют с текущими — и только потом переключают остальных. Переключение делается флагом на стороне сервиса, откат — возвратом флага; данные мигрируют постепенно, а не одним окном.

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

Технические сомнения: производительность, безопасность, сроки

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

Несколько авторов правят один макет — что будет с конфликтами?

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

У нас есть свои шаблоны — их придётся собирать заново?

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

Выдержит ли редактор пиковую нагрузку?

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

Как в редакторе разграничиваются права?

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

Как выпускаются обновления, если редактором уже пользуются?

Миграции схемы данных делаем обратно совместимыми, выкатка идёт постепенно и сопровождается автоматическим откатом при росте ошибок. Активная сессия автора при этом не рвётся: несохранённый макет дожимается в фоне.

Обсудим задачу: пришлём оценку и план работ

Первый разговор занимает 30–40 минут и идёт без презентаций: разбираем пользовательские сценарии будущего редактора, кто в нём работает, какие форматы на входе и выходе, как хранятся файлы и как устроен доступ. Этого достаточно, чтобы понять класс задачи, её объём и где находятся основные риски.

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

С оценкой и планом этапов возвращаемся за 2–3 рабочих дня. В план входит:

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

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

  • Заказывать «сайт с картинками» вместо ядра для работы с графикой: структуру и модель данных закладывают как у обычной страницы, и потом любая новая операция на холсте требует переписывать основу
  • Начинать с внешнего вида панели инструментов, а не с ядра обработки: интерфейс получается аккуратным, но при десятке слоёв и крупном полотне всё начинает отзываться с задержкой, и переделывать приходится не кнопки, а движок
  • Не зафиксировать предельные сценарии: какой размер полотна, сколько слоёв и объектов, сколько человек правят один макет одновременно — без этих границ невозможно ни спроектировать ядро, ни проверить его на прочность
  • Не описать форматы ввода и вывода и судьбу уже накопленных макетов: импорт ломается на первом же шаблоне заказчика, а готовые материалы нельзя перенести в новый редактор
  • Планировать совместную работу как надстройку «в конце»: одновременное редактирование, история версий и откат правок требуют заложить модель данных и правила доступа с самого начала, иначе их прикручивают поверх готового кода ценой переработки
  • Ставить задачу одним выпуском «сразу всё»: разумнее вывести рабочее ядро с базовым набором инструментов и наращивать возможности по мере проверки на живых пользователях, иначе сроки уезжают, а обратная связь приходит слишком поздно
  • Не продумать роли, права доступа, историю правок и восстановление: в результате спорные изменения не отследить, а потерянная работа всплывает уже в переписке с клиентами
  • Оценивать результат по количеству инструментов на панели, а не по стабильности: широкая панель при падениях под нагрузкой раздражает пользователей сильнее, чем скромный, но предсказуемый набор
  • Забыть про слабые устройства и мобильные браузеры: редактор тестируют на мощной машине заказчика, а на ноутбуке и планшете обычного пользователя он оказывается непригоден
  • Не договориться о передаче проекта: без описания устройства ядра, порядка выпуска версий и регламента правок редактор остаётся «чёрным ящиком», который некому развивать после запуска

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060