DN-02:前端杂记
随手记的前端零散笔记,第二篇。
发布 2017年4月03日 标签
#javascript
#frontend
#notes
~/posts/dn-02 $ cat post.md
DOM 操作
- 创建新节点
createDocumentFragment():创建一个 DOM 片段。createElement():创建一个具体的元素。createTextNode():创建一个文本节点。
- 添加、移除、替换、插入
appendChild()removeChild()replaceChild()insertBefore():在已有的子节点之前插入新节点。
- 查找
getElementsByTagName():按标签名。getElementsByName():按name属性(IE 容错较强,会顺带把id等于name的元素也返回)。getElementById():按id,唯一。
iframe 的优缺点
优点:
- 解决加载缓慢的第三方内容(图标、广告等)的加载问题。
- security sandbox。
- 并行加载脚本。
缺点:
- iframe 会阻塞主页面的
onload事件。 - 即使内容为空,加载也需要时间。
- 没有语义。
网站文件和资源优化
- 文件合并。
- 文件最小化 / 压缩。
- 使用 CDN 托管。
- 缓存(多个域名提供缓存)。
- 其它。
哪些操作会造成内存泄漏
- “内存泄漏” 指对象在不再需要后仍然存在。
- 垃圾回收器定期扫描对象,统计每个对象被其它对象引用的次数。引用计数为 0,或者唯一引用是循环引用时,对象可以被回收。
setTimeout的第一个参数传字符串而不是函数会引发泄漏。- 闭包、控制台日志、循环引用(两个对象互相持有并互相保留)。
从输入 URL 到页面加载完成发生了什么
- 发出 URL 请求时(无论是页面 URL 还是页面上每个资源的 URL),浏览器开一个线程处理请求,同时向远程 DNS 启动一次解析,拿到目标 IP。
- 浏览器与远程 Web 服务器经过 TCP 三次握手建立 TCP/IP 连接:客户端发起 SYN,服务器回 SYN-ACK,客户端再回 ACK。
- TCP 连接建立后,浏览器在连接上发送 HTTP GET 请求。服务器找到资源,用 HTTP 响应返回。状态码 200 表示成功。
- 此时服务器提供资源,客户端开始下载。
JS 对象的几种创建方式
- 工厂模式
- 构造函数模式
- 原型模式
- 混合构造函数 + 原型模式
- 动态原型模式
- 寄生构造函数模式
- 稳妥构造函数模式
JS 继承的 6 种方法
- 原型链继承
- 借用构造函数继承
- 组合继承(原型 + 借用构造)
- 原型式继承
- 寄生式继承
- 寄生组合式继承
同源策略
指协议、域名、端口三者都相同。同源策略是一种安全机制:脚本只能读取来自同一来源的窗口和文档的属性。
JS 无阻塞加载
- 把脚本放在页面底部,body 关闭之前。
- 成组脚本:每个
<script>标签下载时都会阻塞页面解析,所以减少<script>总数也能提升性能。对内联和外部脚本都适用。 - 非阻塞脚本:页面加载完成后再加载 JS,即
window.onload之后开始下载。defer属性:IE4 起、Firefox 3.5 起支持。- 动态脚本元素:DOM 允许用 JS 动态创建几乎所有 HTML 内容:
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "file.js";
document.getElementsByTagName("head")[0].appendChild(script);
eval 是做什么的
- 把字符串解析成 JS 代码并执行。
- 应避免使用:不安全,性能差(要解析两次:一次解析为 JS 语句,一次执行)。