【问题标题】:Is fetching remote data server-side and processing it on server faster than passing data to client to handle?在服务器端获取远程数据并在服务器上处理它是否比将数据传递给客户端处理更快?
【发布时间】:2014-02-27 18:36:25
【问题描述】:

我正在开发一个网络应用程序,其功能类似于搜索引擎(除了它非常具体且规模小得多)。当用户提出查询时,我会解析该查询,并根据它是什么,继续执行以下操作之一:

  • 从位于另一个域(即:来自 www.example.com/rss/)的 XML 文件中获取数据,该文件本质上是一个 RSS 提要
  • 外部网页中获取 HTML,然后对其进行解析以定位在该页面上某个 div 中找到的文本

所有数据都是纯文本,除了几个将返回图像的特定查询。无需刷新/重定向页面即可显示此数据。

我知道有相同的域策略阻止我使用 Javascript/Ajax 来获取这些数据。一种选择是使用 PHP 来执行此操作,但我主要关心的是服务器负载。

所以我担心的是:

  1. 是否有任何变通方法可以在客户端而不是服务器端获取此数据?
  2. 如果没有,就我而言,最佳解决方案是:通过我的服务器获取数据,将其传递给客户端进行解析(使用 Javascript/Ajax),然后继续以适当的形式显示它?
  3. 如果以上是我的解决方案,那么我的服务器使用 PHP 所做的就是获取来自外部域的数据。在最坏(最好?)的情况下,假设在一分钟内执行了大约一千个请求,我的网络服务器处理所有这些请求是否有效?

一旦我对事件的流程有了清晰的了解,开始就会容易得多。

谢谢。

【问题讨论】:

  • 如果远程数据是通过 HTTP 传输的,那么在获取实际负载之前,将数据存储在服务器上并使用远程响应中的缓存标头可以大大减轻这种巨大的开销,类似于浏览器已经这样做了。如果远程文档已更新,请更新您的本地文件。为本地文件设置一个 TTL 以防止存储过载和可能的陈旧数据等。然后将数据传递给浏览器/客户端,就好像它是从远程域请求它并从那里解析一样。这将是一种通过将服务器用作代理来绕过同源策略的方法。
  • @Anthony - 在某些情况下,这将作为一些数据每 24 小时左右更新一次,但在大多数情况下,基本上需要直接从外部域获取数据,因为该数据是非常动态的 - 更新随时且非常频繁。
  • @user3201185 我希望您能理解,在大多数情况下,用户不会寻找 100% 准确的数据结果,假设您每 15 分钟存档一次,这可能会使您的服务器运行不那么紧张。
  • 另外,如果数据是动态的,它应该(如果响应服务器行为)具有低 TTL / Max-Age 标头,因此您可以简单地将它们传递给客户端而不缓存它们,就像真正的浏览器一样。
  • @Zac - This 更倾向于服务器端处理。我将只需要自己尝试一下,看看它是否适用于我想要完成的工作。在链接讨论中提出的关于服务器用于处理的观点确实非常有效。感谢您迄今为止的所有帮助。

标签: javascript php ajax xml external


【解决方案1】:

我刚刚完成了一个项目来执行与您的请求相同的请求。

我的建议是:

  1. 用于文件,[1] 用于前端,进行 ajax 调用以发送回 url; [2] 接收ajax调用,从url获取文件内容,然后解析xml/html

    • 这样可以避免你的php在某些情况下死机
  2. php,请查看[DomDocument]类,解析xml/html,还需要[DOMXPath]

请阅读:http://www.php.net/manual/en/class.domdocument.php

无论您做什么,我建议您始终将数据存档在本地服务器中。

所以,这个过程变成了 - 首先搜索你的本地,如果不存在,然后从远程抓取也存档 - 24 小时。

顺便说一句,对于您的客户端解析想法,我建议您这样做。 jQuery可以同时处理html和xml,对于HTML你只需要在解析之前过滤所有的js代码。

所以这个想法变成了:

  1. ajax 调用本地服务

  2. 本地php抓取xm/html(但不解析)

  3. 存档到本地

  4. 将过滤器html/xml发送到前端,让jQuery解析。

【讨论】:

  • 关于归档数据的好主意,我绝对可以在某些情况下使用它。我应该用 PHP 解析 XML/HTML 还是将其发送回前端让 Javascript 解析它?
  • 对于您的客户端解析想法,我建议您这样做。 jQuery 可以同时处理 html 和 xml,对于 HTML,您只需要在解析之前过滤所有 js 代码。于是思路变成了:ajax调用本地服务->本地php抓取xm/html(但不解析)->归档到本地->发送过滤器html/xml到前端,让jQuery解析。
【解决方案2】:

HTML 类似于 XML。我建议将页面作为 HTML 抓取并使用 XML 阅读器作为 XML 遍历它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 2021-10-08
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多