如何加快网页加载时间(CRON?在后台加载 API 调用?

How to speed up web page load time (CRON? Load API call in background?)

提问人:Jeff 提问时间:6/17/2017 最后编辑:Jeff 更新时间:6/17/2017 访问量:515

问:

我为自己制作了一个门户页面,该页面在每次加载时都会调用第三方(天气)API(请参见屏幕截图)。此第三方 API 有时需要长达 10 秒的时间才能返回数据,导致页面加载速度慢得令人无法接受。

因此,我考虑每 10-15 分钟运行一次 CRON 作业,以获取数据并将其缓存在本地。然而,这不是一个理想的解决方案,因为它给 API 提供者带来了不必要的压力。如果可能的话,我个人也不喜欢使用 CRON 工作。

我能想到的唯一其他解决方案是以某种方式在后台加载 API 数据,从而允许在我等待 API 提供商返回天气数据时加载页面的其余部分。我什至不确定要搜索什么来学习如何做到这一点。

问题1.“后台加载”编程“技术”叫什么?给我一些东西来搜索。

问题2.您能想到加载/缓存 API 数据的任何其他选项吗?我认为 CRON 工作或“JS 技术”是我唯一的选择,但我已经离开圈子一段时间了。

biffbam

Javascript PHP

评论

1赞 castis 6/17/2017
你要找的术语可能叫“预取”?请与 API 的所有者核实,有些有使用协议,允许您在一小时左右多次访问他们的 API。可能值得研究。
0赞 Siguza 6/17/2017
1)在服务器端,它被称为“预取”或“缓存”,在客户端称为“异步”或“延迟”加载。2) 将异步加载与服务器端缓存相结合,只有在请求和过时时才更新。
0赞 Jeff 6/30/2017
评论我自己的帖子。您需要 jQuery 或 .就我而言,一个简单的方法就可以了。.load().get().ajax().load()

答:

1赞 Marcin 6/17/2017 #1

您想要查看跨域、异步 AJAX 调用 - 这就是名称。

为了进行跨域调用,您的服务器上应该有一个 PHP 包装器/代理文件,您可以从 JavaScript 调用该文件。

PHP 中的代理文件调用 API 端点并返回一些 JSON。

因此,当用户加载您的页面时,在加载 HTML DOM 之后,JavaScript 代码会在后台调用您的代理,然后在下载数据时更新 HTML 元素。

1赞 rickdenhaan 6/17/2017 #2

问题 1:这称为 (“异步 Javascript 和 XML”) 或 (“XMLHttpRequest”)。加载您的基本页面并在天气信息应该所在的位置放置一个占位符,然后使用 javascript 在后台调用一个 PHP 页面,该页面获取 API 结果并返回天气信息,然后您可以将其显示在占位符的位置。AJAXXHR

问题 2:查看类似或类似的东西的缓存解决方案(因为这是你自己的门户,可能是一个很好的学习体验,或者你可以为这样相对简单的东西推出自己的解决方案)。当你的PHP代码需要天气信息时,它首先在缓存中查看它是否已经有天气信息,以及该信息的使用时间。如果它不存在或太旧(例如> 15 分钟),它会调用第三方 API 并更新缓存中的信息。memcached

您可以将这两种技术结合起来来加速 AJAX 请求,也可以使用 cronjob 更新缓存。

0赞 f b 6/17/2017 #3

Q1: 就像提到的那样!一个访问者总是坏人,他的详细信息会延迟,但所有其他访问者都会延迟,直到缓存过期。 我会检查诸如“php后台处理”和“缓存”之类的关键字,或者类似提到的:“预取”,但“缓存”更有用,但也有更多的结果可以过滤。

Q2:根据你的愿望。始终保持最新状态?每个用户?每次?

由于请求限制:一个用户必须等待(直到 ajax 请求完成)。其他使用缓存的用户对我来说是一个不错的选择。

其他选项:如果没有用户访问。然后,您可以在 Backgound 中捕获下一个间隔的 API,以直接:)显示新值

因此:cron 可以每 5 分钟运行一次,但如果缓存未过期,您可以检查是否必须请求 API。

亲切问候 佛瑞恩