Javascript 如何加快网页加载时间(CRON?后台加载API调用?)
我为自己制作了一个门户页面,在每次加载时调用第三方(天气)API(见屏幕截图)。此第三方API有时需要10秒才能返回数据,导致页面加载速度慢得令人无法接受 因此,我考虑每隔10-15米运行一次CRON作业,以获取数据并将其缓存到本地。然而,这不是一个理想的解决方案,因为它给API提供程序带来的压力超过了必要的程度。如果可能的话,我个人也不喜欢使用CRON作业 我能想到的唯一其他解决方案是在后台加载API数据,从而允许在我等待天气数据从API提供程序返回时加载页面的其余部分。我甚至不知道该找什么来学习如何做 问题1。“后台加载”编程技术叫什么?给我找点东西 问题2。您能想到加载/缓存API数据的其他选项吗?我认为CRON作业或“JS技术”是我唯一的选择,但我已经有一段时间没有参与其中了Javascript 如何加快网页加载时间(CRON?后台加载API调用?),javascript,php,Javascript,Php,我为自己制作了一个门户页面,在每次加载时调用第三方(天气)API(见屏幕截图)。此第三方API有时需要10秒才能返回数据,导致页面加载速度慢得令人无法接受 因此,我考虑每隔10-15米运行一次CRON作业,以获取数据并将其缓存到本地。然而,这不是一个理想的解决方案,因为它给API提供程序带来的压力超过了必要的程度。如果可能的话,我个人也不喜欢使用CRON作业 我能想到的唯一其他解决方案是在后台加载API数据,从而允许在我等待天气数据从API提供程序返回时加载页面的其余部分。我甚至不知道该找什么来
您想看看跨域异步AJAX调用——这就是名称 为了进行跨域调用,您应该在服务器上有一个PHP包装器/代理文件,您可以从JavaScript调用该文件 PHP中的代理文件调用API端点并返回一些JSON
因此,当用户加载页面时,在加载HTML DOM之后,JavaScript代码会在后台调用您的代理,然后在下载数据时更新HTML元素。您想看看跨域异步AJAX调用-这就是名称 为了进行跨域调用,您应该在服务器上有一个PHP包装器/代理文件,您可以从JavaScript调用该文件 PHP中的代理文件调用API端点并返回一些JSON
因此,当用户加载页面时,在加载HTML DOM之后,JavaScript代码在后台调用您的代理,然后在下载数据时更新HTML元素。Q1:这称为
AJAX
(“异步JavaScript和XML”)或XHR
(“XMLHttpRequest”)。加载基本页面并将占位符放在天气信息应该位于的位置,然后使用javascript在后台调用一个PHP页面,该页面获取API结果并返回天气信息,然后您可以将其显示在占位符的位置
问题2:研究缓存解决方案,如memcached
或类似的解决方案(因为这是您自己的门户,可能是一个很好的学习体验,或者您可以将您自己的解决方案用于像这样相对简单的解决方案)。当PHP代码需要天气信息时,它首先在缓存中查找是否已经有天气信息以及该信息的有效期。如果它不存在或太旧(例如>15分钟),它将调用第三方API并更新缓存中的信息
您可以结合使用这两种技术来加速AJAX请求,也可以使用cronjob更新缓存。Q1:这称为
AJAX
(“异步Javascript和XML”)或XHR
(“XMLHttpRequest”)。加载基本页面并将占位符放在天气信息应该位于的位置,然后使用javascript在后台调用一个PHP页面,该页面获取API结果并返回天气信息,然后您可以将其显示在占位符的位置
问题2:研究缓存解决方案,如memcached
或类似的解决方案(因为这是您自己的门户,可能是一个很好的学习体验,或者您可以将您自己的解决方案用于像这样相对简单的解决方案)。当PHP代码需要天气信息时,它首先在缓存中查找是否已经有天气信息以及该信息的有效期。如果它不存在或太旧(例如>15分钟),它将调用第三方API并更新缓存中的信息
您可以结合使用这两种技术来加速AJAX请求,也可以使用cronjob更新缓存。Q1:就像前面提到的那样!一个访问者总是会延迟获取详细信息,而所有其他访问者都会延迟获取详细信息,直到缓存过期。 我会检查诸如“php后台处理”和“缓存”之类的关键字,或者类似于前面提到的:“预取”但“缓存”更有用,但也需要过滤更多的结果 问题2:取决于你的愿望。总是最新的吗?每个用户?每次 由于请求限制:一个用户必须等待(直到ajax请求完成)。其他用户使用缓存对我来说是个不错的选择 其他选项:如果没有用户访问。然后,您可以捕获下一个间隔的backg和api,以直接显示新值:) 因此:cron可以每5分钟运行一次。但是,如果缓存未过期,您可以检查是否必须请求API 问候
弗洛里安:就像之前提到的那样!一个访问者总是会延迟获取详细信息,而所有其他访问者都会延迟获取详细信息,直到缓存过期。 我会检查诸如“php后台处理”和“缓存”之类的关键字,或者类似于前面提到的:“预取”但“缓存”更有用,但也需要过滤更多的结果 问题2:取决于你的愿望。总是最新的吗?每个用户?每次 由于请求限制:一个用户必须等待(直到ajax请求完成)。其他用户使用缓存对我来说是个不错的选择 其他选项:如果没有用户访问。然后,您可以捕获下一个间隔的backg和api,以直接显示新值:) 因此:cron可以每5分钟运行一次。但是,如果缓存未过期,您可以检查是否必须请求API 问候
Florian你要找的术语可能叫做“预取”?与API的所有者核实一下,有些人有使用协议,允许您在一小时左右的时间内多次访问他们的API。可能值得一看。1)在服务器端,它被称为“预取”或“缓存”