读JavaScript忍者秘籍——页面构建过程

作者 : 开心源码 本文共1019个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共193人阅读

用户端web应用的两个生命周期阶段

  • 构建阶段
    浏览器根据html生成dom树,根据css生成css规则树。确定页面元素位置的过程称为回流,确定页面元素自身内部样式的过程称为重绘回流涉及元素自身及其“附近”元素的位置确定,重绘只涉及元素自身的体现,因而,回流的成本高于重绘
    渲染完毕后,浏览器开始解析并执行js文件,这个过程中就有可能触发回流和重绘。等到全局JS完全执行完毕,页面“真正”确定下来,接下来就等待客户交互。

  • 事件循环阶段
    JS引擎会维护一个事件队列,不断检查队首能否有事件需要执行。其逻辑相似如下代码:

    while (true) {        var eventHandler = eventHandlerQueue.pop()        eventHandler()    }

事件来源可以是客户操作,比方点击按钮,为UI增加事件监听的方式如下:

    // 事件目标对象的 addEventListener 方法    eventTarget.addEventListener(‘eventName',function handler(){})    // dom元素的事件属性    eventTarget.onclick = function handler(){}
    <button onclick='clickHander()'>click</button>

或者者我们可以自己设置事件:

    // 创立事件目标对象,并为 customEvent 增加一个监听器    var eventTarget = new EventTarget()    eventTarget.addEventListener(‘customEvent', function handler(){})    // 创立一个事件对象,在事件目标对象上分发一个 customEvent 事件    var event = new Event('customEvent’, { value: ‘foo’ })    eventTarget.dispatchEvent('customEvent')

也可以是服务器响应:

    var xhr = new XMLHttpRequest()    xhr.open(method, url)    xhr.onreadystatechange = function handler() {}    xhr.send()

当事件触发之后,引擎就会往事件队列队尾增加一个回调函数。

    eventQueue.put(handler)

当回调函数到达队首,则会被执行。基于以上的逻辑,触发事件仅仅是把回调函数放到事件循环队列,事件执行需要等到该回调函数出队。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 读JavaScript忍者秘籍——页面构建过程

发表回复