Скажем, у меня есть одностраничное приложение, которое использует сторонний API для контента. Логика приложений только в браузере, и нет бэкэнд, на который я могу написать.
Чтобы обеспечить глубокую привязку к состоянию приложения, я использую pushState, чтобы отслеживать несколько переменных, определяющих состояние приложения (обратите внимание, что общедоступная версия Ubersichts еще не делает этого). В этом случае repos, labels, milestones и username, show_open (bool) и with_comments (bool) и without_comments (bool). Формат URL ?label=label_1,label_2,label_3&repos=repo_1…. Значения являются обычными подозреваемыми, примерно [a-zA-Z][a-zA-Z0-9_-] или любым логическим индикатором.
Пока все хорошо. Теперь, поскольку строка запроса может быть немного длинной и громоздкой, и я хотел бы иметь возможность передавать URL-адреса, такие как http://espy.github.io/ubersicht/?state=SOMOPAQUETOKENTHATLOSSLESSLYDECOMPRESSESINTOTHEORIGINALVALUES#hoodiehq, чем короче, тем лучше.
Моя первая попытка заключалась в использовании некоторого zlib-алгоритма для этого (https://github.com/imaya/zlib.js) и @flipzagging, указывающего на antirez/smaz (https//github. com/antirez/smaz), который звучит более подходящим для коротких строк (версия JavaScript на https://github.com/personalcomputer/smaz.js).
Так как = и & не обрабатываются в https://github.com/personalcomputer/smaz.js/blob/master/lib/smaz.js#L9, мы могли бы немного изменить его там.
Кроме того, существует опция для кодирования значений в фиксированной таблице, например. порядок аргументов предопределен, и все, что нам нужно отслеживать, - это фактическое значение. Например. превратите a=hamster&b=cat в 7hamster3cat (длина + символы) или хомяк | cat (значение + |), потенциально до сжатия smaz.
Есть ли что-нибудь еще, что я должен искать?