stw*_*ner 17 php ajax jquery json
在评估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#/ sec
示例#2:440#/ sec
这表明设置额外的标题似乎有点慢.
但是:
通过"ajax"(jQuery.getJSON('url', function(j){console.log(j)});)获取相同的JSON 会使差异非常大(Chrome Web Inspector中显示的时间):
示例#1:340 ms /请求
示例#2:980 ms /请求
这个差异的问题是什么?
尽管存在性能差异,是否有理由使用application/json?
我将讨论问题的最后一部分:
尽管存在性能差异,是否有理由使用 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 对象的推荐方法
但希望看到更多关于性能的见解。标头长度绝对不会导致性能问题。更多与您的网络服务器分析标头格式有关。
您的服务器是否根据内容类型以不同方式处理 gzipping/deflate?我的就是这样。Believe ab默认不接受gzip。(您可以在 ab 中使用带有 -H 标志的自定义标头进行设置)。但 Chrome 总是会说它接受 gzipping。
您可以使用curl测试来查看文件大小是否不同:
 curl http://www.example.com/whatever --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null
您还可以查看标头以查看是否应用了 gzipping:
curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate" 
| 归档时间: | 
 | 
| 查看次数: | 3969 次 | 
| 最近记录: |