Web响应的提高

   想象一下,如果用户在页面上触发一个点击事件,结果反应延迟比较明显,这将是一个令人沮丧的事情。而造成这个问题的原因就是响应延迟。

浏览器UI 线程

  大家都知道浏览器的UI线程,大多数浏览器都是一个独立的进程来处理任务。而这个进程被两个任务共享即JavaScript执行任务和UI更新任务,也就是说任何时刻,这两个任务只有一个可以执行。这样就造成JavaScript在执行的时候,用户界面会被“锁定”,不能响应任何操作。所以控制JavaScript的运行时间很重要。

  浏览器中,每个JavaScript任务和UI更新任务都会被加入到一个队列中,UI线程会按顺序执行队列中的任务。看下面的实例

上面代码中给button注册了一个click事件,当按钮被点击时会产生两个任务第一个是button外观的改变(button被按下,这是一个UI更新任务),第二个是执行handerClick函数(JavaScript任务),下面是执行的过程

  上面可以看出当按钮被点击后,队列中的任务状态,和UI进程的执行过程。

  浏览器限制

  浏览器对采取了限制,这样可以防止恶意的JavaScript程序无限占用UI进程。这就是常说的长时间脚本限制,其实就是一个脚本定时器。浏览器会设置一个限制,当执行时间达到这个限制,浏览器会终止它。可能会显示一下对话框。

  有两种方法测量程序运行的时间,第一种是统计总的JavaScript语句,第二种是统计脚本运行的总时间。Internet Explorer,在第4 版中,设置默认限制为5 百万条语句,Firefox 默认限制为10 秒钟,此限制存放在浏览器的配置设置中(在地址栏中输入about:config)键名为dom.max_script_run_time,Safari 默认限制为5 秒钟,此设置不能改变,但你可以关闭此定时,Chrome 没有独立的长运行脚本限制,替代以依赖它的通用崩溃检测系统来处理此类实例。

  多久才算“太久”? 

  如果整整几秒钟对JavaScript 运行来说太长了,那么什么是适当的时间?事实证明,即使一秒钟对脚本运行来说也太长了。一个单一的JavaScript 操作应当使用的总时间(最大)是100 毫秒。这个数字根据RobertMiller 在1968 年的研究。

  更复杂的是有些浏览器在JavaScript 运行时不将UI 更新放入队列。例如,如果你在某些JavaScript 代码运行时点击按钮,浏览器可能不会将重绘按钮按下的UI 更新任务放入队列,也不会放入由这个按钮启动的JavaScript 任务。其结果是一个无响应的UI,表现为“挂起”或“冻结”。

  用定时器让出时间片

 尽管你尽了最大努力,还是有一些JavaScript 任务因为复杂性原因不能在100 毫秒或更少时间内完成。这种情况下,理想方法是让出对UI 线程的控制,使UI 更新可以进行。让出控制意味着停止JavaScript 运行,给UI 线程机会进行更新,然后再继续运行JavaScript。于是JavaScript 定时器进入了我们的视野。

  定时器与UI 线程交互的方式有助于分解长运行脚本成为较短的片断。调用setTimeout()或setInterval()告诉JavaScript 引擎等待一定时间然后将JavaScript 任务添加到UI 列中。例如:

  function greeting(){
    alert("Hello world!");
  }
  setTimeout(greeting, 250);

  此代码将在250 毫秒之后,向UI 队列插入一个JavaScript 任务运行greeting()函数。在那个点之前,所有其他UI 更新和JavaScript 任务都在运行。请记住,第二个参数指出什么时候应当将任务添加到UI 队列之中,并不是说那时代码将被执行。这个任务必须等到队列中的其他任务都执行之后才能被执行

  定时器精度

  JavaScript 定时器延时往往不准确,快慢大约几毫秒。仅仅因为你指定定时器延时250 毫秒,并不意味任务将在调用setTimeout()之精确的250 毫秒后加入队列。所有浏览器试图尽可能准确,但通常会发生几毫秒滑移,或快或慢。正因为这个原因,定时器不可用于测量实际时间。

  在Windows 系统上定时器分辨率为15 毫秒,也就是说一个值为15 的定时器延时将根据最后一次系统时间刷新而转换为0 或者15。设置定时器延时小于15 将在Internet Explorer 中导致浏览器锁定,所以最小值建议为25 毫秒(实际时间是15 或30)以确保至少15 毫秒延迟。

时间: 2024-10-11 16:42:08

Web响应的提高的相关文章

web响应式!

今天学的新内容,web响应式,响应式一般都是用于手机软件界面比例适应,响应式分为三步:1.流式布局.2.媒体查询.3.media-queries,流式布局是可根据屏幕大小自动调节,媒体查询是做此事所需的最强大的工具,让我们使用百分比宽度来布局,然后在浏览器变窄到无法容纳侧边栏中的菜单时,把布局显示成一列,media-queries要在HTML中插入一句话:<meta name="viewport" content="width=device-width; initial

web响应式图片设计实现

.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { text-align: center; margin-top: 20px; margin-left: 10px; margin-bottom: 20px } a { cursor: pointer; text-decoration: none; color: gray } a:hover { text

Web响应式设计中应避免的八大误区

开发一个带有响应式交互设计的网站变得非常有意义,因为其可以在不同的设备运行,因此,你可以节约针对不同平台开发不同网站的成本.但是,要做最大限度相应的网页设计,有些误区你应当避免. 不要优先为桌面版设计 开发者通常会犯的一个常见错误是,但他们设计网站时优先考虑桌面版,因为在这些人严重,将基于桌面版的网站转变为针对其他设备的响应式web设 计 是件很轻松愉快的事情.但是,这个发生在计划规划阶段的错误本身会变成一个非常巨大的问题.甚至会造成返工,当然,大量的错误也会蔓延出来. 然而,基于移动设备开发网

将Web应用性能提高十倍的10条建议

导读 提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上的最高点.如果你的网站不能及时的响应,或者你的 app 不能无延时的工作,用户会很快的投奔到你的竞争对手那里. 举一个例子,一份亚马逊十年前做过的研究可以证明,甚至在那个时候,网页加载时间每减少100毫秒,收入就会增加1%.另一个最近的研究特别强调一个事实,即超过一半的网站拥有者在调查中承认它

将 Web 应用性能提高十倍的10条建议

提高 web 应用的性能从来没有比现在更重要过.网络经济的比重一直在增长:全球经济超过 5% 的价值是在因特网上产生的(数据参见下面的资料).这个时刻在线的超连接世界意味着用户对其的期望值也处于历史上的最高点.如果你的网站不能及时的响应,或者你的 app 不能无延时的工作,用户会很快的投奔到你的竞争对手那里. 举一个例子,一份亚马逊十年前做过的研究可以证明,甚至在那个时候,网页加载时间每减少100毫秒,收入就会增加1%.另一个最近的研究特别强调一个事实,即超过一半的网站拥有者在调查中承认它们会因

移动Web - 响应式布局开篇

用到的工具: FireFox浏览器 Sublime Text 2 响应式布局定义: 2010年,Ethan Marcotte提出,可查看原文: 通俗地讲就是:百份比布局,根据不同设备显示不同布局: 这次主要解决:传统的固定像数(px)相比: 不同显示设备,使用不同布局.例如:PC屏幕,显示3栏:手机,显示为1栏:用到media query(媒体查询),它的用法,例如: @media screen and (min-width: 481px) :屏幕最小481px,即大于481px适用: @med

DOM进行Web响应

1. 简单 HTML 页面 <html> <head> <title>Trees, trees, everywhere</title> </head> <body> <h1>Trees, trees, everywhere</h1> <p>Welcome to a <em>really</em> boring page.</p> <div> Come

web响应式设计技能大盘点

响应式网页设计已经变成新的web标准,许多公司已经接受了这个挑战,并且已经建立起了专门的网页设计方案(比如只针对移动端的开发)或者已经开始试图解决跨平台的响应式网页设计方案. 1.计划 与往常一样,计划总是要放在第一优先级的.一旦你在纸上开始解决你的设计难题,你就已经准备好建立你的站点了. 2.充分利用好原型软件 推荐使用Adobe Edge Reflow,它能让你使用媒体查询,在程序内设置断点并设计适配桌面电脑.平板电脑和手机的布局.然后,你可以将CSS复制到另一个像Adobe Dreamwe

黄聪:手机移动站Web响应式开发工具Viewport Resizer插件(360浏览器、谷歌Chrome浏览器兼容)

插件作用: 移植自@MalteWassermann的脚本,一个可以测试响应式布局的chrome扩展. 插件截图: 插件下载地址(需FQ): https://chrome.google.com/webstore/detail/viewport-resizer/kapnjjcfcncngkadhpmijlkblpibdcgm?hl=zh-CN