【问题标题】:Increase speed of dynamic API calls using PHP使用 PHP 提高动态 API 调用的速度
【发布时间】:2017-06-21 16:09:09
【问题描述】:

我在我的一个网站上调用不同的 API。我能够使用 multi curl PHP 获得最佳结果。但是,我注意到当流量有点高时速度会变得非常慢。我读过缓存是另一种加快网站速度的方法。但是,我的问题是,当我使用的 API 调用完全依赖于基于用户的输入时,我可以使用缓存吗?或者是否有任何替代解决方案。

【问题讨论】:

  • 您可以在缓存键中包含参数,因此如果您已经缓存了具有相同参数的调用,则无需访问API。
  • 嗨 Barmar,感谢您的及时回复。您的解决方案看起来很完美,但如果我不知道参数的值,也是一样的。因为参数的值将取决于用户。例如。在这个调用 api.indeed.com/ads/apisearch?q=PHP&l=&radius=&st=&jt=&start=5&limit=8&fromage=&filter=&latlong=&co=us&chnl=&userip=1.2.3.4&useragent=Mozilla/%2F4.0 %28Firefox%29&v=2 如果我不知道 q(关键字)和 l(位置)的值,我将如何缓存它。
  • 我不明白这个问题。用户将参数发送到您的 PHP 脚本。所以在使用curl之前,它可以检查缓存中的那些参数。
  • ql 的值在 $_GET['q']$_GET['l'] 中。你为什么不认识他们?

标签: php caching memcached pagespeed


【解决方案1】:

有可能是 1 个请求加载时间过长,从而延迟了其他请求。

【讨论】:

    【解决方案2】:

    您的问题的答案取决于用户对数据执行的任务类型。基本上缓存可用于所有与检索、查询数据相关的任务,不适用于插入、变异或删除数据。在您的 Web 应用程序中实现缓存的方法有很多,但最简单的方法之一是对所有仅检索数据的用户请求使用 GET 请求,然后配置 Web 服务器或 CDN 来缓存它们。

    【讨论】:

    • 您好泰语,感谢您的及时回复。我仅将缓存用于查询目的,但问题是用户的请求正在改变。例如。在此调用中 - api.indeed.com/ads/apisearch?q=PHP&l=&radius=&st=&jt=&start=‌​5&limit=8&fromage=&f‌​ilter=&latlong=&co=u‌​s&chnl=&userip=1.2.3‌​ .4&useragent=Mozilla‌​/%2F4.0%28Firefox%29‌​&v=2 参数 q 和 l 的值是动态的,如何缓存呢。
    • 请求不可能完全不同,不是吗?必须存在具有相同查询字符串的请求,即使您将 userip 和 useragent 注入其中(如果不是真的需要,则应避免使用),例如,如果一个用户不断重新加载显示结果的页面,则改为从 Api 获取数据,您的网站可以只为该用户提供他之前看到的缓存结果。
    • 这些请求实际上是不同的用户搜索查询。因此,如果 10 个用户正在搜索 10 种不同的东西,那么将有 10 个完全不同的搜索查询。例如。一个调用可以是 api.indeed.com/ads/apisearch?q=PHP,其他一些可以是 api.indeed.com/ads/apisearch?q=Java 等等。对于 6 种不同的 API 会有这样的调用。这是程序变得非常缓慢的情况。我的缓存概念是在服务器上保存一些高度使用的数据。但是我怎样才能为不同的查询保存这些数据呢?还有没有其他方法可以加快速度?
    • 如果两个查询不同,你怎么能分享结果呢,这样做的代价太大了。相反,您要做的是,并且应该使用什么缓存是如果用户A和用户B具有相同的输入查询字符串,例如q = a,他们应该收到相同的结果,该结果就是您需要缓存的结果.在这种情况下可以使用很多缓存技术,大多数现代网络服务器(如 nginx)可以为您缓存具有相同查询字符串的 GET 请求的响应。否则,您可以使用内存缓存作为 Memcache、Redis 等...或文件缓存。
    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 2015-08-23
    • 2020-03-05
    • 2017-08-29
    • 1970-01-01
    • 2012-04-20
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多