【问题标题】:What's the ideal way to implement this PHP/XML function in a website?在网站中实现这个 PHP/XML 功能的理想方式是什么?
【发布时间】:2010-10-30 07:07:38
【问题描述】:

我编写了这段代码来获取一些天气数据并在我的网站上提供:

if( ! $xml = simplexml_load_file('http://www.weather.gov/data/current_obs/KBED.xml') ) 
{ 
    echo 'unable to load XML file'; 
} 
else 
{ 
  $temp = $xml->temp_f.' Degrees';
  $wind = $xml->wind_mph;
  $wind_dir = $xml->wind_dir;
  $gust = $xml->wind_gust_mph;
  $time = $xml->observation_time;
  $pres = $xml->pressure_in;
  $weath = $xml->weather;
}

然后我只是在我想要它们的标签内回显它们。我的网站流量很低,但我想知道如果我要大幅增加流量,那么“最好”的方法是什么。我是否应该每隔一小时(刷新 XML 时)将这些变量写入数据库,并使用 cron 作业来保存每次对服务器的 ping 操作,或者这不是坏习惯?我知道这有点主观,但我没有其他人可以要求“最佳方式”。谢谢!!

【问题讨论】:

    标签: php html xml


    【解决方案1】:

    我建议如下:

      1234563
    • 每次页面加载时,获取序列化数据并检查时间戳。如果超过了某个点,请再次获取 xml 并将其缓存,确保更新时间戳。如果没有,请使用该数据。

    这应该可行,这意味着您只需要偶尔去获取 xml,而且,一旦缓存过期,即使没有人访问,您也不会浪费定期获取它(因为它仅在请求时更新)。

    【讨论】:

    • 这种方法有一个缺点;当缓存需要更新时,页面加载速度会变慢。
    • 当然,但话又说回来,提供来自 XML 的响应足够迅速,而不是预防性的 - 而且,这确实意味着您不需要 cron 作业弱链接,也不需要数据库连接。跨度>
    【解决方案2】:

    您可以缓存外部站点的输出,并让它每隔 5-10 秒更新一次。这将消除您网站上大量“ping”的影响。这实际上取决于时间准确性对您的客户/客户的重要性。

    在高流量情况下,我将有一个单独的脚本来运行守护程序或 cron 作业,并每隔指定的时间间隔获取天气,并在完成后覆盖公共网站页面。这样,您就不必担心缓存,因为它是由后台任务完成的,您的访问者只是从 Web 服务器访问静态页面。这也避免或至少最小化了将数据库合并到方程中的需要,并且相当轻量级。

    不利的一面是,它确实会产生第二个故障点,如果信息需要准确到页面访问时间,它可能会毫无用处。

    【讨论】:

      【解决方案3】:
      • 设置 cron 作业以定期获取 XML 文档,对其进行解析并将变量存储在数据库中。
      • 当请求页面时,从数据库中获取变量并呈现您的页面。
      • 最好将上次更新的时间戳也存储在数据库中,这样您就可以判断数据何时过时(因为天气网站已关闭等)。

      我觉得这个设置很合理。

      【讨论】:

      • 我是否正确地假设每次 ping 另一台服务器都是“粗鲁”或效率低下的?
      • t 取决于他们的服务条款。但是由于它们提供了可解析的 XML 提要,因此它们很可能对此感到满意,尤其是在您不经常这样做的情况下。每小时一次应该是合理的。同样,最好先检查网站的 TOS。
      • 但肯定会像我现在拥有的那样在每次页面加载时对其进行 ping 操作?看起来很多,但从来没有管理过高负载的服务器,我不知道什么是麻烦,什么不是......
      • 是的,我认为在每个页面视图上点击提要太多了,尤其是您可以轻松缓存它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2018-08-22
      • 1970-01-01
      相关资源
      最近更新 更多