18

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ベンチ(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を使用する理由はありますか?

4

2 に答える 2

5

質問の最後の部分を取り上げます。

パフォーマンスの違いにもかかわらず、application / jsonを使用する理由はありますか?

回答:はい

理由:1)text / htmlは、多くの場合、不正な形式のjsonである可能性があり、解析を試みるまでキャッチされません。application / jsonは失敗し、jsonの形式が正しくない場合はいつでも簡単にデバッグできます

2)ブラウザでjsonを表示している場合、ヘッダータイプを指定すると、使いやすい形式でフォーマットされます。text / htmlは、それをblobとしてより多く表示します。

3)Webページでこのjsonを使用している場合、application / jsonはすぐにjsオブジェクトに変換され、次のようにアクセスできますobj.firstnode.childnode

4)コールバック機能はで機能しますがapplication/json、では機能しませんtext/html

注: gzipを使用すると、パフォーマンスの問題が十分に軽減されます。text/htmlそれでも少し高速ですが、jsonオブジェクトをフェッチするための推奨される方法ではありません

ただし、パフォーマンスに関するより多くの洞察を見たいと思います。ヘッダーの長さは、パフォーマンスの問題を引き起こしていません。Webサーバーがヘッダー形式を分析することと関係があります。

于 2013-02-26T09:51:14.893 に答える
3

サーバーはコンテンツタイプに応じてgzipping/deflateを異なる方法で処理しますか?私のはそうです。Believeabはデフォルトで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

ヘッダーを見て、gzippingが適用されているかどうかを確認することもできます。

curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate" 
于 2013-02-22T19:33:46.960 に答える