Из графиков не понятна целесообразность — судя по графику JQuery в PNG занимает что-то межу 50 и 60 КБ, а gzip судя по closure-compiler.appspot.com/home должен занимать 32КБ
Забавно, поучительно. Зануда mode on: практически все js, css и html и другие легко сжимаемые файлы отдаются с сервера уже сжатыми. То есть в настоящий момент нет необходимости даже минифицировать js и css, достаточно только комментарии вырезать. Даже не могу сообразить где ваш код пригодился бы.
Я бы написал об этом в статье, потому что мне показалось, что описанный в статье метод предлагается как решение проблемы сжатия скриптов.
Очевидно, что он не самый лучший, ведь есть gzip, который:
— поддерживается всеми браузерами
— поддерживается всеми серверами
— лучше сжимает
Когда реализовывал такую систему (вынужденно, т.к. требовалось залить интерактивный рассказ на Самиздат, а засунуть туда JS можно только через img-эксплойт), столкнулся с её ненадёжностью.
Во-первых, картинки частенько не прогружаются или прогружаются не полностью, особенно на мобильных устройствах с хреновым GPRS. Поэтому пришлось к изображению добавить контрольный столбец — самый правый столбик у меня содержал только синие (0,0,255) пиксели. Тогда перед декодированием можно проверить, прогрузилась ли картинка до конца или браузер срезал половину.
Во-вторых, браузеры на движке WebKit отличаются редкостной параноидальностью, и когда пользователь сохраняет страничку, то JS запущенной локальной копии не имеет доступа к данным канваса (кто только придумал такое ограничение?).
Наконец, оказалось, что слишком большие (>5Мб) картинки в процессе декодирования крашат Firefox for Android, причём он не просто падает, а уводит весь девайс в перезагрузку.
Кстати, Касперский может резать большой json, приходящий аяксом (что-то около 3 мегабайт). Причем режет по длине текста, т.к. приходит на самом деле 700-килобайтный gzip. Можно извратиться с мапами, а можно и попробовать скомпрессить так.
А что на счет использования данного способа для обфускации js? Столкнулся недавно с этой проблемой и кроме как closure и обфускаторы вида !([]+[])+[], которые увеличивают длину кода в 100500 раз и прекрасно деобфусцируются одним нажатием кнопки, ничего не нашел.
Нельзя. К сожалению, canvas по-идиотски работает с альфа-каналом — в буфере хранятся не истинные цвета, а умноженные на значение альфа. В момент считывания браузер пытается восстановить их делением на альфа, что невозможно без потерь. Т.е. при считывании данных с канваса получим искажение цветов, если есть альфа-канал с переменными значениями.
Данные возвращаются, но с потерей точности, т.е. эти RGBA будут немного (незаметно для глаза) отличаться от исходных.
Попробуйте закодировать текст в RGBA, засунуть этот массив в канвас, а потом сразу же снова считать и декодировать. При этом значительная часть символов заменяется «мусором» в результате потери точности.
Portable Network Javascript