Подтвердить что ты не робот

Текст исполнения /html против приложения/json

При оценке производительности фреймворков PHP я столкнулся с странной проблемой

Отправка JSON как application/json кажется намного медленнее, чем отправка без дополнительного заголовка (который, кажется, отбрасывается на text/html)

Пример # 1 (application/json)

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

Пример # 2 (текст/html)

echo json_encode($data);

Тестирование с помощью сканера apache (ab -c10 -n1000) дает мне:

Пример №1: 350 #/сек

Пример # 2: 440 #/сек

который показывает, что установка дополнительного заголовка кажется немного медленнее.

Но

Получение одинаковых JSON с помощью "ajax" (jQuery.getJSON('url', function(j){console.log(j)});) делает разницу очень большой (время, указанное в Chrome Web Inspector):

Пример # 1: 340 мс/запрос

Пример # 2: 980 мс/запрос

В чем дело этой разницы?

Есть ли причина использовать приложение /json, несмотря на разницу в производительности?

4b9b3361

Ответ 1

Поддерживает ли ваш сервер gzipping/deflate по-разному в зависимости от типа контента? Моя делает. Поверьте, ab не принимает gzip по умолчанию. (Вы можете установить это в ab с пользовательским заголовком с флагом -H). Но 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

Вы также можете посмотреть заголовки, чтобы увидеть, применяется ли gzipping:

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

Ответ 2

Я займу последнюю часть вопроса:

Есть ли причина использовать приложение /json, несмотря на производительность разница?

Ответ: Да

Почему: 1) text/html часто может быть искажен json и будет идти не до тех пор, пока вы не попытаетесь разобрать его. application/json не удастся, и вы можете легко отлаживать всякий раз, когда json неверен.

2) Если вы просматриваете json в браузере, тип заголовка будет форматировать его в удобном для пользователя формате. text/html покажет его больше как blob.

3) Если вы используете этот json на своей веб-странице, приложение /json немедленно преобразуется в объект js, и вы можете получить к ним доступ как obj.firstnode.childnode и т.д.

4) функция обратного вызова может работать на application/json, но не на text/html

Примечание: Использование gzip достаточно облегчит проблему производительности. text/html по-прежнему будет бит быстрее, но не рекомендуемый способ для извлечения объектов json

Хотелось бы увидеть больше информации о производительности. Длина заголовка определенно не вызывает проблемы с производительностью. Больше, чем ваш веб-сервер, анализирующий формат заголовка.