PHP如何设置内容稍后或是否加载?
PHP how to set content later or if is loaded?
您好,我有一个从 api 加载数据以显示最新统计数据的网站。我将其存储 10 分钟以防止每次加载 api 调用。由于有很多 api 调用,所以第一次需要 5-10 秒才能完成网站加载,看起来网站会关闭。
目前我使用纯 php 来实现功能。有像 GetTotalEarnings() 这样的函数 - 只是一个 file_get_contents($url) 来接收 json 内容并将其解码并将其放入我可以用于的 table 10分钟。 10 分钟后,它将再次调用所有 apis 以刷新值(当然,如果页面重新加载)。
为了解决这个问题,我的想法是先加载内容并显示内容,然后加载数据以稍后设置值。但我不知道从哪里开始。我知道 jquery 可以通过回调来做到这一点,但它 javascript。我不知道在那里做什么
两个例子目前看起来如何
<h1 class=""><center>Earnings Total: <?php echo GetTotalEarnings() . " (Latest update: " . GetLatestUpdateTime() . ")"; ?></center></h1>
<h1 class="">This Month</h1>
<div class="col-xs-6 col-sm-6 col-md-3">
<div class="box c1 center-block">
<h4 class="blue">Today</h4>
<span class="icon blue"><i class="fa fa-usd"></i></span>
<span class="price-large blue"><?php echo round(GetTodayEarnings(), 2); ?></span>
</div>
</div>
我不会根据用户请求请求 API 数据,而是每 10 分钟有一个后台 script/program 运行,将结果缓存在 memcached or MySQL 中。然后当用户请求数据时,return 缓存的结果。如果 API 需要 10 秒以上的时间来处理,那么在不查看可能对其进行优化的代码的情况下,我们必须假设 10 秒以上就是处理所需的时间。缓存是在不优化 API.
的情况下加速用户请求的唯一方法
您可以使用 JavaScript 异步加载脚本,然后在页面加载后修改文档。下面是一个使用 Jquery.
的例子
$(document).ready(function(){
$.ajax({
type: "GET",
url: "myApiCalls.php",
dataType: 'json',
data: queryString,
success: function(data) {
// ...
}
});
});
感谢@Leon Storey,在阅读他对 "data: queryString," 的回答并回答他时,我有一个很好的想法,我想在这里向也有问题的人展示。
对于像@RiggsFolly 这样的人,我想要的只是在这里使用复制粘贴获取为我编写的代码,并在不理解问题的情况下先判断我(我认为甚至是“-1”)我想再说一遍:我的问题是我有许多定义的 php 函数,它们从外部 api 请求数据(目前我将数据存储 10 分钟,此时它不会使用 api)。因为我说过我想先制作加载内容,然后使用请求更新数字等值,所以我不知道从哪里开始使用它并将它与 jquery 一起使用,或者可能与其他想法一起使用。只是想知道有什么可能。
现在我做了什么来解决这个问题。
Php有两大功能。
function_exists("func");
call_user_func("func");
我和 ajax 一起做了这个
$(document).ready(function(){
$.ajax({
type: "post",
url: "apicalls.php",
data: {callfunction: 'GetTotalEarnings'},
success: function(data) {
alert(data);
}
});
});
如果 api 请求完成,这将发出警报。现在让我们看看 apicalls.php
include "apirequest.php";
if(isset($_POST['callfunction'])) {
$func = $_POST['callfunction'];
if(function_exists($func)) {
echo call_user_func($func);
} else {
die("This function does not exists");
}
}
这意味着我不需要重写我的 "apirequest" php 文件。我只是使用像管道这样的小帮手让它处理 ajax 请求。 问题现已完全解决
您好,我有一个从 api 加载数据以显示最新统计数据的网站。我将其存储 10 分钟以防止每次加载 api 调用。由于有很多 api 调用,所以第一次需要 5-10 秒才能完成网站加载,看起来网站会关闭。
目前我使用纯 php 来实现功能。有像 GetTotalEarnings() 这样的函数 - 只是一个 file_get_contents($url) 来接收 json 内容并将其解码并将其放入我可以用于的 table 10分钟。 10 分钟后,它将再次调用所有 apis 以刷新值(当然,如果页面重新加载)。
为了解决这个问题,我的想法是先加载内容并显示内容,然后加载数据以稍后设置值。但我不知道从哪里开始。我知道 jquery 可以通过回调来做到这一点,但它 javascript。我不知道在那里做什么
两个例子目前看起来如何
<h1 class=""><center>Earnings Total: <?php echo GetTotalEarnings() . " (Latest update: " . GetLatestUpdateTime() . ")"; ?></center></h1>
<h1 class="">This Month</h1>
<div class="col-xs-6 col-sm-6 col-md-3">
<div class="box c1 center-block">
<h4 class="blue">Today</h4>
<span class="icon blue"><i class="fa fa-usd"></i></span>
<span class="price-large blue"><?php echo round(GetTodayEarnings(), 2); ?></span>
</div>
</div>
我不会根据用户请求请求 API 数据,而是每 10 分钟有一个后台 script/program 运行,将结果缓存在 memcached or MySQL 中。然后当用户请求数据时,return 缓存的结果。如果 API 需要 10 秒以上的时间来处理,那么在不查看可能对其进行优化的代码的情况下,我们必须假设 10 秒以上就是处理所需的时间。缓存是在不优化 API.
的情况下加速用户请求的唯一方法您可以使用 JavaScript 异步加载脚本,然后在页面加载后修改文档。下面是一个使用 Jquery.
的例子$(document).ready(function(){
$.ajax({
type: "GET",
url: "myApiCalls.php",
dataType: 'json',
data: queryString,
success: function(data) {
// ...
}
});
});
感谢@Leon Storey,在阅读他对 "data: queryString," 的回答并回答他时,我有一个很好的想法,我想在这里向也有问题的人展示。
对于像@RiggsFolly 这样的人,我想要的只是在这里使用复制粘贴获取为我编写的代码,并在不理解问题的情况下先判断我(我认为甚至是“-1”)我想再说一遍:我的问题是我有许多定义的 php 函数,它们从外部 api 请求数据(目前我将数据存储 10 分钟,此时它不会使用 api)。因为我说过我想先制作加载内容,然后使用请求更新数字等值,所以我不知道从哪里开始使用它并将它与 jquery 一起使用,或者可能与其他想法一起使用。只是想知道有什么可能。
现在我做了什么来解决这个问题。 Php有两大功能。
function_exists("func");
call_user_func("func");
我和 ajax 一起做了这个
$(document).ready(function(){
$.ajax({
type: "post",
url: "apicalls.php",
data: {callfunction: 'GetTotalEarnings'},
success: function(data) {
alert(data);
}
});
});
如果 api 请求完成,这将发出警报。现在让我们看看 apicalls.php
include "apirequest.php";
if(isset($_POST['callfunction'])) {
$func = $_POST['callfunction'];
if(function_exists($func)) {
echo call_user_func($func);
} else {
die("This function does not exists");
}
}
这意味着我不需要重写我的 "apirequest" php 文件。我只是使用像管道这样的小帮手让它处理 ajax 请求。 问题现已完全解决