Краткий рассказ о том, как развивалась Fela, где мы находимся сейчас и что нас ждет в 2018 году и далее.

Ретроспектива

Такое ощущение, что вчера я начал разрабатывать API для совершенно нового CSS в библиотеке JS, используя свои знания, полученные из response-look. Было много дискуссий о разделении задач, проблемах с производительностью во время выполнения и извлечении статических стилей, и каждый день появлялись тонны различных библиотек.

Фела была одной из таких. Сейчас ему уже больше 2-х лет, и за последние 2 года многое произошло. Все больше и больше людей начали использовать решения для стилизации на основе JavaScript, и они стали меньше, быстрее и удобнее. Помимо самых популярных решений, таких как стилизованные компоненты и эмоции, Fela была принята многими компаниями, включая HelloFresh, CloudFlare, N26 и Volvo Cars. Даже Microsoft сейчас с этим экспериментирует.

Сегодня

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

На самом деле, сейчас я не так часто работаю над Фелой. Я часто использую тщательно отобранную часть его API и очень доволен этим. Тем не менее, я чувствую себя плохо из-за всех открытых проблем, но также перенапрягаюсь и подавляю, пытаясь их исправить, потому что это стало довольно сложным, и я с трудом могу отслеживать все различные варианты использования, не говоря уже о крайних случаях.
Чтобы улучшить ремонтопригодность, ответственность и понятность, я решил внести важные изменения в Fela в будущем.

Будущее

Основная цель - принять простоту. Это особенно относится к привязкам Фелы (react-fela, inferno-fela, preact-fela), которые все основаны на одной и той же абстракции (fela-bindings). Вместо множества различных API-интерфейсов с множеством различных вариантов использования мы предпочитаем один простой API с набором тщательно отобранных параметров: FelaComponent.

Но это не значит, что вы не сможете охватить все эти варианты использования. Фактически, он даже исправляет некоторые давние проблемы. Важной частью является обретение достаточной гибкости, чтобы перенести все различные варианты использования / граничные случаи в область пользователя.
Благодаря этому мы даже получаем множество других косвенных преимуществ, таких как более простая документация, меньшие размеры пакетов и, в конечном итоге, более быстрый рендеринг.
Это также помогает нам быстрее улучшаться, например поддержка React 16.

Миграция

Если вы зависите от скоро устаревших API-интерфейсов Fela, возможно, вы испугаетесь. Значит ли это, что мы должны все перенести? Означает ли это, что нам нужно провести рефакторинг всей нашей кодовой базы? Краткий ответ: Нет.
Чтобы сделать этот процесс максимально гладким и простым, мы стараемся предоставить кодовые модификации для большинства случаев использования. Мы также добавим достаточно информации в руководство по миграции. Кроме того, мы всегда готовы помочь, поэтому без колебаний подключитесь к Gitter. Кроме того, мы не будем удалять эти устаревшие API сразу, а это значит, что они все еще могут получать исправления и улучшения.
И последнее, но не менее важное: если вас совсем не устраивают эти изменения, не стесняйтесь форкнуть текущий API и поддерживать свои собственные привязки. Таким образом, все будут довольны, но нам не нужно учитывать их при будущих обновлениях.

Преимущества

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

  • Полная поддержка React 16 (новый контекстный API для тематики, прогрессивный рендеринг с renderToNodeStream и собственными ссылками вместо innerRef)
  • Пакеты меньшего размера (особенно react-fela)
  • Более быстрый рендеринг (до 50% быстрее)
  • Более стабильный и надежный API
  • Менее серьезные изменения
  • Более быстрый прогресс