Pull to refresh

Comments 10

Вкратце, идея состоит в следующем: приложение использует браузер для взаимодействия с пользователем, для этого браузер открывает WebSocket-соединение с сервером, после чего просто выполняет получаемый от него javascript-код, отправляя результаты обратно через это же соединение. Все DOM-элементы при этом создаются динамически, через соответствующие функции javascript, без использования HTML вообще. 

По описанию похоже на гибрид старого доброго ASP.NET WebForms и JSONP.

Что первый, что второй вызывали у меня лично дикое отвращение.

Ну, я бы не стал сравнивать. Весь код "серверной части" у меня занимает <1000 строк, а первая версия заработала при размере в 600 строк примерно. То есть это принципиально разного класса системы)

Эта библиотечка принципиально не про API и не про форматы передачи данных – просто вызываешь функцию и она выполняется где-то там, у клиента в браузере. Можно нарисовать на экране кнопку и перехватить событие нажатия. И обработать это событие прямо внутри браузера, если хочется. Нет никаких скриптов, препроцессоров, компиляции и сборки. Всё просто работает)

По нескольким причинам:

  1. Он мне нравится

  2. Для него есть self-hosted компилятор в JS (JSCL)

  3. Через систему макросов можно легко работать с исходным кодом функций, прозрачно передавая код browser-side функций компилятору JSCL

  4. REPL -- можно отлаживать приложение "в живую", не занимаясь постоянно компиляцией, сборкой, даже обновлять страницу не нужно -- я меняю функцию, перекомпилирую ее одним нажатием и вот у меня уже в браузере новая функция, сразу видно, что изменилось и как работает.

В принципе, я думаю, можно применить этот подход и к другим языкам, но будет не так удобно, как с Lisp. За исключением, может быть, питона -- существует реализация питона на Common Lisp, возможно, просто добавлением нескольких функций можно заставить питон так же точно работать. Но это уже другая история)

А что с производительностью?

Я, понятное дело, не тестировал это с миллионом клиентов, но, не думаю, что с производительностью будут какие-то серьезные проблемы на стороне сервера. На стороне клиента надо соблюдать осторожность, так как JSCL, например, очень медленно работает со строками, тут лучше использовать строковые функции javascript, если строк очень много. Пока я не упирался в производительность и на клиенте тоже, для своих задач.

Как мне кажется в python idom похожая технология. Только там просто по веб сокетам dom деревом управляем. Можно конечно и всякий код в браузер отправить.

Это немного другое. Если я правильно понимаю, idom просто генерирует HTML из python-кода. Я когда-то использовал питоновскую библиотеку Nagare, где это доведено до абсолюта, а код выполняется через систему continuations. Даже когда-то писал статью на Хабре про нее, но она куда-то пропала вместе со всем содержимым моего аккаунта.

Хорошо ли это будет работать с мобильным медленным интернетом?

Синхронный xhr блокирует отклик от интерфейса, разве нет?

там довольно небольшой трафик каждый раз, если не писать код функции на 10 экранов, конечно. В принципе, ничего не мешает заливать в клиента весь код сразу (в случае продакшен-версии), просто это пока не реализовано.

Sign up to leave a comment.

Articles