Php 性能文本/html与应用程序/json
在评估PHP框架的性能时,我遇到了一个奇怪的问题 以Php 性能文本/html与应用程序/json,php,jquery,ajax,json,Php,Jquery,Ajax,Json,在评估PHP框架的性能时,我遇到了一个奇怪的问题 以application/JSON的形式发送JSON似乎比不使用额外的头发送要慢得多(这似乎要回退到text/html) 示例#1(应用程序/json) 示例2(文本/html) 使用apache bench(ab-c10-n1000)进行测试时,我得到了: 示例#1:350#/秒 示例#2:440#/秒 这表明设置额外的标题似乎有点慢 但是: 通过“ajax”(jQuery.getJSON('url',function(j){console.l
application/JSON
的形式发送JSON似乎比不使用额外的头发送要慢得多(这似乎要回退到text/html
)
示例#1(应用程序/json)
示例2(文本/html)
使用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?您的服务器是否根据内容类型处理gzip/deflate?我的是。相信ab默认不接受gzip。(您可以使用带有-H标志的自定义标题在ab中设置此选项)。但是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
您还可以查看标题以查看是否应用了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对象的推荐方法
希望看到更多关于性能的见解。标题长度绝对不会导致性能问题。更多内容与您的Web服务器分析标题格式有关。如果运行
ob_start(),是否会产生影响在设置标题之前,code>有一点,但区别是相同的。尽管看了源代码,我不认为jQuery.getJSON关心内容类型,是吗?如果这样做会发生什么:标题('content-type:text/plain')
可能header()调用需要时间,无论是哪种内容类型,$data
中到底有什么内容?我的意思是,它几乎是空的还是有一个看起来真实的响应?是的,就是这样,应用程序/json没有启用gzip,没有速度几乎相等!
curl http://www.example.com/whatever --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null
curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate"