使用jQuery进行AJAX调用的优缺点是什么?

10

使用jQuery的ajax调用可以在不刷新页面的情况下使生活变得非常酷炫...但仍然有兴趣了解使用jQuery进行ajax调用的一些优缺点...

由于我在我的网站中使用ajax调用来进行所有添加、编辑和删除操作,目前它运行得非常好...但了解缺点将使在部署期间更加轻松...


你是在特别询问 使用jQuery的ajax,还是一般的ajax技术? - bzlm
4个回答

8

优点:

在许多情况下,网站上相关页面之间存在很多共同内容。使用传统方法,每次请求都需要重新加载该内容。然而,使用Ajax,Web应用程序可以只请求需要更新的内容,从而大大减少带宽使用和加载时间。

使用异步请求允许客户端的Web浏览器UI更加交互,并快速响应输入,页面的各个部分也可以单独重新加载。即使应用程序在服务器端没有改变,用户可能会感知到应用程序更快或更具响应性。

使用Ajax可以减少与服务器的连接,因为脚本和样式表只需要请求一次。[12]

可以在整个网站中维护状态。JavaScript变量将持久存在,因为主容器页面不需要重新加载。

缺点:

由于它们的动态特性,与静态页面相比,Ajax界面通常更难开发。使用连续的Ajax请求动态创建的页面不会自动向浏览器的历史引擎注册,因此单击浏览器的“后退”按钮可能无法将用户返回到Ajax启用页面的早期状态,而是可能将其返回到最后一个完整页面之前访问的页面。解决方法包括使用不可见IFrames来触发浏览器历史记录中的更改,并在运行Ajax时更改URL的锚部分(在#后面),并监视它以进行更改。
动态网页更新还使用户难以将特定状态的应用程序添加到书签中。存在解决此问题的解决方案,其中许多使用URL片段标识符(#后面的URL部分)来跟踪并允许用户返回到给定状态的应用程序。
由于大多数网络爬虫不执行JavaScript代码,公共可索引的Web应用程序应提供替代方法来访问通常使用Ajax检索的内容,以允许搜索引擎对其进行索引。
任何浏览器不支持JavaScript或XMLHttpRequest,或者仅禁用此功能的用户都无法正确使用依赖于Ajax的页面。同样,手机、PDA和屏幕阅读器等设备可能没有所需技术的支持。能够使用Ajax的屏幕阅读器仍然可能无法正确读取动态生成的内容。让用户执行功能的唯一方法是回退到非JavaScript方法。这可以通过确保链接和表单可以正确解析并且不仅依赖于Ajax来实现。在JavaScript中,可以使用“返回false”停止表单提交。
同源策略防止某些Ajax技术跨域使用,尽管W3C有一个XMLHttpRequest对象的草案,可以启用此功能。
与其他Web技术一样,Ajax具有其自己的漏洞集,开发人员必须解决这些漏洞。熟悉其他Web技术的开发人员可能需要学习新的测试和编码方法来编写安全的Ajax应用程序。
Ajax动力界面可能会大大增加向Web服务器及其后端(数据库或其他)生成用户请求的数量。这可能导致更长的响应时间和/或额外的硬件需求。

1
这些听起来都像是优点... - mpen

8
最好使用AJAX的场景是在发送小负载的情况下。以下是一个简单的例子。
我加载了一个包含股票信息的页面。它有图表、公司信息和股价显示。每30秒,我都会发起一个AJAX请求来获取更新后的股价,并将其更改到页面上。
如果没有使用AJAX,我可能会决定每30秒刷新整个页面,但使用AJAX,我只需要发起轻量级请求来获取我需要的少量信息。
使用AJAX提交表单并不总是最好的选择。除了没有真正为您提供比正常提交表单更明显的优势之外,还会打破浏览器历史记录(尽管一些浏览器现在在历史记录中包含JavaScript“状态”作为页面)。
使用AJAX时,您需要处理告知用户是否出现问题的任务。您可以通过指定错误时应该发生什么来使用jQuery来完成此操作,但许多人忘记这样做,最终用户对任何问题都毫不知情。
要注意的其他问题是可能会阻止事件触发的任何JavaScript错误,或者如果JavaScript被禁用,则在添加AJAX代码之前确保表单可以正常提交是最安全的选择。

5

嗯,jAndy似乎已经掌握了优势,而您似乎已经意识到这些优势,否则您就不会使用它。

缺点是,如果您正在加载整个页面(是的,通过一些更多的JS技巧也可以解决此问题),它会破坏您的浏览器后退按钮。但是,如果您的整个网站都依赖于ajax,则在禁用JS时可能无法正常工作。此外,它不会产生非常好的URL。如果您想将朋友链接到ajax密集型网站中的特定页面,并且假设您已经通过JS技巧使其成为可能(修改#字符后的URL),它仍然必须首先加载主页,然后等待JS启动,然后才能ajax加载您真正感兴趣的内容。我发现这实际上会导致更慢的响应时间,我完全不喜欢。我喜欢ajax,但我不喜欢它用于全页面内容。


2

历史悠久的浏览器和规范之间的战争导致了真正的混乱。作为开发人员,当我们意识到我们花费更多时间解决跨浏览器特定问题而不是解决编程业务逻辑/问题时,我们就会理解这一点。

+ve

  1. 没有跨浏览器的痛苦
  2. 您可以相信好的开发人员已经花费了大量的时间和精力来制作库
  3. 您可以更专注于实际问题而不是副作用
  4. API很好。如果有人告诉UI开发人员ajax、HTTP、JavaScript等等…….非常简单的函数总是很棒Ajax.call(url, callbackfunction, param)。这就是我们大多数时候正在寻找的。
  5. 节省了很多时间 :) ,您可以享受派对,而不需要加班到深夜

-ve

  1. 您将在平稳的表面上玩耍,并避免头疼,这对我们作为软件工程师来说是很好的
  2. 如果您使用一些分析工具,您会发现在该函数内进行数十个调用以使用库执行操作,这需要消耗几毫秒。考虑到开发期间我们节省的时间,这并不是什么大问题
  3. 您必须信任库所说的内容。因此,我建议只使用好的库。而且,您正在使用最好的之一

希望有所帮助,


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接