【问题标题】:json gzip compression with php用 php 压缩 json gzip
【发布时间】:2015-12-22 12:46:35
【问题描述】:

我使用这种方式从我的服务器发送一个 json 文件。

$data = file_get_contents('cache/file.json');

ob_start('ob_gzhandler');

// Output as normal
echo ($data);

cache/file.json 不是 gzip 压缩的(纯 json,整个没有空格 文件是一长行)。

我在想而不是每次请求文件时都对文件进行 gzip 压缩。 我应该将其存储为 gzip 文件吗

$gzjson = gzencode($data, 9);
file_put_contents('gzcache/file.json', $gzjson);

所以我会尽量减少服务器负载? 这个想法是gzip它,每次请求文件时 只提供已经压缩过的文件,而不是每次请求时都压缩它。

有人认为这是个好主意吗?

【问题讨论】:

  • 答案很大程度上取决于文件有多大以及您请求它的频率。
  • 最大文件大小(未压缩)为 200kb。压缩一次并在每次请求时提供压缩文件不是更好的做法吗?
  • 我建议您编辑您的问题。 @Marged 是绝对正确的,他的考虑是您问题的关键要素。
  • 这是因为文件将被多次请求,我想实现较少的服务器资源密集方法。很明显不是吗?如果我只读一次,我一开始就不会费心压缩它。
  • 所以假设文件是​​ 200kb 未压缩和 100kb 压缩,每天将被读取大约 10k 次。

标签: php json gzip


【解决方案1】:

由于您的 php 会占用一些 CPU 负载来生成 zip,因此这意味着 - 最好将其缓存起来,如果服务器上有足够的空间,则只需读取它即可。

此外,您还可以实现旧的缓存文件删除逻辑。检查文件创建时间(http://php.net/manual/en/function.filemtime.php

$creationTime = filemtime($zip);

if(time() - $creationTime >= 60 * 60 * 24 * 2) // 2 days
   @unlink( $zip );
}
// create new zip 

如果它较旧然后某个范围(2 天)将其删除并再次重新生成,这意味着您将在每个范围内重新生成该文件一次

【讨论】:

  • 缓存时间不是问题。因为我会从 API 中获取它,一旦我从 api 下载了 json,我会立即压缩并存储它。
【解决方案2】:

我会让 httpd 将 json 作为静态资源提供服务。如果客户端可以解包,服务器应该注意内容协商并返回存档文件。

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 2014-01-06
    • 1970-01-01
    • 2021-11-30
    • 2015-07-14
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多