1.面试总结

146 阅读3分钟
对于performance.timing我们该理解的知识:
1.document.ready和domcontentLoade
    onLoad是的在页面所有文件加载完成后执行
    DomContentLoad是Dom加载完成后执行,不必等待样式脚本和图片加载
    domContentLoad更为合理,
原理:
    如果是webkit引擎则轮询document的readyState属性,当值为loaded或者complete时则触发DOMContentLoaded事件,对webkit525之后版本直接可以注册DOMContentLoaded事件
2.白屏时间:包括dns查询、建立tcp连接、发送首个http请求(如果使用https还要介入TLS的验证时间)
返回html文档、html文档head解析完毕。
计算白屏时间:因此,我们通常认为浏览器开始渲染 <body> 标签或者解析完 <head> 标签的时刻就是页面白屏结束的时间点。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>白屏</title>
  <script type="text/javascript">
    // 不兼容performance.timing 的浏览器,如IE8
    window.pageStartTime = Date.now();
  </script>
  <!-- 页面 CSS 资源 -->
  <link rel="stylesheet" href="common.css">
  <link rel="stylesheet" href="page.css">
  <script type="text/javascript">
    // 白屏时间结束点
    window.firstPaint = Date.now();
  </script>
</head>
<body>
  <!-- 页面内容 -->
</body>
</html>
因此白屏时间则可以这样计算出:
可使用 Performance API 时
白屏时间 = firstPaint - performance.timing.navigationStart;
不可使用 Performance API 时
白屏时间 = firstPaint - pageStartTime;
3.首屏时间:首屏内容渲染完毕的时间节点;
通常我们首屏内容加载最慢的就是图片资源,因此我们会把首屏内加载最慢的图片的时间当做首屏的时
间。由于浏览器对每个页面的TCP连接数有限制,使得并不是所有图片都能立刻开始下载和显示。因此
我们在 DOM树构建完成后将会去遍历首屏内的所有图片标签,并且监听所有图片标签onload事件,最终遍历图片标签的加载时间的最大值,并用这个最大值减去navigationStart即可获得近似的首屏时间。此时首屏时间等于 加载最慢的图片的时间点 - performance.timing.navigationStart;
4.用户可操作时间节点:domready触发节点;
5.总下载时间:window.onload的触发节点。






聊聊V8引擎的垃圾回收
1.1 标记清除
(1)垃圾收集器在运行的时候会给存储在内存中的所有变量都加上标记(当然,可以使用任何标记方式)。
(2)然后,它会去掉运行环境中的变量以及被环境中变量所引用的变量的标记
(3)此后,依然有标记的变量就被视为准备删除的变量,原因是在运行环境中已经无法访问到这些变量了。
(4)最后,垃圾收集器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。
1.2 引用计数
引用计数的垃圾收集策略不太常见。含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时
,则这个值的引用次数就是1。



1.谈谈你对bind、call、apply理解?

www.jianshu.com/p/dc4c60c51…