<分区>
我在这个问题上有很多问题。 我必须压缩没有静态架构的 URI,然后很难做这样的事情:
repos=aaa,bbb,ccc&
labels=ddd,eee,fff&
milestones=ggg,hhh,iii&
username=kkk&
show_open=0&
show_closed=1&
show_commented=1&
show_uncommented=0
摘录:
aaa,bbb,ccc|ddd,eee,fff|ggg,hhh,iii|kkk|0110
请求是以 GraphQL 方式进行的,因此我们发送结构并获得该结构的答案。目前我们使用的压缩只是改变所有请求中的一些措辞(功能:是 f:, ..)。 我们想做一个通用的压缩,而不是如果架构发生变化我们必须维护的东西(在下面的例子中我们不想将 quizz.campaign 更改为每个例子的#12)。我们每次连接都会执行这种请求一到两次,所以什么是最昂贵的在连接上下载一个库,这会将我的请求从 1500 个字符压缩到大约 300 个字符或 做一些通用的压缩,例如将 [ 更改为 ( 这将从 1500 压缩到 900。
通用压缩看起来像这样:
str.replace(/\*/g, "%#111")
.replace(/\!/g, "%#222")
.replace(/\(/g, "%#333")
.replace(/\)/g, "%#444")
.replace(/\~/g, "%#555")
.replace(/\_/g, "%#666")
.replace(/\'/g, "%#777")
.replace(/\,/g, "*")
.replace(/\:/g, "!")
.replace(/\[/g, "(")
.replace(/\]/g, ")")
.replace(/\{/g, "~")
.replace(/\}/g, "_")
.replace(/\"/g, "'")
.replace(/\%#111/g, ",")
.replace(/\%#222/g, ":")
.replace(/\%#333/g, "[")
.replace(/\%#444/g, "]")
.replace(/\%#555/g, "{")
.replace(/\%#666/g, "}")
.replace(/\%#777/g, '"');
请求的 json 格式如下:
[{
"f": "find-qzc-by-id",
"k": "qzcpn",
"a": {
"quizz.campaign/id": "quizz-kdfjdslk"
},
"n": [{
"f": "quizz.campaign/activeQuizzQuestions",
"k": "quizz.campaign/activeQuizzQuestions",
"n": ["fanQuestion/id", "fanQuestion/questionText", "fanQuestion/questionType", {
"f": "fanQuestion/choices",
"k": "fanQuestion/choices",
"n": ["quizz.question.choice/bgImg", "fanQuestion.choice/id", "fanQuestion.choice/adminLabel", "fanQuestion.choice/text"]
}, "bs.model/scid", "bs.model/uiConfig"]
}, "quizz.campaign/id", "quizz.campaign/gameLogic", "quizz.campaign/quizzConfig", "quizz.campaign/bgImg", "quizz.campaign/previewImage", "quizz.campaign/title", "quizz.campaign/description", "campaign/publicOrganizerName", {
"f": "campaign/organization",
"k": "campaign/organization",
"n": ["org/id"]
}, "campaign/bsCpnType", "bs.model/scid", "bs.model/uiConfig", "bs.model/bsCustomContent", "bs.time/created", "bs.model/nl"]
}]
然后编码请求看起来像这样:
?q=%5B%7B%22f%22%3A%22find-qzc-by-id%22%2C%22k%22%3A%22qzcpn%22%2C%22a%22%3A%7B%22quizz.campaign%2Fid%22%3A%22quizz-kdfjdslk%22%7D%2C%22n%22%3A%5B%7B%22f%22%3A%22quizz.campaign%2FactiveQuizzQuestions%22%2C%22k%22%3A%22quizz.campaign%2FactiveQuizzQuestions%22%2C%22n%22%3A%5B%22fanQuestion%2Fid%22%2C%22fanQuestion%2FquestionText%22%2C%22fanQuestion%2FquestionType%22%2C%7B%22f%22%3A%22fanQuestion%2Fchoices%22%2C%22k%22%3A%22fanQuestion%2Fchoices%22%2C%22n%22%3A%5B%22quizz.question.choice%2FbgImg%22%2C%22fanQuestion.choice%2Fid%22%2C%22fanQuestion.choice%2FadminLabel%22%2C%22fanQuestion.choice%2Ftext%22%5D%7D%2C%22bs.model%2Fscid%22%2C%22bs.model%2FuiConfig%22%5D%7D%2C%22quizz.campaign%2Fid%22%2C%22quizz.campaign%2FgameLogic%22%2C%22quizz.campaign%2FquizzConfig%22%2C%22quizz.campaign%2FbgImg%22%2C%22quizz.campaign%2FpreviewImage%22%2C%22quizz.campaign%2Ftitle%22%2C%22quizz.campaign%2Fdescription%22%2C%22campaign%2FpublicOrganizerName%22%2C%7B%22f%22%3A%22campaign%2Forganization%22%2C%22k%22%3A%22campaign%2Forganization%22%2C%22n%22%3A%5B%22org%2Fid%22%5D%7D%2C%22campaign%2FbsCpnType%22%2C%22bs.model%2Fscid%22%2C%22bs.model%2FuiConfig%22%2C%22bs.model%2FbsCustomContent%22%2C%22bs.time%2Fcreated%22%2C%22bs.model%2Fnl%22%5D%7D%5D
如果您认为库是解决成本问题的更好方法,您是否有一些关于在 js 中压缩和在 jvm 上解压缩的建议?谢谢。