Один из способов - отделить компоненты Реагента от Rails и использовать обычную экологию React с участием npm и webpack, чтобы вставить уже преобразованный JS-файл в ваш конвейер Rails. Таким образом, Rails может по-прежнему управлять общим использованием активов для вашего конвейера, но не нужно напрямую генерировать JS из React. Существует несколько описаний веб-страниц о том, как использовать веб-пакет таким образом. Лично я использую один найденный на GitHub netguru под названием react_webpack_rails (https://github.com/netguru/react_webpack_rails), но вам может не понадобиться помощник, если вы уже знаете, что делаете с webpack и реагируете. Есть и другие вспомогательные инструменты, подобные этому; вы можете посмотреть https://github.com/shakacode/react-webpack-rails-tutorial или http://www.railsonmaui.com/blog/2014/10/03/integrating-webpack-and-the-es6-transpiler-into-an-existing-rails-project/ для других обсуждений.
Я не являюсь поклонником глобальных переменных в Javascript, поэтому я нашел использование отдельного, но интегрированного подхода React-and-Rails, такого как Netguru, чтобы быть лучшим способом справиться с этим, не загромождая ни мою реализацию JS, ни мои представления Rails.
Что касается вашего вопроса об интерфейсе «вес», я бы сказал, что это еще не имеет значения. Как и большинство вопросов скорости или использования памяти, лучше избегать предварительной оптимизации. Когда вы сталкиваетесь с узкими местами в реальном использовании, тогда рефакторинг будет самым большим узким местом итеративно, пока производительность не будет приемлемой снова. В любом случае, если вы выполняете одностраничное приложение в React, вы, вероятно, ставите столько же нагрузки на клиента, сколько и выполняете, каждый раз пересылая страницы Rails (игнорируя стоимость самих рейсов). Просто обратите внимание на профилирование на раннем этапе и контролируйте, что вы делаете, но преждевременно не оптимизируйте, пока не станет очевидно, что вам нужно.