【问题标题】:PHP gzipping JSON, saving to memcache... Node.js serving - proper headers?PHP gzipping JSON,保存到内存缓存... Node.js 服务 - 正确的标题?
【发布时间】:2012-11-21 03:16:41
【问题描述】:

在 PHP 中我正在做类似的事情:

$gzdata = gzencode(json_encode($data), 9);
$mc->set("latest", $gzdata);

所以我从数据库中提取关联数组,将其转换为 JSON,将其压缩并存储到内存缓存中

在我的 Node.js 中,我读取了 memcached 条目并提供了它(其中客户端是 memcache 客户端)

client.get('latest', function(err, response) {
            if (err) { console.log("GET", err.type ); } 
            else{
                result.writeHead(200,{
                    "Content-Type": "application/json",
                    "content-encoding":"gzip"
                });


                result.end(response['latest']);
            }
        });

我来了

内容编码错误

在页面上

您尝试查看的页面无法显示,因为它使用了 无效或不受支持的压缩形式。

我什至无法检查 FB 中的标题...任何想法我做错了什么?

【问题讨论】:

  • 您的网络服务器通常不进行 gzip 压缩吗?因此,您是否有可能提供经过两次 gzip 压缩的内容?
  • 我(还)对 node.js 一无所知,但是查看您的代码,您会得到“最新”,但随后返回“result.end(response['latest']);”。你不应该只返回“响应”吗?
  • @BotondBalázs:在这种情况下,node.js 是我的网络服务器......它应该提供已经压缩过的 json......尽可能少的开销
  • @DS_web_developer:那么对不起。我不知道node.js。您可以尝试在另一个浏览器中检查响应。也许 Chrome 会给你更多信息。或者尝试使用curl 获取它。您还可以尝试为 gzencode() 函数提供不同的参数 - 可能是不同的压缩级别。
  • @DS_web_developer - 好的,接下来。你注意到下面关于适配器的一点了吗? overclocked.com/mc/#adapters - 字符串适配器是默认的,你可能想要二进制? client.setAdapter(mc.Adapter.binary); 获取前?

标签: php node.js http-headers memcached gzip


【解决方案1】:

您知道 Memcache 客户端已经可以为您进行压缩了吗?

$memcache_obj = new Memcache;
$memcache_obj->addServer('memcache_host', 11211);
$memcache_obj->setCompressThreshold(20000, 0.2);

这将在大于 20k 时压缩值,最小压缩率为 20%。

另请参阅:Memcache::setCompressThreshold

【讨论】:

  • 当然我做到了....但是这对我有什么好处呢?我想压缩 JSON,所以我为浏览器客户端提供了已经压缩的 json
  • @DS_web_developer 我可以稍后再说;让我挖掘一下:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2014-03-02
  • 2016-01-13
  • 1970-01-01
  • 2013-12-10
  • 2010-12-13
  • 2019-06-26
相关资源
最近更新 更多