성능 텍스트/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
'programing' 카테고리의 다른 글
jQuery에서 드롭다운 값 가져오기 (0) | 2023.10.13 |
---|---|
입력 요소에 대한 자바스크립트 변경 이벤트는 초점 손실 시에만 발생합니다. (0) | 2023.10.13 |
XAMPP - 오류:MySQL이 예기치 않게 종료됨 (0) | 2023.10.08 |
공백 및 특수 문자를 사용할 수 없도록 ang-pattern 쓰기 (0) | 2023.10.08 |
Python 스크립트 내에서 curl 명령 실행 (0) | 2023.10.08 |