Рано или поздно возникает необходимость в собственных инструментах по разным причинам: либо не хватает готовых, либо есть какая-то особенность в проекте. Разработка инструментов, работающих в браузере, является непростой задачей. Самое сложное — чтобы они умели работать удаленно, вне страницы. Это многих пугает — нужно много сделать и во многом разобраться. Но если большая часть проблем уже решена, и можно сосредоточиться лишь на основной функции инструмента? Что если такие инструменты смогут работать в произвольном WebView, будь оно встроено в браузер, редактор или другое приложение на любом устройстве? Доклад про удалённые инструменты: какие есть сложности и как их обойти, как перестать бояться и начать делать инструменты под свои задачи и технологический стек.
5. В рамках доклада, «инструмент» –
программа, которая наблюдает за
приложением (страницей, окружением
etc), собирает данные и предоставляет
к ним графический интерфейс
5
33. Терминология
• Subject – то, за чем наблюдаем
• Publisher – собирает и публикует данные
• Subscriber – получает данные и строит интерфейс
• Transport – канал и протокол взаимодействия
• Host – интеграция в другие приложения (плагин),
создает sandbox
• Sandbox – окружение для UI
23
41. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script
42. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
43. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
Runtime
Background page
44. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
Runtime
Background page
45. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
Runtime
Background page
46. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
Runtime
Background page
47. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
Runtime
Background page
48. Runtime (devtools)
Что это значит для нас?
29
Runtime (page)
Publisher
Subscriber (UI)Subject
Content script DevTools Tab
Runtime
Background page
Соединение publisher-subscriber = 4 event-based соединения
49. Транспорт – pain points
• Минимум 2 типа коммуникации
• 2-4 соединения между publisher-subscriber
• Соединения могут разрываться и восстанавливаться
• Нужен протокол взаимодействия
• Коммуникация асинхронная, нужен механизм callback'ов
• Обмен данными в JSON (на самом деле строками)
30
51. Ключевые проблемы
• Сложность реализации инфраструктуры
• Неудобство процесса разработки
• Версионирование
32
habrahabr.ru/company/jugru/blog/317060/
52. Пример: изменение в DevTools плагине
• Перезагрузить плагин (в Chrome это Extensions)
• Перезагрузить страницу
• Закрыть Developer Tools
• Открыть Developer Tools
• Открыть закладку плагина
33
53.
54. Самое печальное –
разные разработчики
инструментов решают одни и те
же проблемы
35
60. Rempl спешит на помощь
41
RuntimeRuntime
Publisher Subscriber (UI)App
61. rempl (remote platform) –
платформа для получения
контролируемого удаленного
доступа к JavaScript runtime
используя UI
42
62. Rempl обеспечивает
• WS и DOM event транспорты, организует автоматическое
соединение
• Простое API обмена данными/командами для Publisher и
Subscriber
• Хосты: developer tools, electron app, web interface, editor
plugins etc
• Обеспечивает песочницу, самостоятельно получает UI и
инициализирует его
43
63. Одна из задач проекта –
снизить порог входа
в разработку собственных
инструментов
44
68. Subscriber
49
// subscriber создается песочницей автоматически
// не нужно ничего подключать/создавать – получаем готовое API
rempl.subscribe(function(data) {
document.body.innerHTML = new Date(data);
});
71. Обмен командами
52
endpoint.define({
method: function(a, b) {
console.log('call smth', a, b);
},
…
});
На одной стороне На другой стороне
endpoint.invoke('method', 'hello', 42);
endpoint – publisher или subscriber
декларируем методы вызываем метод
80. Преимущества
• Можно открыть в любом rempl-хосте
• Построен на web-технологиях
• Проще делать UI
• Возможность сделать более богатый UX
• Можно прикрутить готовые решения для
анализа и пр.
61
83. Идея для «стартапа»
• Разрабатываем frontend раньше backend
• Не хотим захламлять frontend моками –
мокаем серверное API в ServiceWorker
• Добавляем publisher в ServiceWorker
• Делаем UI для управления моками
в ServiceWorker
64
84. 65
Мы это уже запатентовали.
Если у вас проблемы с
этим – увидимся в суде!
85. 66
Мы это уже запатентовали.
Если у вас проблемы с
этим – увидимся в суде!
Это Open Source –
пробуйте, делайте
95. Несколько идей
• Подсвечивать на странице то, на что влияет
редактируемый файл
• Доступные в шаблоне биндинги или текущие значения
• Во что ресолвится ссылка на модуль и переход к
нужному файлу
• Во что транспилируется редактируемый файл
• … ограничивается лишь вашей фантазией
75
104. В первую очередь
• Стабилизировать API
• Документация, туториалы, примеры
• Обкатать ключевые компоненты (хосты,
транспорты и т.д.), реализовать недостающее
• Больше опций для поставки UI
84
105. В долгосрочной перспективе
• SDK для наиболее частых задач (данные, DOM etc)
• Перевести существующие инструменты на rempl
• Безопасность
• Connection specific content
• Возможность авторизации и разделения прав
• … новые идеи появляются постоянно ;)
85