3


0

私はいくつかの気象データを奪い、それを私のウェブサイトで利用できるようにするためにこのコードを書きました。

if(! $ xml = simplexml_load_file( 'http://www.weather.gov/data/current_obs/KBED.xml')){echo 'XMLファイルを読み込めません'; } else {$ temp = $ xml-> temp_f。度'; $ wind = $ xml-> wind_mph; $ wind_dir = $ xml-> wind_dir; $ gust = $ xml-> wind_gust_mph; $ time = $ xml->観察時間; $ pres = $ xml-> pressure_in; $ weath = $ xml->天気。 }

それから私はそれらを内側に欲しいタグの内側にエコーアウトするだけです。 私のサイトはトラフィックが少ないですが、トラフィックを急増させるには、このようなことを行うのが「最善の」方法なのでしょうか。 毎回(XMLが更新されるときに)欲しいこれらの変数をcronジョブでデータベースに書き込むべきですか?毎回サーバーへのping送信を節約するべきですか、それとも悪い習慣ではありませんか? 私はこれが少し主観的であることを理解していますが、私は他に誰も「最善の方法」を求める必要はありません。 ありがとうございます。

3 Answer


2


私は以下を提案します:

  • xmlのコンテンツを最初に取得し、それを解析し、何らかの方法でファイルにタイムスタンプを添付してファイルにシリアル化します(おそらくシリアル化されたデータ構造の一部として)。

  • ページが読み込まれるたびに、そのシリアル化されたデータを取得し、タイムスタンプを確認します。 ある時点を過ぎたら、再度xmlを取得してキャッシュし、タイムスタンプを必ず更新してください。 そうでない場合は、そのデータを使用してください。

これはうまくいくはずで、たまにxmlを取得する必要があるだけでなく、キャッシュが期限切れになっても、だれも訪問していなくても定期的に取得して取得するという無駄はありません(更新されるため要求に応じて)。


1


  • XML文書を定期的に取り出して解析し、変数をデータベースに格納するようにcronジョブを設定します。

  • ページが要求されたら、データベースから変数を取得してページをレンダリングします。

  • (天気のWebサイトがダウンしているなどの理由で)データが古くなっていることを確認できるように、最後の更新のタイムスタンプもデータベースに格納することをお勧めします。

この設定は私には非常に合理的に見えます。


0


外部サイトの出力をキャッシュして、5〜10秒ごとに更新させることができます。 それはあなたのサイトからのたくさんの 'ping’の影響を殺すでしょう。 それは本当にあなたの顧客/クライアントにとってタイミング精度がどれほど重要であるかにかかっています。

トラフィックが多い状況では、デーモンまたはcronジョブを実行し、指定された間隔ごとに天気を取得し、実行時に公開Webサイトページを上書きする別のスクリプトを作成します。 こうすることで、バックグラウンドタスクで行われるようにキャッシュについて心配する必要がなくなり、訪問者は単にWebサーバーから静的ページにアクセスするだけになります。 それはまた、データベースを方程式に組み入れる必要性を回避するかまたは少なくとも最小にし、そしてかなり軽量である。

不利な点として、それは2番目の失敗点を生み出し、情報がページアクセスの時まで正確である必要があるならば、まったく役に立たないかもしれません。