【发布时间】:2014-02-27 18:36:25
【问题描述】:
我正在开发一个网络应用程序,其功能类似于搜索引擎(除了它非常具体且规模小得多)。当用户提出查询时,我会解析该查询,并根据它是什么,继续执行以下操作之一:
- 从位于另一个域(即:来自 www.example.com/rss/)的 XML 文件中获取数据,该文件本质上是一个 RSS 提要
- 从外部网页中获取 HTML,然后对其进行解析以定位在该页面上某个 div 中找到的文本
所有数据都是纯文本,除了几个将返回图像的特定查询。无需刷新/重定向页面即可显示此数据。
我知道有相同的域策略阻止我使用 Javascript/Ajax 来获取这些数据。一种选择是使用 PHP 来执行此操作,但我主要关心的是服务器负载。
所以我担心的是:
- 是否有任何变通方法可以在客户端而不是服务器端获取此数据?
- 如果没有,就我而言,最佳解决方案是:通过我的服务器获取数据,将其传递给客户端进行解析(使用 Javascript/Ajax),然后继续以适当的形式显示它?
- 如果以上是我的解决方案,那么我的服务器使用 PHP 所做的就是获取来自外部域的数据。在最坏(最好?)的情况下,假设在一分钟内执行了大约一千个请求,我的网络服务器处理所有这些请求是否有效?
一旦我对事件的流程有了清晰的了解,开始就会容易得多。
谢谢。
【问题讨论】:
-
如果远程数据是通过 HTTP 传输的,那么在获取实际负载之前,将数据存储在服务器上并使用远程响应中的缓存标头可以大大减轻这种巨大的开销,类似于浏览器已经这样做了。如果远程文档已更新,请更新您的本地文件。为本地文件设置一个 TTL 以防止存储过载和可能的陈旧数据等。然后将数据传递给浏览器/客户端,就好像它是从远程域请求它并从那里解析一样。这将是一种通过将服务器用作代理来绕过同源策略的方法。
-
@Anthony - 在某些情况下,这将作为一些数据每 24 小时左右更新一次,但在大多数情况下,基本上需要直接从外部域获取数据,因为该数据是非常动态的 - 更新随时且非常频繁。
-
@user3201185 我希望您能理解,在大多数情况下,用户不会寻找 100% 准确的数据结果,假设您每 15 分钟存档一次,这可能会使您的服务器运行不那么紧张。
-
另外,如果数据是动态的,它应该(如果响应服务器行为)具有低 TTL / Max-Age 标头,因此您可以简单地将它们传递给客户端而不缓存它们,就像真正的浏览器一样。
-
@Zac - This 更倾向于服务器端处理。我将只需要自己尝试一下,看看它是否适用于我想要完成的工作。在链接讨论中提出的关于服务器用于处理的观点确实非常有效。感谢您迄今为止的所有帮助。
标签: javascript php ajax xml external