Common Lisp - как создать интерактивное одностраничное веб-приложение?

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

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

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

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

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

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

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

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

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

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

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

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

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

0 ответов

Другие вопросы по тегам