JavaScript alert() 函数会提前系统时间 12ms

在编写网页或 Web 应用程序时,我们经常需要使用 JavaScript 来处理用户交互和显示行为。其中一个常见的函数是 alert(),它可以在页面上弹出一个警告框来向用户展示一些信息。

然而,你可能没有注意到 alert() 在执行时会导致系统时间提前了 12 毫秒。

原因分析

这个现象的原因是 JavaScript 引擎和操作系统之间的交互方式。在许多操作系统中,时间分辨率限制在 15 毫秒(ms)左右。也就是说,操作系统每隔 15ms 就会更新一次系统时间。当 alert() 函数被调用时,它会暂停 JavaScript 引擎的执行,并等待用户响应。而由于时间分辨率的限制,如果 alert() 被调用时距离下一个系统时间更新时间不到 15ms,那么它就会等待直到下一个更新时间,导致时间提前了 15ms。不过,实际测试发现其提前时间约为 12ms。

学习与指导意义

这个现象虽然看起来微不足道,但在某些情况下却可能会对我们的程序产生影响。例如,如果我们需要测量代码的性能,使用 Date 对象进行时间戳记录时,由于 alert() 函数的干扰,可能导致数据不准确。因此,在测试时应避免使用 alert() 函数。

另外,基于本现象,一些技术人员开发了一些可以通过提前或推迟系统时间来触发某些行为的工具和库。例如,Sinon.js 这个 JavaScript 的测试工具库就可以对时间进行模拟和控制。

示例代码

下面是一个简单的测试代码示例,用于测量执行一段耗时较长的任务时的性能:

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

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

如果在上述代码中添加一个 alert() 调用,则会使得执行任务的时间似乎变短了 12 毫秒。

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

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

因此,在测试代码性能时,应该避免使用 alert() 函数来干扰时间的准确度。

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


猜你喜欢

  • 在 HTML 标签中更好的调用 JavaScript 函数

    在前端开发中,我们经常需要在 HTML 标签中调用 JavaScript 函数来触发某些操作或处理逻辑。但是,不同的调用方式可能会对代码的可维护性和性能产生影响。本文将介绍一些更好的方式来在 HTML...

    7 年前
  • 在 NodeJS 中压缩代码有意义吗?

    在前端开发中,常常使用代码压缩来减少文件大小、提高页面加载速度。那么在 NodeJS 中,对于服务器端的脚本代码,是否也有必要进行压缩呢?本文将介绍 NodeJS 中代码压缩的实践意义,并给出一些相关...

    7 年前
  • Browserify: 如果需要,则使用module.exports暴露全局变量

    在前端开发中,模块化编程已经成为了一种必要的技术。Browserify是一个非常流行的工具,它允许我们在浏览器环境下使用Node.js模块。 当我们使用Browserify的时候,我们需要考虑如何在模...

    7 年前
  • 比较ECMA6集合的相等性

    ECMA6提供了Set对象,它是一种无序且不重复的集合数据类型。在前端开发中,我们经常需要比较两个Set对象是否相等。但是,由于Set对象是无序的,直接使用等于运算符(===)进行比较会得到错误的结果...

    7 年前
  • JavaScript "me" = "this", why?

    在JavaScript中,关键字"this"是一个非常重要的概念。它允许您引用当前对象,并在运行时动态地确定上下文。但是,对于初学者来说,理解"this"的工作原理可能会很困难。

    7 年前
  • Angular Session 超时和管理

    Session 管理是 Web 应用程序中非常重要的一部分。当用户在一段时间内没有使用应用程序时,他们的会话可能会超时并自动注销。这种情况下,应用程序需要向用户提示重新登录或者重置会话。

    7 年前
  • 如何在运行时更改/删除 CSS 类定义?

    CSS 是前端开发中必不可少的一部分,它可以帮助我们创建漂亮的界面和交互。有时候,我们需要动态地更改或删除已经定义的 CSS 类,以实现动态效果。本文将介绍如何在运行时更改或删除 CSS 类定义。

    7 年前
  • 递归遍历对象(树形结构)的方法详解

    在前端开发中,我们经常需要处理一些树形结构的数据,例如菜单、文件夹等。针对这类数据,我们通常需要使用递归来遍历整个树形结构。本文将介绍如何使用递归来遍历树形结构,并提供相关示例代码。

    7 年前
  • D3.js 数据更新与图表更新

    D3.js 是数据驱动的 JavaScript 可视化库,它能够帮助我们在前端界面中呈现数据。本文将详细介绍如何使用 D3.js 来实现数据更新和图表更新。 数据更新 在使用 D3.js 时,我们可以...

    7 年前
  • AngularJS中指令模板函数的好处

    在AngularJS中,指令是一种非常强大的功能,可以扩展HTML并在应用程序中创建自定义组件。而指令模板函数是指令定义中一个重要的属性,它定义了指令如何渲染视图。

    7 年前
  • iOS 9 Safari 中打开 Bootstrap 模态框时屏幕缩放的解决方案

    在 iOS 9 的 Safari 浏览器中,当打开一个使用 Bootstrap 框架实现的模态框时,有可能会出现页面无法正常显示、屏幕自动缩放等问题。这是因为 Safari 在 iOS 9 中对 me...

    7 年前
  • 使用 AWS SDK for Node.js 将二进制文件上传到 S3

    在前端开发中,我们经常需要将用户上传的文件存储到云存储服务中。AWS 提供了一种名为 Amazon S3 的云存储服务,它可以方便地存储和检索任何类型的对象,包括二进制文件。

    7 年前
  • 如何在不刷新页面的情况下更改浏览器地址栏 - HTML/Javascript

    当用户与您的Web应用程序交互时,快速和无缝地更新URL是一个关键的要求。更改浏览器地址栏是一种有效的方式来实现这一目标,但默认情况下,更改URL会导致页面重新加载。

    7 年前
  • Knockout JS - CSS绑定带有中划线的类名

    Knockout JS - CSS绑定带有中划线的类名 Knockout JS是一款流行的前端JavaScript库,它可以轻松地将数据模型与UI元素绑定在一起。其中一个核心功能是CSS绑定,它允许开...

    7 年前
  • 使用图像处理实现类似 Gmail 的动态 Favicon

    作为前端开发人员,我们都知道如何使用 favicon 来为网站添加一个小图标。但是,在某些情况下,我们可能需要动态更改这个 favicon。例如,当有未读消息时,Gmail 会在 Favicon 上显...

    7 年前
  • JQuery Post 发送表单数据而不是 JSON 格式数据

    在前端开发中,经常需要使用 AJAX 技术向服务器发送请求并接收响应。JQuery 是一款广泛使用的 JavaScript 库,其中提供了方便易用的 AJAX 接口。

    7 年前
  • 如何克隆或重新分派DOM事件?

    在前端开发中,我们经常需要处理 DOM 事件。有时候我们需要在代码中拦截并修改已有的事件,或者生成新的事件并将其分派到 DOM 树上。这时候,我们就需要了解如何克隆和重新分派 DOM 事件。

    7 年前
  • 如何让AngularJS输出转义后的HTML [重复]

    在前端开发过程中,我们经常需要将用户输入的文本呈现到页面上。但是如果不对用户输入进行处理,可能会引发安全问题,如跨站脚本攻击(XSS)。为了防止这种情况发生,我们需要对用户的输入进行转义处理。

    7 年前
  • AngularJS $http 和进度条

    在前端开发中,我们通常需要使用 Ajax 与后端进行数据交互。AngularJS 提供了 $http 服务来方便地发送 Ajax 请求。本文将介绍如何使用 $http,并结合进度条来优化用户体验。

    7 年前
  • JavaScript中是否有用于删除未使用方法的工具?

    在JavaScript开发中,很容易写出一些未被使用的代码,包括未使用的方法。这些未使用的代码不仅占用了宝贵的存储空间,还可能减慢加载速度和执行效率。因此,我们需要一个工具来删除这些未使用的方法,以提...

    7 年前

相关推荐

    暂无文章