【问题标题】:PHP and Javascript / Ajax caching for load speed - JSON and SimpleXMLPHP 和 Javascript / Ajax 缓存以提高加载速度 - JSON 和 SimpleXML
【发布时间】:2011-07-05 17:06:05
【问题描述】:

我有一个网站,它使用一些 JSON 和 XML API 从其他网站获取内容。为了防止加载问题和限制问题,我执行以下操作:

  1. PHP - 使用 PHP 显示缓存的内容(如果有)。
  2. PHP - 如果从未缓存过内容,则显示一个空的错误页面并返回 404。(页面第二次加载时会出现“成功 200”)
  3. Ajax - 如果数据库中不存在日期字段,或者当前日期早于存储日期,则从 API 加载/添加内容。将未来日期添加到数据库。 (这使得页面加载速度更快,并且 Ajax 会在页面加载后缓存内容)。

我使用 Ajax 只是为了运行 PHP 文件。我用 PHP 获取内容。

问题

  1. 因为我在内容加载后缓存了内容,所以用户将看到旧内容。这是向用户展示新内容的最佳方式。我正在考虑使用 Javascript 自动重新加载页面或消息唠叨。其他首选方式?
  2. 如果我使用非常多的 API:s,Ajax 加载时间会很长,并且出现一些错误的风险更大。有没有巧妙的方法来分担负载?

第二个问题很重要。

【问题讨论】:

  • 你有什么理由使用 JavaScript 吗?一个简单但有效的解决方案是 memcache。您可以轻松缓存数据并在 X 秒后过期。

标签: php javascript ajax api caching


【解决方案1】:

因为我在它之后缓存了内容 已加载用户将看到旧的 内容。什么是最好的展示方式 给用户的新内容。我是 使用 Javascript 自动思考 重新加载页面或消息唠叨。其他 喜欢的方式?

我认为您不应该通过 javascript 重新加载页面,而只需使用 Jquery's .load()。通过这种方式,新内容被插入到 DOM 中,而无需重新加载整个页面。也许您通过addClass() 添加一些 CSS 来突出显示新插入的内容。

如果我使用很多 API:s Ajax 加载时间会很长,这是一个 更大的风险,一些错误会 准确的。有没有巧妙的办法 分担?

您不应该首先拆分内容。你应该尝试minimize number of HTTP requests。如果可能的话,您应该使用某种消息队列(例如 beanstalkd、redis)来离线调用所有 API。还将数据缓存在内存数据库中,例如 redis。感谢http://redistogo.com,您可以获得免费的 redis 实例。要连接到 redistogo,您可能应该使用 predis

【讨论】:

    【解决方案2】:

    为什么不使用下面的结构:

    AJAX load content.php
    

    在 content.php 中

    • 检查内容是否已加载。是 > 检查日期是否是新的。是>返回内容
    • 有内容,但较旧 > 从外部重新加载内容 > 返回内容
    • 没有内容 > 从外部重新加载内容 > 返回内容。

    关于你的第二个问题。这取决于需要刷新 api 内容的频率。如果它每天都运行,您可以在晚上(或者当有最少的人活跃时)运行一个脚本来获取所有新内容,然后在白天呈现该内容。这样您就可以最大限度地减少高峰时段对外部资源的调用。

    如果您可以访问多台服务器,那么聪明的方法就是分担负载。让每个服务器处理一部分请求。

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 2017-09-26
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      相关资源
      最近更新 更多