客户端通知,我应该使用 AJAX 推送还是轮询?

当涉及到客户端通知时,有两种主要的技术可以选择:AJAX推送和轮询。本文将深入研究这两种方法,并探讨它们的优缺点以及何时使用哪种方法。

AJAX推送

AJAX推送(也称为Comet)指的是服务器使用长连接与客户端保持打开的网络连接,并在有数据更新时立即向客户端推送消息。以下是一个简单的例子,展示如何使用AJAX推送:

-------- ---------------- -
  --- ------ - --- -----------------------
  ---------------- - --------------- -
    --------------------- ------ -- ------------
  --
-

在上面的代码中,我们使用了 EventSource 对象来建立一个与服务端的长连接,然后当服务端有数据更新时,它会自动触发 onmessage 事件,从而调用回调函数并接收新的消息。

优缺点

AJAX推送的主要优点是实时性很高,因为数据可以立即被推送到客户端,而不需要等待轮询周期。此外,由于只有在有数据更新时才会发送请求,所以性能比轮询更好。

然而,AJAX推送也有一些缺点。首先,它需要使用长连接与服务端保持连接,这会占用服务器资源。其次,AJAX推送不是所有浏览器都支持,特别是旧版的浏览器可能无法处理长连接,这可能会导致兼容性问题。

何时使用

如果您需要实时更新数据并且您的应用程序需要高度可扩展性,则应该选择AJAX推送。但是,如果您的应用程序只需要在特定时间间隔内进行数据轮询,那么另一种方法可能更好。

轮询

轮询是指客户端以固定的时间间隔向服务端发送请求,并检查是否有新数据。以下是一个简单的例子,展示如何使用轮询:

-------- -------------- -
  ---------------------- -
    -------------- -------------- -
      --------------------- ----- -- ------
    ---
  -- ------
-

在上面的代码中,我们使用 setInterval 函数每秒钟发送一个GET请求到 /data 端点,然后在获取到数据后调用回调函数来处理数据。

优缺点

轮询的主要优点是兼容性好,因为它适用于所有类型的浏览器。此外,由于它只在需要时才发送请求,因此可以控制占用服务器资源的数量。

然而,轮询也有一些缺点。首先,它不够实时,因为它必须等待下一个轮询周期才能获取数据。其次,如果轮询间隔太短,将占用服务器资源。

何时使用

如果您的应用程序只需要在特定时间间隔内进行数据轮询,并且您希望确保兼容性,则应该选择轮询。但是,如果您需要实时更新数据,则另一种方法可能更好。

结论

无论您选择哪种技术,对于客户端通知来说,都有优缺点。AJAX推送适用于需要实时更新数据并且需要高度可扩展性的应用程序,而轮询则适用于需要数据轮询,并要保持高兼容性的应用程序。

当然,这不是一个非黑即白的选择。如果您的应用程序需要同时支持实时更新和数据轮询,那么可以结合使用这两种技

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/27815


猜你喜欢

  • 在路由更改时取消 AngularJS 中的 $timeout

    随着 Web 应用程序变得越来越复杂,前端开发人员需要使用各种工具和技术来管理和维护应用程序。AngularJS 是一个流行的框架,它提供了一系列功能和指令,使开发人员能够轻松地构建复杂的单页应用程序...

    7 年前
  • 用 JavaScript 下载图片

    JavaScript 是一种广泛使用的前端编程语言,它可以帮助我们在网页上实现各种交互效果。其中一个常见的需求就是下载图片。本文将介绍如何使用 JavaScript 下载图片,并提供详细的示例代码。

    7 年前
  • 在 AngularJs 服务中注入 dateFilter

    AngularJS 是一个强大的前端框架,它允许开发人员构建复杂的单页应用程序。在这些应用程序中,数据绑定和过滤器是非常重要的组成部分。其中,dateFilter 过滤器可以格式化日期并将其显示为可读...

    7 年前
  • 将2:1全景图转换为立方体贴图

    立方体贴图是一种广泛用于3D图形和虚拟现实的技术,可以让用户从不同的角度观看场景。将2:1全景图转换为立方体贴图是一种常见的前端操作,本文将介绍如何使用JavaScript进行这个过程。

    7 年前
  • 使用jQuery全选复选框

    在开发前端应用程序时,常常需要使用复选框来让用户选择多个选项。当复选框数量变得很多时,手动一个一个地勾选这些复选框会变得非常麻烦和耗时。这时候,我们可以使用jQuery编写代码来实现一键全选/取消全选...

    7 年前
  • 通过 jQuery animate 函数减缓回到顶部的滚动事件

    在前端开发中,我们经常需要添加“回到顶部”的按钮,帮助用户快速返回页面顶部。通常情况下,我们会使用浏览器原生的滚动事件 window.scroll 和 window.scrollTo 实现该功能。

    7 年前
  • Google Analytics pageTracker 未定义的问题

    当你在使用 Google Analytics 进行网站分析时,可能会遇到 "pageTracker is not defined" 的错误提示。这意味着你在代码中尝试调用 pageTracker 对象...

    7 年前
  • 不再能使用 ddescribe 或 iit

    在前端开发中,我们经常会使用 Jasmine 这样的测试框架来进行单元测试。然而,在最新版本的 Jasmine 中,一些我们熟悉的函数 ddescribe 和 iit 已经被弃用了。

    7 年前
  • 在 ReactJS 中获取视口/窗口高度

    在前端开发中,在某些情况下需要获取屏幕的高度,例如在实现响应式设计时需要根据设备屏幕高度来适配页面布局。本文将介绍在 ReactJS 中如何获取视口/窗口高度,以及一些相关的技术和指导意义。

    7 年前
  • D3js从数组中获取数据而非文件

    D3.js是一个流行的JavaScript库,用于创建动态和交互式的数据可视化。通常情况下,我们会从外部文件中获取数据,例如CSV文件或JSON文件。但是,在某些情况下,这可能不是最好的选择。

    7 年前
  • Passport-Facebook 认证不能为所有 Facebook 帐户提供电子邮件

    在使用 Passport-Facebook 进行身份验证时,您可能会发现对于某些 Facebook 帐户,无法获取其电子邮件地址。这通常是因为 Facebook 用户没有授权将其电子邮件地址公开给第三...

    7 年前
  • JavaScript中的Enum Flags

    在JavaScript中,枚举(Enum)是一种用于表示固定集合的类型。然而,在某些情况下,我们需要同时表示多个值,这时候就可以使用枚举标志(Enum Flags)。

    7 年前
  • 如何使用 jQuery 将分钟转换为小时/分钟并将各种时间值相加?

    在前端开发中,我们常常需要将时间数据进行计算和格式化。本文将介绍如何使用 jQuery 进行时间值的格式转换和计算。主要涉及以下两个方面: 如何将分钟转换为小时/分钟? 如何将多个时间值相加? 1...

    7 年前
  • Uncaught TypeError: $template.get is not a function 解决方案

    在前端开发过程中,我们可能会遇到 $template.get is not a function 的错误提示。这个错误通常出现在使用 AngularJS 或者类似框架的时候,意味着代码中的某个地方调用...

    7 年前
  • Repeating setTimeout

    在前端开发中,我们常常需要重复执行某个操作,例如定时刷新页面内容、轮播图片等。在 JavaScript 中,可以使用 setTimeout 函数来实现定时执行某个函数的功能。

    7 年前
  • Call break in nested if statements

    在 JavaScript 中,if 语句是一种用于根据某些条件执行特定代码块的结构。嵌套 if 语句允许在 if 语句中嵌套另一个 if 语句。但在某些情况下,嵌套 if 语句可能会导致代码难以理解和...

    7 年前
  • 用 JavaScript 检测 HTTPS

    在现代的 Web 应用程序中,HTTPS 已经成为了一种标准的安全协议,以保护用户和服务器之间的通信。在开发过程中,我们可能需要检测当前页面是否使用了 HTTPS 协议。

    7 年前
  • Adding external JavaScript file to Magento

    在Magento中添加外部JavaScript文件可以使网站更具互动性和可视化效果。本文将介绍如何添加外部JavaScript文件到Magento,并包含示例代码以指导读者操作。

    7 年前
  • Rails 4: 在特定页面禁用 Turbolinks

    Turbolinks是Rails的一个默认特性,它通过JavaScript将新页面的内容加载到当前页面的DOM中,以提高网站的速度和流畅度。但有时候你可能需要在某个页面禁用Turbolinks来避免一...

    7 年前
  • JavaScript:在指定时间后调用函数

    JavaScript 是一门广泛应用于前端开发的编程语言。在前端开发中,经常需要使用定时器来实现某些功能,比如在一定时间后执行某些操作。本文将介绍如何在 JavaScript 中使用 setTimeo...

    7 年前

相关推荐

    暂无文章