AJAX调用已经使Web上的用户交互向前迈出了一大步:我们不再需要重新加载页面以响应每个用户输入。
使用AJAX,我们可以在服务器上调用特定的过程并根据返回的值更新页面,从而为我们的应用程序提供快速的交互性。
AJAX调用没有涵盖的是来自服务器的更新,这是现代实时和协作Web所需要的。
这种对更新的需求涵盖了一些常用用例,比如包括协作编辑文档的几个用户,还有以在新闻网站发布实时通知给数百万读者的信息。
除了AJAX的响应请求之外,还需要另一种消息模式,一种可以在任何规模下工作的模式,它是PubSub(如“发布和订阅”)是一种已建立的消息传递模式,可实现此相互通知的目的。
在AJAX之前,网页上的交互性非常笨重,任何用户交互都需要在服务器上生成页面的更新版本,发送到浏览器并才能呈现给我们。在这个模型中,交互的基本单位是页面,无论浏览器发送到服务器的是什么,无论所需的更新有多小,结果总是一个要更新全新的页面,这浪费了线路流量和服务器资源,对用户而言更是缓慢而痛苦的过程。
AJAX通过对事物进行粒化来解决这个问题:现在可以发送数据,仅接收由其触发的交互的结果,然后根据此响应更新页面的相关部分。使用AJAX,我们从一个通用调用(“给一个新页面”)到多个特定于交互的调用。使用AJAX,我们在服务器上进行了远程过程调(RPC)。
使用AJAX调用服务器要做的事情要少得多,而且线路上的流量也会减少。
虽然AJAX帮助用户页面解决很多,但是我们也发现了它的不完美地方。
下面有一个实例:
用户可以投票选出三种冰淇淋口味中的任何一种。
使用AJAX,点击投票可能会导致这样的事情:
然后,根据AJAX调用的返回,我们将更改用户投票的风格的投票计数,其实我们已经从渲染整个页面到更新单个DOM元素。
这意味着服务器要做的事情要少得多,而且线路上的流量也会减少。我们得到的是当前页面计票更改而不是整页刷新。最重要的是,它可以快速更新界面,从而显着改善用户体验。
在上面实例中,如果应用程序有很多用户投票,通常是并行投票。投票数将根据用户的组合互动而变化,由于用户交互触发的AJAX调用将是与服务器的唯一连接,因此用户在首次加载应用程序时会看到当前的投票数,但是其他在之后投票当前用户就不值得投票的结果,因为AJAX不是实时更新后端数据的变化。
因为AJAX使我们只能更新页面以响应页面上的用户操作,它无法解决来自服务器的直接更新问题,所以总结AJAX不完美之处:没有将信息从服务器推送到浏览器。
因此,我们在AJAX无法完成的任务时就会使用更先进的技术,比如PubSub,websocket,RPC等等。
领取专属 10元无门槛券
私享最新 技术干货