Я создаю простой API на основе Slim framework 3.8.1. У меня проблема, когда ответ занимает ~ 10 секунд для рендеринга. Методом исключения я подтвердил, что фактический рендеринг ответа занимает ~ 10 секунд --- это не запрос к базе данных, загрузка приложения и т. д.
Я регистрирую данные, которые я получаю от конечной точки, и она извлекает и отображает их более или менее мгновенно. На самом деле маршрут даже сразу отображает вывод JSON в браузере, но затем продолжает вращаться в течение ~ 10 000 мс.
Не уверен, что здесь происходит, тем более что это довольно небольшой набор данных. Проверено, что это происходит в различных браузерах, а также тестируется в клиентах REST, таких как Postman.
Я убедился, что промежуточное программное обеспечение уже давно выполнено, когда это ожидание произошло, так что это не похоже на это.
Вот минимальная версия того, что я делаю.
<?php
$api = new Slim();
$api->any('/{plant}/{noun}', function ($request, $response, $args) {
return $response->withStatus($status)->withJson(
$my_json
);
}
Если я использую ->write()
и вместо этого просто отправлю короткую текстовую строку, все в порядке. Если я передам JSON в ->write()
, он зависнет примерно на 10 секунд.
Как ни странно, если я делаю что-то простое, например return $response->withStatus(404)->withJson(['foo'=>'bar']);
, он возвращает ответ мгновенно, с оговоркой, что тело ответа усекается и просто показывает {"
вместо полного ответа {"foo":"bar"}
, который я ожидаю.
Вот тело JSON, которое я успешно передаю, но оно отображается примерно 10 секунд:
{
"data": {
"id": "14",
"user_id": "1",
"name": "foozzz",
"description": "1q234567u12349",
"sku": "",
"price": "123.00",
"shipping": {
"r1-1": "123.00",
"r1-1+": "123.00",
"r2-1": "123.00",
"r2-1+": "123.00"
},
"flexible_price": "1",
"digital_fulfillment": "1",
"physical_fulfillment": "1",
"physical_weight": "0",
"physical_width": "0",
"physical_height": "0",
"physical_depth": "0",
"available_units": "-1",
"variable_pricing": "0",
"fulfillment_asset": "9",
"descriptive_asset": "64",
"creation_date": "1499186300",
"modification_date": "1499707715",
"variants": {
"attributes": [],
"quantities": [
{
"id": "13",
"key": "\"{\\\"123\\\":\\\"PURPLE\\\",\\\"2442\\\":\\\"djdoos\\\"}\"",
"formatted_name": "",
"value": "13"
},
{
"id": "14",
"key": "\"{\\\"123\\\":\\\"PURPLE\\\",\\\"2442\\\":\\\"dskmkdjjd\\\"}\"",
"formatted_name": "",
"value": "10"
},
{
"id": "15",
"key": "\"{\\\"123\\\":\\\"dappsajd\\\",\\\"2442\\\":\\\"djdoos\\\"}\"",
"formatted_name": "",
"value": "123"
},
{
"id": "16",
"key": "\"{\\\"123\\\":\\\"dappsajd\\\",\\\"2442\\\":\\\"dskmkdjjd\\\"}\"",
"formatted_name": "",
"value": "81"
}
]
}
},
"status": 200,
"status_uid": "commerce_item_200"
}
Первоначально я думал, что это медленно из-за размера ответа, но это также занимает ~ 10 секунд, чтобы завершить загрузку (еще раз он отображается мгновенно, а затем вращается в течение продолжительности:
{
"status": 404,
"status_uid": "general_404",
"status_message": "Route not found, or server error",
"error_name": "There was an error while getting a response",
"error_message": "The request failed."
}
Выполнение этого на PHP 5.6.30 на Apache/2.2.15 без каких-либо других проблем, подобных этой. Любые мысли о том, почему это может происходить?
Напомним: загрузка занимает около 10 секунд, но проверено, что это не база данных или промежуточное ПО. Если я уберу ответ $response, страница сразу же загрузится.
Какие-нибудь мысли? Спасибо!