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?