🔥

Тред (@belov)


🧑‍🔬 ML & JS: Предиктивная загрузка модулей веб-приложений В этом треде я постараюсь популярно описать положение дел в этом направлении, так как уже 3 семестра магистратуры экспериментирую над этой темой вместе с профессором. 🧐

Disclaimer: Автор треда постарался не жестить и особо не оперировать терминами из «Machine Learning». Но тут всё равно очень душно. 🥵

Что мы знаем и слышали о предиктивной загрузке? Очевидно — Guess.js Проект был анонсирован на Google I/O 2018, затем много звёзд на Github, доклады, кейноуты и маркетинг с участием Эдди Османи. Потом, плагин для не менее популярного Gatsby.
notion image

По README в Guess.js видно принадлежность автора – человек из науки, Минко Гечев. Структура документа, будто бы не из «Open Source», а чисто тезис на научную конференцию*. Вот он — github.com/guess-js/guess… причём наивысшего качества! Много смысла, мало текста!
notion image

И после этого шквала событий… всё. Проект по сей день в альфа-версии, а топ-контрибьютор — “renovate-bot”. И может сложиться впечатление, что Guess.js заброшен, или даже (почему-то) перестал нести пользу. Но нет. Я попробую изложить свои предположения почему так происходит.
notion image

В сторону предиктивной загрузки ислледуют множество компаний. У каждой свои цели. Вот, например, патент* 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…
notion image

Для того, чтобы в ориентированном графе приложения искать роуты с сильной связностью, используется алгоритм Тарьяна. Находит он за линейное время. en.wikipedia.org/wiki/Tarjan%27…
notion image

Опционально, для группировки роутов в группы, используется кластеризация методом k-средних. В основном же, этим методом разбивают пользователей на группы. То есть для какой группы подгрузить тот или иной набор последующих роутов. en.wikipedia.org/wiki/K-means_c…
notion image

👀 То есть, предиктивная загрузка - это сборка, цепи Маркова (или скрытая Марковская модель), метод Монте-Карло, алгоритм Тарьяна, кластеризация, аналитический источник и ориентированные графы. И у всей этой истории есть даже Early Adopters: iihnordic.com/blog/machine-l…

🧐 Итого, что мы имеем: Предиктивная загрузка распространяется не таким уж стремительным темпом, как маркетинг «ML». В научном мире, статьи о предиктивной загрузке только набирают темп. Одна проблема — дальше «PoC», у академиков, дело не особо далеко заходит. И это грустно. 🥲