在评估PHP框架的性能时,我遇到了一个奇怪的问题
以application/json
的形式发送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毫秒/请求
示例#2: 980毫秒/请求
这种不同是怎么回事?
尽管存在性能差异,但有使用application/json的理由吗?
发布于 2013-02-23 03:33:47
您的服务器是否根据内容类型处理不同的type/deflate?我的是这样。相信ab在默认情况下不接受gzip。(您可以在ab中使用带有-H标志的自定义标头进行设置)。但是Chrome总是说它接受gzipping压缩。
您可以使用curl test查看这些文件是否具有不同的大小:
curl http://www.example.com/whatever --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null
您还可以查看标题以查看是否应用了look:
curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate"
发布于 2013-02-26 17:51:15
我将回答问题的最后一部分:
尽管存在性能差异,
是否还有使用应用程序/json的原因?
回答:是的。
原因: 1) text/html经常可能是错误的json,直到你尝试解析它时才会被捕获。application/json将失败,只要json格式错误,您就可以轻松地进行调试
2)如果您在浏览器中查看json,使用header类型会将其格式化为用户友好的格式。text/html将更多地将其显示为blob。
3)如果您在网页上使用此json,application/json会立即转换为js对象,您可以通过obj.firstnode.childnode
等方式进行访问。
4)回调功能可以在application/json
上使用,但不能在text/html
上使用
注意:使用gzip的将充分缓解性能问题。text/html
仍然会更快一些,但不是推荐的获取json对象的方式
不过,我希望看到更多关于性能的见解。报头长度绝对不会导致性能问题。更多的是与你的the服务器分析头文件格式有关。
https://stackoverflow.com/questions/14946845
复制相似问题