我为自己做了一个门户页面,在每次加载时调用第三方(天气) API (见截图)。这种第三方API有时需要10秒才能返回数据,从而导致页面加载速度慢得无法接受。
因此,我考虑每隔10-15m运行一次CRON作业,以获取数据并将其缓存到本地。然而,这并不是一个理想的解决方案,因为它给API提供者带来了比必要的更多的压力。如果可能的话,我个人也不喜欢使用CRON作业。
我能想到的唯一其他解决方案是以某种方式在后台加载API数据,从而允许页面的其余部分在我等待天气数据从API提供程序返回的同时加载。我甚至不确定要搜索什么才能了解如何做到这一点。
Q1。这种“后台加载”编程“技术”叫什么?给我找点东西吧。
Q2。您还能想到加载/缓存API数据的其他选择吗?我认为CRON工作或"JS技术“是我唯一的选择,但我已经离开了一段时间。

发布于 2017-06-17 05:30:47
您希望查看跨域的异步AJAX调用--这就是名称。
为了进行跨域调用,您的服务器上应该有一个PHP包装器/代理文件,您可以从JavaScript调用它。
PHP中的代理文件调用API端点并返回一些JSON。
因此,当用户加载您的页面时,在加载HTML DOM之后,JavaScript代码将在后台调用您的代理,然后在下载数据时更新HTML元素。
发布于 2017-06-17 05:35:47
Q1:称为AJAX ("Asynchronous Javascript and XML")或XHR ("XMLHttpRequest")。加载您的基本页面,并在应该放置天气信息的位置放置一个占位符,然后使用javascript在后台调用PHP页面,该页面将获取API结果并返回天气信息,然后您可以在占位符的位置显示天气信息。
Q2:研究像memcached或类似的缓存解决方案(因为这是您自己的门户,这可能是一个很好的学习体验,或者您可以为像这样相对简单的东西推出自己的解决方案)。当PHP代码需要天气信息时,它首先在缓存中查找,看看是否已经有天气信息,以及这些信息有多长时间。如果它不存在或太旧(例如> 15分钟),它会调用第三方API并更新缓存中的信息。
您可以结合使用这两种技术来加快AJAX请求的速度,也可以使用cronjob更新缓存。
发布于 2017-06-17 05:48:27
Q1:就像前面提到的!一个访问者总是一个糟糕的访问者,他会延迟细节,但所有其他访问者都会延迟,直到缓存过期。我会检查诸如"php后台处理“和”缓存“之类的关键字,或者类似于提到的:”预取“,但”缓存“更有帮助,但也有更多的结果需要过滤。
Q2:取决于你的意愿。始终保持最新状态?每个用户?每次都是吗?
由于请求限制:一个用户必须等待(直到ajax请求完成)。其他用户使用缓存对我来说是一个很好的选择。
其他选项:如果没有用户访问。然后,您可以在后台捕获下一个时间间隔的api,以直接显示新值:)
所以: cron可以每隔5分钟运行一次。但是,如果缓存未过期,您可以检查是否必须请求API。
Kind谈弗洛里安
https://stackoverflow.com/questions/44598184
复制相似问题