我有一个JSON对象,其中包含约{150}个[key] : [sentence]
形式的条目,其中句子通常一遍又一遍地包含相同的文本。例如:
var test = {
"abc" : "This is the first sentence that is in this JSON object. Hello! Blue."
"abd" : "Red. This is the second sentence that is in this JSON object. Hi!"
"abe" : "This is the third sentence that is in this JSON object. Hey! Yellow."
"abf" : "White. This is the fourte sentence that is in this JSON object. Hola!"
}
您可以看到字符串“此JSON对象中的句子”。经常重复。用一些锚替换它会更有效率,然后一旦我从对象获得入口就替换锚吗?那就是:
var test = {
"abc" : "This is the first #anchor# Hello!"
"abd" : "This is the second #anchor# Hi!"
"abe" : "This is the third #anchor# Hey!"
"abf" : "This is the fourte #anchor# Hola!"
}
var anchor = "sentence that is in this JSON object."
从JSON获取所需的值后,将字符串替换为实际文本?句子没有特定的模式,但是大量的句子包含重复的文本字符串。谢谢你的建议!
答案 0 :(得分:1)
基本上,您正在讨论用于计算的交易带宽。在原始情况下,需要更多带宽并且没有下载后计算(字符串替换)。在后一种情况下,带宽较少,但您需要进行后处理。
对我来说,唯一能够为您的用例明确回答这个问题的方法是测试这两种情况并确定最适合您的方案。您还必须决定是否可以根据需要对执行时间的带宽进行折衷。
答案 1 :(得分:0)
根据有多少条目,这可能会节省一些内存或服务器带宽,但我认为它不值得重构句子所需的复杂性和处理能力。
无论哪种方式,这都是一个糟糕的优化IMO。使用像gzip这样自然处理重复字符串的标准优化。
答案 2 :(得分:0)
如果您的JSON下载是gzip压缩(极有可能),那么如果有的话,你可能不会节省很多带宽。 Gzip压缩非常适合删除重复的字符串。
要查找,请将您的JSON放在一个文件中,然后使用任何Gzip实用程序从中生成.gz文件。对另一个版本的JSON执行相同操作,然后比较两个.gz文件的大小。你可能会感到惊讶的是,差别很小。
如果您没有Gzip实用程序,请获取7-Zip。
除了带宽,您可以通过组合字符串来节省浏览器中的内存。这是否值得,取决于我们谈论的字符串数量。