/*
array (size=3)
0 => string '/js/dhdbm78hdfb.js' (length=18)
1 => string '/js/dfg4dg.js' (length=13)
2 => string '/js/fg8hfhrt.js' (length=15)
2 => string '/js/yjtdygj.js' (length=14)
2 => string '/js/2q5g54rvfd.js' (length=17)
*/
$json = json_encode($data);
$gz = gzdeflate($json, 9);
$base64 = base64_encode($gz);
$paths = urlencode($base64);
// outputs: i1aK0c8qjtFPyUhJyjW3yEhJS9LLKlbSgQmnpZukpCOLpKVbZKRlFJUgi1VmlaRUpmchCxkVmqabmhSVpaWARGMB
不是很令人印象深刻且非常慢,我认为应该有更好的方法来做到这一点...
解决这个问题的最佳方法是什么?我们怎样才能呈现最小的字符串呢?
如果它很慢,这不是最大的问题,但它是一个需要考虑的变量。在可能的情况下,阵列将被缓存并从缓存中重新获得。
答案 0 :(得分:2)
如果您希望尽可能快速和小巧,请放弃通用工具并使用适合您要发送的特定数据的方法。去除所有数组值之间重复的任何内容(例如“/ js /”和“.js”),从序列化中删除所有数组语法,然后只发送一个字符串连接的唯一值列表,并重新构建它接收端。
如果必须,可以使用gz和base64_encode进一步压缩它,但是拥有唯一数据的一个缺点是必须唯一地表示它。
在此处查看所选答案:How to compress/decompress a long query string in PHP?
编辑: 你是否有余地来发布数据?这至少会避免与查询字符串相关的直接大小限制。它还可以避免为URL编码字符串,增加长度,并且您应该能够直接发送压缩内容,以节省大部分费用。
答案 1 :(得分:0)
serialization = json_encode
compression = gzdeflate
urlsafe = base64_encode
由于urlencode
仅生成安全字符,因此不需要{p> base64_encode
。我会将base64_encode
保留在那里。您可以考虑寻找更快的串行器或更快的压缩器。如果输入足够短,你甚至可以省去压缩机。
算法具有两个维度的性能特征:指令数和内存使用量。通常你会发现,如果你试图减少一个,另一个上升。数据库中的索引允许快速查找但占用大量空间。无索引查找速度很慢,但不需要额外的索引空间。
由于您希望简短,这意味着您需要根据快速做出牺牲。
老实说,我认为你在这里有一个非常优化的设置。
答案 2 :(得分:-1)
尝试使用gzcompress()
功能