使用AJAX是否会大大提高服务器性能?


10

显然,AJAX改善了用户界面,但这是否也减轻了服务器负载?您会认为这样做是因为不必每次都提供整个页面,但是也许我没有考虑其他变量。

Answers:


14

这取决于您在做什么以及如何做。

  • 如果您要用AJAX请求替换整页加载(即仅当用户单击原本的整页加载时才执行AJAX调用),那么AJAX会减少服务器负载,因为(大概)您在做更少的处理,返回的次数更少数据。

  • 另一方面,如果要添加自动更新类型AJAX,该类型每隔几秒钟轮询一次服务器,则这可能会增加负载,具体取决于用户(如果用户一直按F5进行手动刷新,则可能不会增加服务器负载,但是大多数人通常几个小时都不会这样做)

  • 另一个AJAX优化是在滚动时仅加载更多数据。在这种情况下,如果用户没有完全向下滚动,则浪费了处理。

当然,实际上实现可能会偏向于任何一种结果,这些都是假设合理良好实现的典型结果。


真正的问题是,当您转向AJAX处理方式时会发生什么变化?通过迁移到AJAX还是将其分解成较小的部分,您是否能够消除以前浪费的工作?(并在此过程中增加开销)
SplinterReality

3

当然,它确实可以减少服务器负载。看此演示@ jsconf'09 -对于Facebook如何利用Ajax来做到这一点。

Ajax是异步的。服务器通信-您可以以多种方式使用它。人们使用它来将简单的JSON加载到实时Web以及介于两者之间的所有内容。

请记住,真正的挑战是客户端和服务器之间的平衡。努力使各方做好工作,以使系统得到优化,并且您将获得感知响应能力和真实速度的明显好处。


3

您还没有考虑其他因素-在大多数情况下,AJAX将增加服务器负载。在典型的非ajax方案中,用户每隔几秒钟或几分钟就加载一个大页面。是的,该页面对于服务器来说需要更多的工作,但是在请求恢复和服务其他请求之间有足够的时间。在AJAXified方案中,单页加载现在受到了许多小的打击,不断地冲击服务器并等待响应。

这有点像1000次割肉导致的死亡-没有一个请求本身如此之大,但是总重量却是致命的。尤其是当您开始考虑将这些小请求与整页请求的费用差不多时。在这两种情况下,您都可能正在整个Web应用程序管道中运行,访问数据库并坐在宝贵的HTTP连接上等待答案。

这是一个示例,说明ajax如何真正快速地在服务器上变得丑陋。让我们来看一个典型的“执行仪表盘”,其中包含4个小部件插槽。假设CEO喜欢右侧的完整销售报告,中间位置的收入最高的10个列表以及右侧的公司股价报告。假设我们将通过简单的ajax远程请求来执行此操作。现在,不考虑样式表,图像和其他资产,您的页面现在需要针对服务器进行4次HTTP往返(主页面,每个仪表板报告)。所有这些都需要完整的Web堆栈才能执行-您将要使用Web框架访问数据库并渲染HTML,对吗?现在,将单个CEO乘以2000个远程用户,其中一些用户的连接不稳定。

相反,您可能只有一个服务器端页面,该页面执行并返回HTML框架以及数据(包含在页面内JSON中)以呈现报告。单个更大的连接,但在Web服务器上的总搏动较少,因为您没有处理4个请求,也没有分配4个管道,等等。


1
您能否举一个在AJAX中需要的小请求的示例,而在其他情况下则不需要?
2011年

1
当然-您是否注意到在这个网站上它如何告诉您有人是否已经回答了问题?这是通过一个小的ajax请求来完成的。。。
Wyatt Barnett

@WyattBarnett AJAX不一定意味着轮询。您可以简单地用部分页面加载替换整个页面加载。在许多情况下,这可能会增加服务器负载,但我认为在“大多数情况下”并非如此。
戴维8年

嗯,在我看来,该示例更像是您可以在AJAX中完成的其他工作,而不是需要更多服务器请求的工作。我认为OP尚不清楚他是指“做一件完全相同的事情时表现出更高的性能”还是他的意思是“充分利用AJAX时表现出更高的性能”
猛烈抨击2011年

1
请注意,轮询/长轮询只是AJAX的子集(如此处所述),也称为“ comet”。Websockets支持“真正的”免轮询推送或服务器端(服务器启动)的AJAX,将大大减少此类功能所需的资源浪费。
艾伦·H。

2

如果您正在使用AJAX替换服务器原本会执行的工作,则可以,这将提高服务器性能。但是,您可能已经设计了一些东西,以使服务器仍在做同样的事情,而现在AJAX所发生的一切都在服务器已做的事情之上。

通常,这与UI相关,因为您不应该在客户端执行任何其他操作。基本上,服务器为支持UI所做的任何事情(例如,响应用户输入以不同的布局重新加载页面)都将使用JavaScript。


0

如果HTML渲染是应用程序服务器性能配置文件的重要组成部分,那么将HTML渲染图移至客户端可能是应用程序服务器上的性能优势。

但是,如果HTML呈现只是应用程序服务器性能配置文件的一小部分,则更多的请求通常将意味着更多的行程遍历,更多的查询,应用程序服务器上的所有一切,性能损失。

当然,了解您的特定情况的唯一方法是尝试一下。


1
我很难想到使用AJAX会比不使用AJAX进行相同操作引起更多请求的任何示例。你能给个例子吗?
2011年

1
HTML始终在客户端呈现。
乔纳斯(Jonas)

1
大概他打错了,意思是“操纵”而不是“渲染”
嘲笑2011年

从视图/模板开始,将其与变量组合,然后从中渲染原始HTML。
yfeldblum 2011年

在以下情况下,与没有AJAX的情况相比,与不做相同的事情相比,AJAX会引起更多的请求:您的主布局有“孔”,但这些孔随这些孔传递到了浏览器,而这些孔是使用AJAX“填充”的。参见例如Facebook。
yfeldblum 2011年

0

您必须考虑实施解决方案的最佳方法。一个简单的非动态表单不需要ajax,添加它实际上可能会损害性能。如果您的问题很糟糕,那么世界上所有的ajax优化都将无法为您带来可接受的性能提升。

如果您的服务器工作过度,则需要找出原因。

如果您遇到了很多热门问题,那么ajax将无法解决该问题,您需要更多容量。添加ajax只会增加服务器必须处理的请求数量。

如果页面复杂,您应该查看客户端是否可以做些什么来减少服务器的负载。如果您的页面是动态的,但是确实有有限的数据包缓存,那么进行客户端调整可能会更好。

有时Ajax会有所帮助。当您使用动态数据处理复杂表格时,ajax胜出。但是,如果查询很复杂且运行时间很长,那么ajax仍然无法解决您的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.