• setTimeout(fn, 0)引发的JavaScipt线程的思考


    • 起因
      • 周五改一个checkbox的display属性被错误地设置为none的bug. 经debug发现, 有两个地方修改了display属性: 1) checkbox的controller; 2) checkbox的parent(container). 前者先将display属性更新为block(正确), 后者再次更新为none(错误). 普通的思路是, 修改checkbox的container的代码, 使其能正确更新display值. 但另有一种更巧妙的方法, 就是修改checkbox的controller的代码, 将更新display相关的函数fn放在setTimeout中 -- setTimeout(fn, 0). 
    • 参考
    • 总结
      • 浏览器内核的多线程机制
        • 常驻
          • JS Engine线程
            • JS Engine为事件驱动型
            • 事件来源
              • 来自JS Engine当前执行的代码块, 例:
                • setTimeout添加一个任务
              • 来自浏览器内核其他线程, 例:
                • 事件触发线程
                  •   如,界面元素鼠标点击事件
                • 定时器线程?
                  •   定时触发器时间到达通知(与setTimeout的差异?)
                • http请求线程
                  •   异步请求状态变更通知, 异步XHR
                  •      script element onload? (load一个js file之后执行)
                • UI渲染线程
                  •   transitionend, animationend
            • 任务实体: 回调函数
          • UI渲染线程
          • 事件触发线程
        • 非常驻
          • http请求线程
    • 待探索的问题
      • setTimeout & 闭包
      • hit breakpoint 的线程处于什么状态?
      • JS Engine的任务过程能否被打断? (目前看来似乎不能被打断)
    Wisdom dawns when names and forms vanish.
  • 相关阅读:
    代码重构(转)
    Apache负载均衡 配置
    恒久的忍耐
    setInterval全面的介绍
    引用 110个Oracle 常用函数的总结
    ssl和tls
    JSTL
    java异常处理的陋习(转载)
    Java 6 JVM参数选项大全(中文版)
    liunx基础常用命令
  • 原文地址:https://www.cnblogs.com/gentlemint/p/5173506.html
Copyright © 2020-2023  润新知