服务器端处理还是客户端处理?

Server side processing or client side processing?

提问人:Prashant Singh 提问时间:9/26/2012 更新时间:6/10/2021 访问量:3151

问:

我开发了一个比较网站,用于比较在印度在线销售的任何产品。目前,该网站完全是客户端:-

  1. 接受用户输入。
  2. 发出 20-30 个 AJAX 请求并从所有主要在线商店获取结果。
  3. 使用一些客户端脚本对结果进行排序,并以最合适的方式显示结果。

弊:-

  1. 我的客户端代码可供所有人使用。它的 javascript。
  2. 更容易出现浏览器错误。
  3. 不健壮。

使其在服务器端完成后的缺点:-

  1. 考虑到我网站的流量,服务器负载会增加,因为它将与客户互动的时间更长。
  2. 从各种网站获取值可能需要长达 10 秒(最多)。服务器在那个时间参与。如果我有 500 个负载,请考虑负载 高峰时段的访客/分钟。

优势:-

  1. 我的代码安全可靠
  2. 客户端的处理将是最少的。甚至可以在手机和其他设备上轻松工作。

我想在实际实施这些问题之前分析这些问题。谁能建议我应该为我的网站选择什么?哪种方法更适合我?

如果我的问题模棱两可,请发表评论。

JavaScript AJAX 性能 客户端服务器

评论

1赞 iJade 9/26/2012
只是出于好奇......eBay等抓取网站合法吗?
0赞 IdidntKnewIt 1/9/2015
你是网络抓取,看看snapdeal人的TOS。

答:

1赞 alexandernst 9/26/2012 #1

我不明白你为什么要采取“更容易出现浏览器错误”。如果您向浏览器发送正确的库/代码,Javascript 将完全按照您想要的方式运行。

您可以查看哪个浏览器正在执行请求,并向其发送正确的代码段(读作:如果您有一些代码可以在FF和Opera中工作,但不能在IE中工作,请编写该代码的两个版本,每组浏览器一个。 有一些库可以帮助您做到这一点。

此外,比较不是应该在服务器端进行的任何事情。所以,如果你的网站上有很多流量,那么客户端工作应该可以处理这种事情。

关于代码保护,你是对的。服务器端不会让任何人读取你的代码。因此,您必须确定服务器负载是否比阅读代码的人更重要。

另请记住,您可以对代码进行混淆处理。我知道这不是最好的解决方案,但它会让很多人不读它。

编辑:

让它在服务器端将使事情在所有设备上按预期工作(正如您已经说过的那样)。 但是,您需要做一些事情来保持服务器的负载不会达到 100%。

Chandra Sekhar Walajap已经告诉过你对结果使用某种缓存的好处。我个人会走得更远一点,因为你只是在抓取所有这些页面。

我会创建一个刮板,比方说,每 24 小时运行一次,并获取/抓取每个产品。然后我会把所有这些产品保存在某个地方(在数据库中读取或任何你想要的)。这样,当用户请求在产品 A 和 B 之间进行比较时,您就不需要获取/抓取所有网站,而不必在保存它们的地方查找这些产品并将它们展示给用户。

请注意,只有当您有很多用户比较大量产品时,这才会保留大量带宽。

另一方面,如果你有几个用户只搜索几个产品,那么制作这种解决方案根本不会给你带来好处,因为你知道,每 24 小时从所有站点获取所有内容都是大量的使用,无论是 CPU 还是带宽。

关于服务器负载:我不能说。它取决于太多的事情,几乎不可能说出来。你需要考虑你正在抓取的网站有多大,每个网站上有多少产品?您使用的是什么硬件?最好使用 cURL 制作一些简单的示例并从其中一个站点获取所有内容。然后看看这对性能有何影响并做出决定。

评论

1赞 Prashant Singh 9/26/2012
我在IE中遇到了几个问题。就像同时发出 20-30 个 Ajax 请求一样,我需要使用 CORS 来避免阻塞。许多浏览器(旧浏览器)不支持。进行顺序调用会大大降低引擎的性能
0赞 alexandernst 9/26/2012
好吧,如果你想支持非常旧的浏览器(仅供参考,IE8有一些基本的CORS支持),你唯一的选择是服务器端。
0赞 Prashant Singh 9/26/2012
您能否给我一个有关服务器端负载的估计,并在进行服务器端实施时使用一些提示来更新您的答案?
3赞 Chandra Sekhar Walajapet 9/26/2012 #2

首先,这是一个非常好的问题。

这完全取决于您的网站处理的数量和事务,如果您真的希望您的应用程序能够扩展,我希望您做对了!并从一开始就做对。

停止将业务逻辑放在客户端 ** 不要指望在他拨打比对电话时吃掉最终用户的网络带宽:)不要指望他有最好的带宽。

对服务器场进行负载平衡:确保服务器场已正确进行负载平衡,并且使用多线程而不是在单个线程中进行比较

缓存结果 ** 如果您在服务器端执行此操作,如果用户 A 和用户 B 要求相同的比较,您实际上可以从用户 B 的缓存中提取它,而不是再次执行这些请求。

可用性显示与用户比较的进度,而不是显示加载旋转图像:)

希望对您有所帮助

评论

1赞 Prashant Singh 9/26/2012
我正在努力将其转换为多线程设计。你能详细说明一下如何缓存吗?我们现在不使用任何数据库,我们从目标网站、流程和展示中抓取它。全部在 6-7 秒内完成
0赞 Chandra Sekhar Walajapet 9/26/2012
@PrashantSingh 您的服务器场是什么?以及您的应用背后的技术?
0赞 Prashant Singh 9/26/2012
它使用CURL来获取网页内容的简单PHP。从获取的数据中,我们剔除结果
0赞 Chandra Sekhar Walajapet 9/26/2012
我建议将处理后的数据缓存,而不是缓存 CURL 的结果。您可以尝试查看此内容以尝试在 php php-html.net/tutorials/creating-a-simple-php-cache-script 中缓存,但我建议您使用像 Memcache 这样的缓存提供程序,这样您缩放等也很容易