性能文本/ HTML与应用程序/ JSON问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (103)

在评估PHP框架的性能时,我遇到了一个奇怪的问题

发送JSON application/json似乎比发送时没有额外的头部要慢(这似乎回退到text/html

示例#1(application / json)

header('Content-Type: application/json');
echo json_encode($data);

示例#2(text / html)

echo json_encode($data);

用apache bench(ab -c10 -n1000)测试给我:

示例#1:350#/秒

例#2:440#/秒

这表明设置额外的头文件似乎有点慢。

但是

通过“ajax”(jQuery.getJSON('url', function(j){console.log(j)});)获得相同的JSON 使得差异非常大(如在Chrome Web Inspector中看到的那样):

示例#1:340 ms /请求

示例#2:980 ms /请求

这个区别有什么关系?

尽管性能不同,是否有理由使用application / json?

提问于
用户回答回答于

服务器是否根据内容类型处理gzipping / deflate?我的确如此。相信ab默认不接受gzip。(您可以在自定义标题中使用-H标志将它设置为ab)。但Chrome始终会说它接受gzip。

可以使用curl测试来查看文件是否具有不同的大小:

 curl http://www.example.com/whatever --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null

还可以查看标题以查看是否应用了gzip:

curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate" 
用户回答回答于

我将回答问题的最后部分:

尽管性能不同,是否有理由使用application / json?

答:是的

为什么:1)text / html通常可能是格式错误的json,直到你尝试解析它才会被取消。application / json将会失败,并且只要json格式错误,就可以轻松地进行调试

2)如果正在浏览器中查看json,那么使用标题类型将以用户友好的格式对其进行格式化。text / html将更多地显示为blob。

3)如果你在你的网页上使用这个json,application / json会立即转换成js对象,你可以像访问它们一样obj.firstnode.childnode等等。

4)回调功能可以工作application/json,但不能text/html

注意: 使用gzip将充分缓解性能问题。text/html仍然会更快,但不是推荐的获取json对象的方式

希望能看到更多关于性能的见解。标题长度绝对不会导致性能问题。更多与网络服务器分析标题格式。

扫码关注云+社区