2017-01-24 4 views
-1

こんにちは私は、最新の統計情報を表示するためにAPIからデータを読み込むウェブサイトを持っています。私は毎回API呼び出しを読み込まないように10分間保管しています。多くのAPI呼び出しがあるので、Webサイトの読み込みが終了するまでには、Webサイトがダウンするように見えるのは、最初は5〜10秒かかります。PHPコンテンツを後で設定する方法、または読み込む方法は?

現在、私は機能のために純粋なPHPを使用しています。 GetTotalEarnings()のような関数があります.jsonコンテンツを受け取り、それをデコードして10分間使用できるテーブルに置くだけのfile_get_contents($ url)です。 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> 
+0

10分ごとにデータを取得する場合は、CRONジョブがニーズに適しているように聞こえます。これはまた、バックグラウンドで既に行われているように、ユーザがデータをダウンロードするのを待つ必要がないため、フロントエンドを高速化する。 –

+0

これは問題ではありません。私は10分間データを保存するファイルを作った。時間が経過すると、ページがリロードされ、ファイルがリフレッシュされます。私はcronの仕事を使いたくない。すべてのデータがオンザフライで更新されるならば、私にとっては大丈夫です。 – MaZy

+0

あなたはJavascriptと多分JQueryを使いたいと思っていますが、あなたはそれらの言語について何も知らないのです!だから、本を手に入れたり、オンラインチュートリアルをしなければなりません。 SO **はチュートリアルのサイトではありません**無料であなたのコードを書いてはいけません** – RiggsFolly

答えて

1

代わりに、ユーザの要求に応じてAPIのデータを要求するので、私が代わりにその10分ごとに実行しているバックグラウンドスクリプト/プログラムを持っているでしょうどのように見えるか

二つの例を行うTOTかわかりません結果はmemcachedまたはMySQLにキャッシュされます。ユーザーがデータを要求すると、キャッシュされた結果が返されます。 APIが処理に10秒以上かかる場合、潜在的に最適化するコードを見ずに、処理に要する時間は10秒以上と仮定する必要があります。キャッシングは、APIを最適化せずにユーザーの要求をスピードアップする唯一の方法です。

JavaScriptを使用してスクリプトを非同期に読み込み、ページが読み込まれるとドキュメントを変更することができます。以下は、Jqueryを使用した例です。 @Leonストーリーへ

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

ありがとうございました。その理由は、私がリアルタイムでデータを持つことにした場合、私はcronjobsのようなものを避けようとしているからです。私はすべてのリロード時に変更を確認することを意味します。また、apiリクエストが処理するのに常に10秒かかるとは限りません。それらのうちのいくつかは瞬間的であり、いくつかは少し時間がかかります。それで、なぜ私は、後でコンテンツにデータをロードしたり、後でコンテンツを更新すると考えましたか?まぁ、いいよ。 jquery/ajaxを使う必要があります。 jqueryがphpの関数を呼び出すことができれば、これは完璧です。私は試してみます – MaZy

0

おかげで、「データ:のqueryString、」と彼の答えを読みながら、彼に答える私はここにOFCあまりにも問題を抱えている人々のために表示したい素敵なアイデアを持っていました。

@RiggsFollyのような人には、コピーを貼り付けるだけで、私のために書かれたコードが得られ、問題を理解することなく最初に判断することができます。私は外部APIからデータを要求する多くのPHP関数を定義しています(現在は10分間データを保存していますが、今回はAPIを使用しません)。私はロード・コンテンツを最初に作成したいと言ってから、リクエストの数値のような値を更新したいと思っていました。どこから始めるべきか分かりませんでした。可能なことを知りたかっただけです。

これを解決するために何をしましたか? PHPには2つの機能があります。 Ajaxで

function_exists("func"); 

call_user_func("func"); 

一緒に、私はこの

$(document).ready(function(){ 
    $.ajax({ 
     type: "post", 
     url: "apicalls.php", 
     data: {callfunction: 'GetTotalEarnings'}, 
     success: function(data) { 
      alert(data); 
     } 
    }); 
}); 

API要求が行われた場合、これは警告を与える作られました。今、これは私が私の「apirequest」PHPファイルを書き換える必要がないことを意味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"); 
    } 
} 

を見ることができます。私はパイプラインのようなちょっとしたヘルパーを使ってAjaxリクエストで動作させています。 問題は完全に解決されました

+0

'$ _POST'の外部データをチェックしていないというセキュリティ上の問題があります。あなたのスクリプトで使用されている関数を知っていれば、誰でも呼び出し可能です。 'apicalls.php?callfunction = MySuperSecretFunction'のようなものです。チェックするために一般にアクセス可能な関数の '配列'が必要な場合があります。 –

+0

はい、私はすでにそれについて考えました。私はすべての制限された機能をそこから取り出しました。 apiの「取得」だけが問題ありません。しかし、将来、私は配列などに変更します。 – MaZy

関連する問題