我有一个站点,可以从远程服务器加载许多单独的数据 - 也就是说,一个与我的网络服务器分开的公共API服务器。该站点在加载时进行了17次Ajax调用,超出了browser limits,因此使用直接Ajax调用会导致更严重的性能问题。
这些Ajax调用中的一些需要很长时间 - 三个最长时间分别需要28秒,20秒和19秒 - 大多数需要4-8秒,少数需要不到一秒钟。
该站点当前将许多这些Ajax请求批处理为PHP脚本,该脚本充当中间人:客户端向服务器发送URL列表,Web服务器(没有此类并发HTTP请求限制)发出请求代表客户端,网络服务器将API服务器的响应转发给客户端。
//sent by browser to webserver
{
"events_data": {
"url": api_url + "/events/properties/events_data",
"requestType": "GET",
"headers": {},
"parameters": {}
},
"transactions": {
//...
},
//...
}
//returned by webserver to browser after all requests resolve
{
"events_data": {
"response": [
{ /* ... */ },
{ /* ... */ },
// ...
],
"status": {
"http_code": 200,
"content_type": "application/json; version=0.1",
//...
},
"responseHeaders": {
"Content-Length": 12345,
"Connection": "keep-alive",
//...
}
},
"transactions": {
//...
},
//...
}
我对此解决方法的一个重大问题是,客户端必须等待Web服务器接收批处理中的每个HTTP响应,然后才能看到任何数据。我知道我可以通过使用像Socket.io这样的东西解决这个问题,但这看起来有些过分。
如果这是一个常见问题,有什么解决方案可以解决它?
如果不是,那么严重依赖API数据的网站如何避免或缓解此问题呢?