PHP如何稍后设置内容或是否加载?

时间:2017-01-24 10:23:30

标签: php jquery delay file-get-contents

您好我有一个网站从api加载数据以显示最新的统计数据。我存储它10分钟,以防止每次加载api调用。因为有很多api调用,所以首次需要5-10秒才能完成加载网站,看起来该网站会被关闭。

目前我正在使用纯php来实现功能。有一些函数,比如GetTotalEarnings() - 只是一个file_get_contents($ url)来接收json内容并对其进行解码并将其放入一个我可以使用10分钟的表中。 10分钟后,它将再次调用所有api刷新值(如果页面重新加载当然)。

为了解决这个问题,我的想法是首先加载内容并显示内容,然后加载数据以便稍后设置值。但我不知道从哪里开始。我知道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>

2 个答案:

答案 0 :(得分:1)

我不会在用户请求中请求API数据,而是每10分钟运行一次后台脚本/程序,将结果缓存到memcachedMySQL。然后,当用户请求数据时,返回缓存的结果。如果API需要10秒以上的时间来处理,那么在不查看可能优化它的代码的情况下,我们必须假设10秒以上才需要处理多长时间。缓存是在不优化API的情况下加速用户请求的唯一方法。

您可以使用JavaScript异步加载脚本,然后在页面加载后修改文档。下面是使用Jquery的示例。

$(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "myApiCalls.php",
            dataType: 'json',
            data: queryString,
            success: function(data) {
                // ...
            }
        });
});

答案 1 :(得分:0)

感谢@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请求一起工作。 问题现已完全解决