页面上的AJAX加载不是坏事吗?

时间:2009-05-07 13:50:27

标签: javascript ajax

我在nerd dinner和其他网站上看过这个。在页面加载(在JavaScript中,通过浏览器),AJAX请求将从提供初始页面的同一服务器获取一些数据。数据量很小,没有任何技术限制,否则会阻止他们首先删除这些数据。

这不是一件坏事吗?这似乎浪费了一个AJAX调用,因为他们可以将这些数据作为JavaScript与页面的其余部分一起呈现。

我的银行使用AJAX提取信息以构建“转帐基金”表单的表单元素。这个信息是几千字节,一个AJAX请求似乎有点过分。

在书呆子晚餐中,至少在我看到的MIX09 video中,他们正在查询(通过AJAX)一组晚餐,以便在页面加载时在地图控件上呈现。

我能理解,如果我们讨论的是大量的数据,否则这些数据需要很长时间才能下降,但如果它低于10-15kb,用标记拉下数据会不会更好?他们这样做是为了避免缓存数据吗?

编辑:我提议的是,不是打开一个AJAX调用服务器来下载客户端onload上的json数据,只需让asp.net(或其他)在页面内容中呈现json。呈现其他一切。我只是觉得需要指出这一点,因为实际的客户端代码将完全相同,除了json变量的来源。

13 个答案:

答案 0 :(得分:15)

一般来说,根据我的经验,您希望避免在您的网页上使用任何Javascript。我的意思是,如果你可以在服务器端而不是使用Javascript,那么你应该这样做。您的页面加载速度更快,您将获得更好的用户体验。

有时可能会有更多工作,特别是如果在以后的页面中使用相同的有载AJAX调用。您可能通过在服务器端执行代码来复制代码。因此,在性能和想要编写的代码之间需要权衡。

另一个方面是Javascript有时用于防范机器人,刮刀,恶意软件(如钥匙等等)等,以确保您的安全性和网站的安全性。这可能意味着,例如,使用Javascript加载页面元素只是因为它使得更难以破解或刮擦。你不是不可能,只是更难。

答案 1 :(得分:8)

后退按钮

如果用户单击后退/前进,则不会再次调用服务器,因为它将内容从缓存中拉出。但是,通过客户端页面加载的ajax调用,服务器将始终被调用。

答案 2 :(得分:3)

我会编写初始页面服务器端以包含第一个可能的AJAX调用,然后在之后使用实际的AJAX。您希望在最终用户身上做更多工作,以便让最终用户更快地完成工作。

我见过一个使用AJAX作为主要内容的网站。当侧面处于负载状态时,它将显示导航栏,然后你再看不到任何东西5秒,因为它加载了一个AJAX调用,你已经失去了你的位置。这真令人讨厌。

答案 3 :(得分:3)

我在加载时使用AJAX主要是为了避免重复工作并保持简单 - 如果我需要进行客户端渲染以进行更新,最好使用相同的代码进行初始渲染。

使用javascript生成的所有内容都会对搜索等产生影响,但只要您在设计页面时意识到这一点,就不会有太多问题。

答案 4 :(得分:3)

一般来说,你是对的,如果你最初从服务器上拉页面,为什么还要再去旅行以获得更多数据呢?但是,如果数据很大,那么您可能还有页面加载,以便最终用户可以看到某些内容,然后提取数据。

由于在页面上经常使用类似的数据检索方法,因此数据可能会被拉到Ajax。如果要进行一些Ajax加载,为什么要为初始加载编写单独的数据拉取机制。

另外,永远记住,演示就是这样,演示。书呆子晚餐的人可能更感兴趣的是展示如何在MVC中使用AJAX而不是其他优先事项。

无论如何,好抓。

答案 5 :(得分:2)

这就是为什么我能看到这样做的原因:

执行AJAX调用以加载初始数据可以作为验证Javascript是否已打开以及后续AJAX调用是否有效的方法。否则会发生的情况是,客户端使用JavaScript完成的第一次服务器调用不起作用,如果没有意识到安全设置是原因,用户可能会感到沮丧的原因。

答案 6 :(得分:2)

我同意亚当。如果你有一个很复杂的页面,可能需要你的服务器一段时间来渲染,但它只有一些动态内容,那么你可以通过积极缓存HTML并使用Ajax加载动态内容来获得巨大的性能优势。

作为一个例子,想象一下应该在角落里显示用户名字的网站的主页面。访问您网站的每个人都会访问该网页,因此您可以为HTML管理的缓存越多越好。通过使用Ajax填写用户名,您可以为每个人提供相同的可缓存HTML版本,并分别提供更小的动态内容。

如果您正在使用速度非常快的服务器技术 - 可能的情况下使用Ruby on Rails,则可达性变得更加重要。通过像Varnish或Squid这样的代理服务页面可以获得良好的服务器端速度提升,该代理保留了每个服务页面的缓存副本。在缓存变得陈旧之前,将从代理的缓存而不是服务器代码提供对相同资源的后续请求。

答案 7 :(得分:1)

我不知道请求/响应的大小在这里是多么相关。是否使用AJAX更多的是可用性问题,这里有一个因素是渲染初始页面的时间。用户不想等待。如果您只需要2秒钟来计算服务器端的页面元素,那么您一定要考虑先发送没有该元素的页面,然后通过ajax获取该元素。即使该页面元素只有几个字节。

答案 8 :(得分:1)

加载页面时的AJAX调用是为了保持表示与内容/数据的分离。

浏览器可以缓存演示文稿(HTML页面),AJAX调用只检索数据以更新UI。

这可以带来非常干净的分离以及一些性能优势。实际上,您通过网络传输的信息较少,因为您没有传递HTML标记汤 - 只是您拥有数据的任何表示形式。

答案 9 :(得分:1)

这不是主要问题的大小,而是可用并行请求时隙的额外请求延迟/阻塞。

答案 10 :(得分:1)

在页面加载时针对Ajax

  • 使用服务器上的额外可用连接来处理AJAX请求。
  • 尝试完成通话时,您的页面可能会空闲。
  • 搜索引擎无法索引。

对于页面加载时的Ajax

  • 便利。将数据保留在页面之外。
  • 便于更改数据。
  • 能够实现Ajax响应的缓存。
  • 创建许多'小部件',每个小部件都处理自己的电话。

这很大程度上还取决于您的建筑物的位置。您希望小心更大的站点,以便在页面加载时不依赖大量的小Ajax调用。

答案 11 :(得分:0)

执行此操作的最佳理由是为内容提供单一来源:而不是获取嵌入在页面中的第一个实例,以及来自Ajax的更新实例,现在每个实例都来自Ajax 。

换句话说:按照自己的方式行事是双重工作,有可能(由于错误)两个版本的行为不同。

答案 12 :(得分:0)

最好的解决方案似乎是在服务器端调用Ajax函数并在pageload上加载json内容。这可以保持一致性并避免启动时的额外连接。