Каковы ограничения опала?
Я очень хочу попробовать Opal в новом проекте Rails, но риск, конечно, в том, что я не обнаружу, что он не может сделать, пока не потрачу сотни часов на все остальное, и не столкнусь с кирпичной стеной. что я не могу пройти.
Каковы его ограничения?
Например (и, конечно, ответы не должны ограничиваться этими темами, если есть другие ограничения, о которых стоит упомянуть), я бы предположил, что вы не можете просто использовать любую старую библиотеку Ruby в своем коде Opal (но я бы хотел узнать, что Я ошибаюсь по этому поводу!).
Я также предположил бы, что могут быть трудности в использовании любой произвольной библиотеки JavaScript, или что есть случаи, когда вам нужно написать JavaScript для взаимодействия с ними.
И, конечно, могут быть всевозможные проблемы, которые я даже не представлял. Это похоже на удивительный проект, но я хочу знать, с какими уязвимостями я мог бы столкнуться неожиданно, если бы я просто погрузился с головой в голову.
1 ответ
С точки зрения Ruby:
- Строки неизменны, потому что они соединены с JS Strings
- Все Числовые (целое число / число с плавающей запятой / и т. Д.) Связаны с классом JS Number
- Символы и строки одинаковы, они оба соединены с JS Strings
- нет доступа к некоторым материалам из браузера (файл, поток, система, процесс и т. д.)
- Требуется сложнее, поскольку в браузере нет файловой системы, а с версии 0.6.x они собраны в верхней части файла (
AssetPipeline
стиль). Вещи должны улучшиться с 0.7.x (не выпущено), (как примечание, подобные проблемы найдены в RubyMotion). - вам все еще нужно изучить DOM и, возможно, CSSOM
С точки зрения JS:
- Математический материал похож на Ruby (то есть вызовы методов), что означает, что он медленнее (как в Ruby) по сравнению с нативными операторами JS; это означает, что вы, вероятно, не будете использовать опал для написания игрового движка 3D5 на HTML5
- нет доступа к свойствам извне класса, как в Ruby, если вы хотите получить доступ к переменным экземпляра, вам нужно использовать методы
- некоторые особенно замысловатые (или, если хотите, идиоматические) библиотеки JS сложнее использовать только с классами Native или bridged (
class MyClass < `MyJsClass`; end
) и нуждаются в полномасштабных оболочках (например, opal-jquery, и это происходит постоянно и в Ruby, где вы редко используете непосредственно сопоставленный FFI apis и всегда оборачиваете библиотеки C).
Тем не менее, вы обычно можете сделать много всего, просто используя Native или opal-jquery. Лично я неоднократно перемещал классы из бэкэнда в веб-интерфейс. Тестируемость и читабельность кода, безусловно, улучшаются (если вы пишете хороший Ruby), и вы можете повторно использовать свои навыки OOD.
Я, конечно, могу что-то упустить, любой может принять участие. И это в конечном итоге превратится в пост в блоге на http://opalrb.org/blog.
ТЛ; др
Не забывайте, что вы в браузере. Не стоит недооценивать силу Ruby.