2017-07-24 89 views
0

我正在构建基于Slim框架3.8.1的简单API。我遇到了一个问题,即响应需要大约10秒钟才能呈现。我通过消除过程验证了它是实际呈现的响应时间大约需要10秒---它不是数据库查询,应用程序引导程序等。当返回JSON时Slim Framework的响应速度非常慢

我记录了我从中获得的数据端点,它会立即检索并呈现它。该路线实际上甚至在浏览器中立即呈现JSON输出,但随后继续旋转约10,000ms。

不知道这里发生了什么,尤其是因为它是一个非常小的数据集。验证这是发生在各种浏览器中,并在邮件员等REST客户端进行测试。

我验证了这个中间件早就已经执行了,当这个等待发生的时候,看起来并不是这样。

这是我正在做的最小版本。

<?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." 
} 

在Apache/2.2.15像这样没有其他问题上的PHP 30年5月6日运行此的任何想法这可能是为什么发生?

只是回顾一下:加载需要10秒钟,但验证它不是数据库或中间件。如果我拿出返回$回应,页面马上加载。

有什么想法?谢谢!

回答

2

明白了---显然Slim在$ response中添加了一个超长的Content-Length头大小,并且使请求花费了更长的时间加载。

我改变了初始化这一点,它解决了这一问题:

$api = new Slim(['settings' => [ 
    'addContentLengthHeader' => false, 
]]); 

证实完全渲染现在+负荷时间是113毫秒,而不是10,000ms。

谢谢!