Иван Акулов вспоминает, как в 2018 году, делая аудит для одного из клиентов, наткнулся на библиотеку мниификации JS-кода Packer. Это очень старая библиотека, у которой есть режим
Base62 encode. Тут нет опечатки, Base62.Суть в том, что ключевые слова из кода заменяются на числа. То есть вместо
let x = a.toString() у вас получится что-то вроде 0 1=2.3(), а уже дальше эта строка преобразуется на клиенте в нужный код через словарик и выполняется при помощи eval.Удивительно, что такой подход сжимает большие библиотеки лучше современных Terser и прочих минификаторов. Например, Three.js сжимается через Terser до 358 КБ, а через Packer — до 266 КБ.
Но нет, это не повод тащить такой минификатор в прод. Привычный gzip в итоге справляется гораздо лучше с кодом от Terser, чем с кодом от Packer. То есть нельзя сравнивать инструменты только по тому, как они работают в изолированном примере, нужно смотреть на доставку кода на клиент целиком. Ну и
eval в продакшене — такое себе счастье.Но подход точно интересный хотя бы для минимальной обфускации.
https://3perf.com/blog/packer/