【问题标题】:Would it be better to parse HTML on the server with PHP or on the end user side with JavaScript?使用 PHP 在服务器上解析 HTML 还是使用 JavaScript 在最终用户端解析 HTML 会更好吗?
【发布时间】:2010-12-13 21:07:00
【问题描述】:

我需要编写一个脚本来获取链接并解析链接页面的 HTML 以提取标题和其他一些数据,例如可能是简短描述,就像链接到 Facebook 上的某些内容时一样。

当用户添加到网站的链接时会调用它,因此当客户端启动网站时可以看到相当数量的点击。

我很好奇我应该在服务器端使用 PHP 还是使用 Javascript 在最终用户端执行此操作?我一直在编写背后的逻辑,试图找出标记的哪些区域充满了潜在的内容,这让我想知道如果我继续使用 PHP,负载是否会太大。

客户端只有一个体面的网络服务器,我担心解析/分析 HTML 页面的负载可能会太大,我们可以在 Javascript 中执行它并将其外包给添加链接的用户。

关于此事的任何建议或想法都会很棒。谢谢。

编辑:此数据不会直接进入数据库,它用于通过自动填写链接描述来帮助用户,这些链接在存储到数据库之前仍然经过我的定期审查。

【问题讨论】:

  • 评论而不是回答,因为这是一种观点:如果“负载”对于服务器上的 PHP 脚本来说太大了,它在客户端上的性能可能会更差。考虑到您无法预测客户端的环境或资源,我会整天使用 PHP 而不是 JavaScript。
  • @Stephen - 由于 PHP 被编译成字节码,它的运行速度比 JS 快得多。此外,有一小部分浏览器关闭了 JS。
  • 除了你的php代码为所有客户端运行在单个服务器上,你的js分别运行在每个客户端上
  • 在 JS 或 PHP 上抓取会很快。我担心的是,如果有成千上万的人添加链接,PHP 版本是否会因大量人要求它拉入并解析所有这些页面而陷入困境。
  • 数千不是问题。一点也不。 并发请求的数量会造成性能问题。因此,除非您的意思是“每秒数千次”(您没有这样做),否则您会没事的。即使是一分钟一千次(除非可能是突发性的,否则你不会得到)每秒也只有 16.7 次——在网络服务器上实现这一点非常微不足道。

标签: php javascript web-scraping


【解决方案1】:

嗯,这很简单,因为由于same origin policy,所以完全不能从客户端纯粹使用 JavaScript 执行此操作。

解析 HTML 并不是什么繁重的任务,你应该在 PHP 中完成它。

【讨论】:

  • 我认为同源策略不会有太大问题。我网站上的 JS 只会通过 iframe 或类似方法拉入一个页面标记,以便请求与常规页面加载没有什么不同。最坏的情况是,用户将无法获得人口前福利。
  • 另外,是的。我担心的是在 HTML 上运行搜索以评估内容区域的负载以及对服务器的潜在请求会导致系统瘫痪。
  • 另一个好处是 JavaScript 版本看起来不像我的服务器不断地从另一个站点请求页面。它将来自想要链接到该站点的用户浏览器。
  • “我网站上的 JS 只会通过 iframe 或类似方法拉入一个页面标记,因此请求与常规页面加载没有什么不同。”你真的尝试过这样做吗?写完代码后再联系我。
【解决方案2】:

我会通过 javascript 将其卸载给最终用户,然后您可以使用侦听器将其绑定回服务器。原因很简单:

  • 这是前端而不是后端的助手(值不会直接在后端存储或操作。)
  • 负载分散比本地化在您的服务器上更好,而且如果最终用户仅拉取 1 个网址而服务器拉取数千个网址,您可能会在这里提供更好的用户体验。
  • 前端处理还降低了恶意代码直接在您的服务器上执行的可能性。

【讨论】:

    【解决方案3】:

    如果您正在考虑让客户端实际获取并获取一些随机站点,用 Javascript 为您解析它,获取标题、描述和其他数据,然后在您的表单中为您提交,您的表单提交时间是将受制于用户获取该页面的网络连接速度以及解析数据的任何开销(可能很小)。如果您使用 cURL 执行该服务器端,则命中将在解析文档以获取您需要的内容。最好的速度解决方案可能是让人们输入 URL,用 PHP 将其取回,让 PHP 将其交给 Perl 脚本(它有一些邪恶的快速 DOM 解析器)并为 PERL 脚本取回所需的数据。从个人经验来看,Perl 脚本的性能整天都优于 cURL,而且 cURL 通常比 javascript AJAX 性能要好得多,只是因为它的管道比家庭用户要大。

    【讨论】:

    • 拉取数据的JS稍后会做,这样就不会为用户挂起表单。我最不想做的事情就是为那些确切知道自己想要什么的用户减慢任何速度。
    【解决方案4】:

    你可以两者兼得....

    1)PHP:

    • 结帐HTML DOM Parser,可能会有所帮助
    • 或者使用php curl,然后用DOMDocument解析

    2) JavaScript:

    • 您不必打扰您的服务器(专业版)
    • 使用 jQuery 解析内容很容易(专业版)
    • 您需要处理跨域策略(缺点)

    【讨论】:

    • 我知道我可以两者兼得,只是想弄清楚哪个对用户体验更好。如果处理这些负载会很大,不想减慢我的服务器。
    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多