programing

성능 텍스트/html 대 애플리케이션/json

goodsources 2023. 10. 13. 22:04
반응형

성능 텍스트/html 대 애플리케이션/json

PHP 프레임워크의 성능을 평가하던 중 이상한 문제가 생겼습니다.

다음으로 JSON 보내기application/json추가 헤더 없이 전송하는 것보다 훨씬 느린 것 같습니다(이는 뒤로 넘어간 것 같습니다).text/html)

예제 #1 (응용프로그램/json)

header('Content-Type: application/json');
echo json_encode($data);

예제 #2 (text/html)

echo json_encode($data);

Apache 벤치를 사용한 테스트(ab -c10 -n1000) 다음을 제공합니다.

예제 #1: 350 #/sec

예제 #2: 440 #/sec

추가 헤더를 설정하는 것이 좀 더 느린 것 같습니다.

그러나:

"ajax"를 통해 동일한 JSON 받기(jQuery.getJSON('url', function(j){console.log(j)});)는 차이를 매우 크게 만듭니다(Chrome Web Inspector에서 볼 수 있는 타이밍).

예제 #1: 340ms / 요청

예제 #2: 980ms / 요청

이 차이가 뭐가 문제입니까?

성능 차이에도 불구하고 application/json을 사용해야 하는 이유가 있습니까?

질문의 마지막 부분을 맡겠습니다.

성능 차이에도 불구하고 application/json을 사용해야 하는 이유가 있습니까?

답변: 예

이유: 1) text/html은 종종 json의 형식이 잘못될 수 있으며 파싱을 시도할 때까지 잡히지 않습니다. application/json은 실패할 것이고 json의 형식이 잘못될 때마다 쉽게 디버깅할 수 있습니다.

2) 브라우저에서 json을 볼 경우 헤더 타입을 사용하면 사용자 친화적인 포맷으로 포맷됩니다. text/html을 사용하면 blob으로 더 많이 표시됩니다.

3) 만약 당신이 당신의 웹페이지에서 이 json을 소비한다면, application/json은 즉시 js object로 변환될 것이고 당신은 그것들을 다음과 같이 접근할 수 있습니다.obj.firstnode.childnode기타.

4) 콜백 기능이 작동할 수 있습니다.application/json, 하지만 그렇지는 않습니다.text/html

참고: gzip을 사용하면 성능 문제를 충분히 완화할 수 있습니다.text/html그래도 조금 더 빠르겠지만 json 개체를 가져오는 권장 방법은 아닙니다.

성능에 대한 더 많은 통찰력을 얻고 싶습니다.헤더 길이는 확실히 성능 문제를 일으키지 않습니다.웹 서버에서 헤더 형식을 분석하는 것이 더 중요합니다.

서버가 콘텐츠 유형에 따라 지핑/디플레이핑을 다르게 처리합니까?저는.believe ab에서는 기본적으로 gzip을 허용하지 않습니다. (-H 플래그가 있는 사용자 지정 헤더를 사용하여 ab에서 이를 설정할 수 있습니다.하지만 Chrome은 항상 gziping을 수용한다고 말할 것입니다.

컬 테스트를 사용하여 파일 크기가 다른지 확인할 수 있습니다.

 curl http://www.example.com/whatever --silent -H "Accept-Encoding: gzip,deflate" --write-out "size_download=%{size_download}\n" --output /dev/null

머리글을 보고 gziping이 적용되는지 확인할 수도 있습니다.

curl http://www.example.com/whatever -I -H "Accept-Encoding: gzip,deflate" 

언급URL : https://stackoverflow.com/questions/14946845/performance-text-html-vs-application-json

반응형