Роман Дворнов (Avito)
Фронтенд усложняется с каждым днем, и уже не представить жизнь разработчика без инструментов. Инструментов становится все больше, но нельзя сказать, что их достаточно. Если у вас собственный стек или технологическое решение, вам рано или поздно потребуется сделать свой инструмент. Это не так просто! Особенно если вы захотите интегрировать его интерфейс в браузерные Developer Tools, IDE, редакторы или открыть их на другом устройстве. Добавьте сюда проблему версионирования и другие сложности, и вам покажется, что задача неподъемная.
Но есть хорошая новость! Большинство из этих проблем решает Rempl — платформа для создания и использования удаленных инструментов (на самом деле не только инструментов). Сделаем небольшой обзор Rempl: что это, зачем нужно, какие проблемы решает. А также посмотрим примеры готовых решений, построенных на Rempl.
После докладов мы проведём дискуссионную панель на тему "Организация системы компонент", в которой примут участие докладчики, а также приглашенные эксперты.
30. 21
Разделение ответственности
Хорошо ложится на паттерн
publisher-subscriber
Runtime
Data
Subject
UI
Publisher
собирает и публикует данные
Subscriber
визуализирует полученные данные
Tool
34. Ключевые проблемы
• Сложность реализации инфраструктуры
(интеграции, транспорт, протоколы, API и т.д.)
• Неудобство процесса разработки
• Версионирование
• …
24
habrahabr.ru/company/jugru/blog/317060/
41. Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин),
создает sandbox для выбранного publisher'а
• Sandbox – изолированная среда для subscriber'а
• Env – доступ к окружению с дополнительной
функциональностью (devtools, редактор…)
31
42. Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин),
создает sandbox для выбранного publisher'а
• Sandbox – изолированная среда для subscriber'а
• Env – доступ к окружению с дополнительной
функциональностью (devtools, редактор…)
31
Инструмент
43. Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин),
создает sandbox для выбранного publisher'а
• Sandbox – изолированная среда для subscriber'а
• Env – доступ к окружению с дополнительной
функциональностью (devtools, редактор…)
31
Инструмент
44. Фокус на самом инструменте –
об остальном позаботится rempl
32
51. Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
call('method', …args, callback)method(…args, callback)
on each update
52. Принцип работы
34
Publisher Subscriber (UI)
publish(data) subscribe(data => { … })
call('method', …args, callback)method(…args, callback)
callback(…args)
on each update
53. Где живет subscriber?
35
• Subcriber может запускаться в произвольном
WebView
• Если WebView-клиент будет знать о subscriber,
то будет заточен на один UI и его версию
• Поэтому информация о subscriber хранится в
publisher'е, а клиент ее запрашивает
70. Типы subscriber'а
45
script – JavaScript bundle (string)
sandbox.eval(rempl.source)
sandbox.eval(content)
url – адрес страницы с subcriber'ом
sandbox.src = content
// нужно подключить rempl самим
Better for
production
Better for
development
71. rempl.source (quine)
46
Rempl может реплицировать себя
Не нужно включать rempl.js в subscriber (для script)
;(function $rempl() {
// … rempl bundle (rempl.js)
rempl.source = ';(' + $rempl + ').call(this);';
}).call(this);
Финальный шаг сборки
99. Плюсы
• Можно открыть в любом rempl-хосте
• Построен на web-технологиях
• Проще делать UI
• Возможность сделать более богатый UX
• Можно прикрутить готовые решения для
анализа и пр.
62
108. Несколько идей
• Во что ресолвится ссылка на модуль и переход
к нужному файлу
• Во что транспилируется редактируемый файл
• Подсвечивать на странице то, на что влияет
редактируемый файл или его часть
• Доступные в шаблоне биндинги или текущие значения
• … ограничивается лишь вашей фантазией
69
117. В первую очередь
• Стабилизировать API
• Документация, туториалы, примеры
• Обкатать ключевые компоненты (хосты,
транспорты и т.д.), реализовать недостающее
• Больше опций для поставки UI
78
118. Интеграции
• Browser's devtools
• Chrome (Opera)
• Firefox (планируется)
• В других браузерах пока невозможно
• Редакторы и IDE
• Atom
• VS Code (github.com/Microsoft/vscode/issues/22068)
• JetBrains IDEs (планируется)
• …
79
119. В долгосрочной перспективе
• SDK для наиболее частых задач (данные, DOM etc)
• Перевести существующие инструменты на rempl
• Безопасность
• Возможность авторизации и разделения прав
• Connection specific content
• … новые идеи появляются постоянно ;)
80
122. В чем польза
83
Для разработчиков
• Не нужно тратить
время на инфраструктуру
• Готовые решения
для типовых задач
• Надежная и обкатанная
платформа (в перспективе)
• Не нужно наступать на грабли ;)
• Не нужно ставить плагины
под каждый инструмент
• Возможность выбрать
наиболее подходящий
сценарий использования
• Нужно разобраться только
с одним решением (rempl)
Для пользователей