Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 性能文本/html与应用程序/json_Php_Jquery_Ajax_Json - Fatal编程技术网

Php 性能文本/html与应用程序/json

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

在评估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.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(),是否会产生影响有一点,但区别是相同的。尽管看了源代码,我不认为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"