🧑🔬 ML & JS: Предиктивная загрузка модулей веб-приложений
В этом треде я постараюсь популярно описать положение дел в этом направлении, так как уже 3 семестра магистратуры экспериментирую над этой темой вместе с профессором. 🧐
Disclaimer:
Автор треда постарался не жестить и особо не оперировать терминами из «Machine Learning».
Но тут всё равно очень душно. 🥵
Что мы знаем и слышали о предиктивной загрузке?
Очевидно — Guess.js
Проект был анонсирован на Google I/O 2018, затем много звёзд на Github, доклады, кейноуты и маркетинг с участием Эдди Османи.
Потом, плагин для не менее популярного Gatsby.
По README в Guess.js видно принадлежность автора – человек из науки, Минко Гечев.
Структура документа, будто бы не из «Open Source», а чисто тезис на научную конференцию*.
Вот он — github.com/guess-js/guess…
причём наивысшего качества! Много смысла, мало текста!
И после этого шквала событий… всё.
Проект по сей день в альфа-версии, а топ-контрибьютор — “renovate-bot”.
И может сложиться впечатление, что Guess.js заброшен, или даже (почему-то) перестал нести пользу.
Но нет.
Я попробую изложить свои предположения почему так происходит.
В сторону предиктивной загрузки ислледуют множество компаний. У каждой свои цели.
Вот, например, патент* MS для втраивания нейронки в браузер – patents.google.com/patent/US10795…
мы же все поняли, что это для Edge?
В научном же мире (пока в техническом тишина) солидные авторы, в авторитетных журналах, публикуют достойные научные труды.
Вот, что я нашёл из самого авторитетного - docs.google.com/document/d/1MA…
Короче говоря, у меня сложилось впечатление, что предиктивный фетчинг — это не совсем про «Open Source», а больше про конкурентные преимущества. 💰
Поэтому, мы продолжаем слышать про «машинное обучение» ото всюду, но открытых реализаций не видим.
Anyway...
💡 Идея предиктивной загрузки модулей заключается в следующем:
На этапе сборки приложения, для каждого роута определяются вероятность перехода на другой. Затем, берётся 1-3 самых вероятных и их ассеты предзагружаются посредством rel=”preload”.
developer.mozilla.org/ru/docs/Web/HT…
Итог — переход на роут практически мгновенный, так как все его ассеты (или большинство) уже предзагружены и остаётся потратить время только на загрузку HTML.
👍 Плюсы идеи:
меньше нагрузка на сеть.
меньше нагрузка на CPU, так как загрузка и парсинг выполняются с низким приоритетом и в простое.
не нужно гнаться за размером бандла (уж так сильно).
Короче говоря — оверкилл по всем пунктам.
😓 Минусы:
внедрить в сборку (затратно)
настроить сборку (ещё сложнее)
отладить сборку (совсем фатально)
🧐 Что нужно понимать для интеграции предиктивной загрузки?
По сути, для реализации этой задачи хватает базового знания «Computer Science» и азов «Machine Learning». 🤖
Досконально необходимо вникнуть только в сборку приложения и работу с API аналитики.
🦸♂️ На данный момент, главный «компонент» предиктивной аналитики — цепи Маркова.
en.wikipedia.org/wiki/Markov_mo…
Эта модель имеет убеждение, что при фиксированном настоящем будущее независимо от прошлого.
Модель имеет ряд разновидностей, которые тоже используются для «тренировки» на данных.
Например, скрытая Марковская модель - en.wikipedia.org/wiki/Hidden_Ma…
Дополнительно, с моделью задействуется метод Монте-Карло, для вычисления вероятностей - en.wikipedia.org/wiki/Monte_Car…
Для того, чтобы в ориентированном графе приложения искать роуты с сильной связностью, используется алгоритм Тарьяна. Находит он за линейное время.
en.wikipedia.org/wiki/Tarjan%27…
Опционально, для группировки роутов в группы, используется кластеризация методом k-средних.
В основном же, этим методом разбивают пользователей на группы. То есть для какой группы подгрузить тот или иной набор последующих роутов.
en.wikipedia.org/wiki/K-means_c…
👀 То есть, предиктивная загрузка - это сборка, цепи Маркова (или скрытая Марковская модель), метод Монте-Карло, алгоритм Тарьяна, кластеризация, аналитический источник и ориентированные графы.
И у всей этой истории есть даже Early Adopters: iihnordic.com/blog/machine-l…
🧐 Итого, что мы имеем:
Предиктивная загрузка распространяется не таким уж стремительным темпом, как маркетинг «ML».
В научном мире, статьи о предиктивной загрузке только набирают темп. Одна проблема — дальше «PoC», у академиков, дело не особо далеко заходит.
И это грустно. 🥲