我正在使用jQuery的$.ajax
方法从API中检索一些JSON。
每次加载页面时,都会调用API,无论用户之前是否收到过此数据 - 这意味着当页面上有大量用户时,API限制将生效。
我想到如何处理这个问题首先是将数据推送到数据库(推送到PHP脚本),然后检查数据库以查看是否有任何缓存,然后再返回API以获取更多信息如果需要,可以提供日期信息。
这是一种可行的方法吗?有哪些替代方案?
看起来jQuery实际上只是一个障碍,而不是在PHP中开始使用它,但是当我正在学习语言时,我想尽可能多地使用它!
答案 0 :(得分:3)
不,不要在PHP中这样做。使用HTML5 LocalStorage缓存第一个请求,然后进行检查。如果您必须支持旧浏览器,请使用后备(try these plugins)。
答案 1 :(得分:3)
为了帮助区分意见和推荐技巧,让我们首先分解您的问题,以确保每个人都了解您的情况。
假设我们有两台服务器:“服务器A”和“服务器B”。将'Server A'称为我们的PHP Web服务器,将'Server B'称为我们的API服务器。我假设您无法控制API服务器,这就是您单独调用它的原因,并且无法根据您的需求并行扩展API服务器。让我们说它的某些第三方应用程序,如flickr或收获或其他东西......让我们说这个第三方API服务器每小时限制您的开发人员API密钥请求,有效地限制您每小时150个请求。
当你的一个页面加载到最终用户浏览器中时,源代码来自“服务器A”(我们的php服务器),并且该页面正文中有一些很好的jQuery执行.ajax()调用'Server B'是我们的API服务器。
现在,您的开发人员API密钥每小时只允许150个请求,而假设您可能会在一小时内看到1000个请求到您的“服务器A”PHP服务器。那么我们如何处理这种负载的差异,假设我们不能简单地扩展API服务器(如果可能的话,最好的选择)。
在这种情况下,您可以采取以下措施:
总而言之,无论您采用何种缓存技术,都应该能够向用户显示友好的服务不可用消息。除此之外,您可以使用API响应的服务器端和客户端缓存中的一个或两个来减少影响。服务器端缓存可以将重复请求保存到同一资源,而客户端缓存可以保存同一用户和浏览器对相同资源的重复请求。鉴于所描述的场景,我将避免使用Html5 LocalStorage,因为您需要支持回退/填充选项,这使得内置请求缓存在大多数情况下都同样有效。
正如你所看到的,jQuery不会真正改变这种情况,无论是从PHP服务器端调用API服务器。如果您在服务器端使用PHP执行API调用,而在客户端通过jQuery.ajax()执行API调用,则可以应用相同的缓存技术。当您的容量过大时,应该以这种或那种方式实施相同的友好服务不可用消息。
如果我误解了您的问题,请随时发表评论,澄清和/或修改原始问题。