Сравнение веб-фреймворков Clojure

Существует несколько веб-фреймворков для Clojure

а также некоторые библиотеки для работы с некоторыми подзадачами веб-разработки, такими как

  • Enlive для шаблонов
  • Hiccup для шаблонов
  • Ring, чтобы обрабатывать файлы нижнего уровня с запросами/ответами
  • ClojureQL для сохранения (хотя, похоже, он не очень активен)

Также используются сотни библиотек Java. Некоторые аспекты уже обсуждались здесь и два из них сравнили бит.

Интересно, как эти рамки/компоненты сравниваются с точки зрения зрелости, масштаба, простоты разработки, чувства Django/RoR и т.д.

Ответ 1

Когда я впервые начал работу с веб-разработкой, это было с Clojure. У меня был нет предыдущий опыт работы с веб-разработкой вообще. Я не мог, для жизни меня, фигура Compojure. Я не знаю, улучшилась ли начальная документация с тех пор (это было не так давно) или нет, но в то время я не мог справиться с этим. Друг указал мне на Усача, и после прочтения README мне удалось собрать то, что http://try-clojure.org в нем текущее состояние. Так что, насколько простота использования, я думаю, что Усас берет пирог для меня.

Однако, если этот существовал в то время, я мог бы петь другую мелодию.

Conjure выглядит очень круто, хотя очень сильно отличается от других фреймворков. Учитывая мой очень ограниченный опыт работы с веб-разработкой в ​​целом, я не очень много говорю в этом вопросе, но Conjure чувствует себя некрасиво для меня. Это просто не так. Может быть, я не привык к тому, как он это делает.

ОБНОВЛЕНИЕ: Прошло некоторое время с тех пор, как я написал это. Многое изменилось. Немногие люди больше используют Усы, и на самом деле он не поддерживается на самом деле, хотя он достаточно полно (и достаточно прост), что он, вероятно, все еще работает, теперь я рекомендую переходить с Compojure или Noir. Оба они в настоящее время поддерживают рамки, и оба они отлично справляются со своей работой.

ОБНОВЛЕНИЕ 2: Noir устарел довольно долгое время, и большая часть его функций переместилась в библиотеку, предназначенную для использования с веб-фреймами compojure/other ring, которые называются lib-noir.

Ответ 2

Я знаю, что этот вопрос немного устарел... но я не мог не предложить Noir как очень хороший вариант.

Noir использует комбинацию Ring, Compojure и Hiccup для выполнения этой работы. Проверьте это!

Ответ 3

Как упоминалось в комментарии Бьерна Линдквиста выше, Noir мертв. Подробнее здесь.

Вместо этого рассмотрите возможность использования Compojure и lib-noir.

Ответ 4

Мышление в терминах каркасов, вероятно, является ошибкой. Лучший подход - подумать о библиотечных компонентах, которые вы собрали вместе, чтобы иметь "структуру", которая наилучшим образом соответствует вашим требованиям.

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

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

Тем не менее, я нашел, что взглянуть на различные рамки действительно полезен, поскольку он дает мне идеи о том, как лучше всего интегрировать библиотеку и, что более важно, IMO, как вы можете наилучшим образом структурировать ваш файл lein project.clj, чтобы наилучшим образом удовлетворить требуемый рабочий процесс.

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

  • Luminus и Шаблоны Luminus обеспечивают очень обширную структуру. Я нахожу их немного "тяжелыми" для многих приложений, но есть несколько отличных примеров того, как интегрировать различные библиотеки Clojure в ваше приложение. На главном веб-сайте также есть полезная документация.

  • Реагентный проект, который включает шаблон реагента, является хорошей отправной точкой для приложения, использующего поддержку ClojureScript Reagent (react.js). Я нашел, что это одна из самых простых библиотек ClojureScript для создания приложения с хорошей интеграцией с Javascript.

  • lein-figwheel - действительно интересный шаблон с использованием figwheel для динамической загрузки clojurescript, так что вы видите изменения ClojureScript в браузере при изменении своего код. Многие другие шаблоны теперь добавили эту функциональность в свои собственные шаблоны. Первоначально разработанный с учетом Om, шаблоны Luminus и Reagent теперь также интегрируют функциональность Figwheel в свои шаблоны. На самом деле показывает некоторые преимущества Clojure и ClojureScript для интерактивной разработки.

  • Шаблон Compojure - отличная отправная точка. Он создает очень простой базовый проект со всеми базовыми элементами кольца и компоновки. Отличный способ начать с веб-разработки Clojure, потому что он прост и позволяет вам сосредоточиться на основах, прежде чем утонуть под всеми другими опциями.

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

Возможно, самая важная часть получения хорошей "основы" для вашего веб-разработки - экспериментировать и понимать, как работает лейн, и файл lein project.clj. Наличие хорошего файла project.clj определит ваш рабочий процесс. Наличие правильных профилей, возможность запуска repl по-разному и загрузка различных библиотек, которые позволяют вам запускать figwheel или replator или создавать банку и т.д., - это все о файле project.clj. Получите это право, и ваша среда обеспечит только необходимый вам рабочий процесс.

Ответ 5

В сцене появился новый игрок, так как хорошей альтернативой для реализации сервисов REST является liberator. Это упрощает раскрытие ваших данных в качестве ресурсов при автоматическом соблюдении всех соответствующих требований спецификации HTTP RFC-2616 и прекрасно играет с http-kit и Compojure.

Довольно доволен http-kit btw, функция перезагрузки живого кода удобна.

Ответ 6

попробуйте дорожную инфраструктуру для быстрого веб-разработчика https://github.com/zhujinxian/road

(defn render-test [ret tmt]
  (-> (resp/response "------render----test------") 
    (#(resp/content-type %1 "text/plain"))))

(defn foo
  "I don't do a whole lot."
  [x]
  (str "来自源码目录的参数:" x))

(defn handler [^Integer x]
    {:$r render-test :text (str "hello world, road goes sucess!" (foo x))})

(defn home [req content ^Integer num]
    {:hiccup "home.clj" :content (str "home" content) :num num})

(defroad road (GET "/web-test-0.1.0-SNAPSHOT-standalone/main" handler) 
              (GET "/web-test-0.1.0-SNAPSHOT-standalone/home/:num{\\d+}" home))

(defn -main [& args]
  (log/info "---------log4j test-------")
  (jetty/run-jetty road {:port 3000}))