Common Lisp - как создать высокоинтерактивное одностраничное веб-приложение? - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу внедрить онлайн-платформу для редактирования и исправления документов. Это работает как интерактивное одностраничное веб-приложение . Представьте себе Google Docs, но с более сложными виджетами внутри.

Я сделал это приложение в React (JS) + Node.js + Postgres, что заняло несколько месяцев работать, но мне не очень нравится опыт JS, особенно, когда все усложняется при работе с этим очень сложным состоянием, а решения, представленные в этих средах, очень ограничены, а изменение части кода где-то требует "высокого" обслуживания.

Я никогда не делал ни одного веб-приложения Common Lisp, но я много читал о доступных инструментах, и хотя существует множество решений для веб-сервера (hunchentoot, clack, wook ie, woo, fastcgi, ...), фреймворки веб-приложений (пещерный человек, ningle, radiance, lucerne, ...), библиотеки поколения html (cl-who, spinneret, ...) и даже javascript "переходящий" ( parenscript), Моим главным ограничением здесь является то, что большое внимание уделяется приложению с одной веб-страницей, которое должно выполнять большинство операций исключительно на стороне клиента.

Архитектура:

  • Back-end s erver обрабатывает все постоянное хранение / извлечение документов и пользовательские логины
  • Front-end выполняет все манипуляции с документами на стороне клиента (включая промежуточные изменения состояния документа, без необходимости сообщать каждое изменение в back-end)

Основные потребности:

  • Полностью динамический c одностраничный интерфейс веб-приложения (контент - это в основном документ, который вы редактируете)
  • Незначительная задержка взаимодействия
  • Масштабирование для множества пользователей с максимально низкой нагрузкой на главный сервер
  • Все взаимодействие с документом должно происходить на стороне клиента (включая управление промежуточными изменениями)
  • Back-end к серверу следует обращаться только для входа в систему, получения документа, отправки нового конечного состояния документа или запроса специальных операций, таких как автоматическая обработка информации документа.
  • Современный браузер, а именно HTML5 с поддержкой перетаскивания и операции при редактировании документа

Библиотека req (я не хочу использовать библиотеки, которые оказались тупиковым проектом):

  • Solid библиотеки (например: hunchentoot, clack, parenscript)
  • Определенно not:
    • Библиотеки, которые кто-то делал, а затем есть открытые ошибки в течение 3 лет, а последний коммит был 5 лет go
    • Плохая документация (что означает, что нельзя понять, как делать вещи, не тратя часов и не читая код библиотеки)

Я также видел, что есть проекты, такие как slurm-cl, pani c, weblocks, но первый 2, кажется, больше не обслуживается или не хватает документации, в то время как новые weblocks кажутся хорошими, но, насколько я понимаю, работает на стороне сервера, а не на стороне клиента, что является для меня ограничением.

Миллион долларов Вопрос

Извините за длинный пост, но не могли бы вы сказать, есть ли у Common Lisp какая-либо библиотека для этого варианта использования - сценарии на стороне клиента? Является ли это возможным? Подойдет ли Parenscript? (Я предполагаю, что если бы я go с этим, мне пришлось бы писать большинство вещей с нуля - что тоже не моя цель). Кроме того, если я использовал Parenscript, я предполагаю, что он также не управляет DOM.

Или мне вообще не следует использовать Common Lisp для этого?

...