Скажем, у меня есть одностраничное приложение, которое использует сторонний 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.
Есть ли что-нибудь еще, что я должен искать?