Нам нужны твои мозги

Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.

На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решение.

Фронт: Добавить паралелльный рендеринг в цветовой миксер OKLCH

Для уверенных в себе, задача на неделю

В цветовом миксере OKLCH самая долгая операция — рисование на <canvas>. Есть идея, как ее ускорить: несколько веб-воркеров будут генерировать ImageBitmap для своей части графика.

Польза: строка в резюме с PR в популярный проект.

  1. Форкнуть проект.
  2. Убрать scale-хак, когда есть быстрый и медленный рендеринг, а в быстром рендеринге мы понижаем разрешение на основе бенчмарка. Нужно внимательно изучить хак и убрать весь его код (например, удалить еще и Pre-paint из бенчмарка).
  3. В /view/chart/index.ts изменить логику рендера:
    1. В файле создается сразу 4 воркера на каждый график.
    2. Когда нужно обновить график, главный поток посылает данные для отрисовки разных частей <canvas> в веб-воркеры.
    3. Получив команду на отрисовку, воркеры будут работать с /view/chart/paint.ts, чтобы получить ArrayBuffer с цветами каждого пикселя. Его воркеры отправляют обратно в главный поток избегая копирования.
    4. Пока воркеры работают, главный тред не должен отправлять новых команд на отрисовку этого графика. Для этого нужно запоминать последнюю команду на отрисовку.
    5. При получении сообщения от воркера с пикселями, главный поток должен вывести его на <canvas>. Если все воркеры графика завершили работу, нужно посмотреть, нет ли новой отложенной команды (и отправить только самую последнюю на перерисовку).
  4. Важно обновить бенчмарк. Отдельно учитывать время Paint из воркеров (они должны сообщать его в сообщении вместе с пикселями) и отдельно Freeze (время на заполнение <canvas> в главном потоке). Важно правильно выводить время, например, самое большое за последние 100 мс.