diff --git a/README.md b/README.md
index 710b198..375ae44 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,10 @@
技术输出存放在 [issue](https://github.com/webproblem/Blog/issues) 中。
+* [从underscore源码看如何判断两个对象相等](https://github.com/webproblem/Blog/issues/10)
+
+* [从underscore源码看数组乱序](https://github.com/webproblem/Blog/issues/7)
+
* [从一道面试题认识函数柯里化](https://github.com/webproblem/Blog/issues/4)
* [移动端手势库AlloyFinger源码分析](https://github.com/webproblem/Blog/issues/3)
diff --git "a/\345\211\215\347\253\257/Browser/CSS\345\212\250\347\224\273\346\200\247\350\203\275.md" "b/\345\211\215\347\253\257/Browser/CSS\345\212\250\347\224\273\346\200\247\350\203\275.md"
new file mode 100644
index 0000000..4e6cd14
--- /dev/null
+++ "b/\345\211\215\347\253\257/Browser/CSS\345\212\250\347\224\273\346\200\247\350\203\275.md"
@@ -0,0 +1,5 @@
+### 参考
+
+* [CSS Animation性能优化](https://www.w3cplus.com/animation/animation-performance.html)
+
+* [[译]CSS animations 与 transitions 在浏览器方面的性能研究](https://segmentfault.com/a/1190000006923260)
\ No newline at end of file
diff --git "a/\345\211\215\347\253\257/Browser/\344\273\216\350\276\223\345\205\245URL\345\210\260\351\241\265\351\235\242\345\212\240\350\275\275\345\217\221\347\224\237\344\272\206\344\273\200\344\271\210.md" "b/\345\211\215\347\253\257/Browser/\344\273\216\350\276\223\345\205\245URL\345\210\260\351\241\265\351\235\242\345\212\240\350\275\275\345\217\221\347\224\237\344\272\206\344\273\200\344\271\210.md"
new file mode 100644
index 0000000..b0cca7a
--- /dev/null
+++ "b/\345\211\215\347\253\257/Browser/\344\273\216\350\276\223\345\205\245URL\345\210\260\351\241\265\351\235\242\345\212\240\350\275\275\345\217\221\347\224\237\344\272\206\344\273\200\344\271\210.md"
@@ -0,0 +1,79 @@
+## 从输入URL到页面加载发生了什么
+
+1. DNS 解析
+2. TCP/IP 连接
+3. 浏览器发送 HTTP 请求
+4. 服务端响应请求
+5. 浏览器解析渲染页面
+
+浏览器是多进程的,每一个 tab 标签页就是一个进程,也就是浏览器渲染进程,这个进程里面包含了多个线程:
+
+* GUI 线程
+* JS 引擎线程
+* 事件触发线程
+* 定时器线程
+* 网络请求线程
+
+在浏览器输入 url 后,浏览器首先会开启一条网络请求线程去请求加载资源。从开启网络线程到发出 HTTP 请求的过程中会经过 DNS 解析,TCP/IP 连接等步骤。
+
+### DNS 解析
+
+简单来说,DNS 解析就是将 url 域名解析查询得到对应的 IP 地址的过程。
+
+#### 为什么需要 DNS 解析
+
+因为网络通讯都是基于 TCP/IP 的,而 TCP/IP 是基于 IP 地址识别访问的,而计算机只能识别 IP 地址,而 IP 地址并不方便记忆,所以互联网设计者在用户的方便性和可用性之间做一个权衡,也就是用网址来代替 IP 地址的使用,但实际还是需要 DNS 解析出 IP 地址访问。
+
+### TCP/IP 连接
+
+这一步就会经过网络的三次握手和服务器建立连接,之后客户端就会发起 HTTP 请求。
+
+### HTTP 请求
+
+客户端发送 HTTP 请求就是构建 HTTP 请求报文并通过 TCP 协议将请求发送给服务端。请求报文由请求行,请求头,请求正文组成。
+
+这里涉及到一个优化知识点,HTTP 缓存也就是浏览器缓存,合理使用浏览器缓存对页面性能更好。在请求头中携带缓存标识的字段发送给服务端,服务端设置好响应的缓存规则后再响应头中携带过来,浏览器会根据缓存规则作出相应的缓存。浏览器缓存分为强缓存和协商缓存,强缓存如果缓存未失效就使用本地资源,不需要发起请求;而协商缓存会像服务端发起请求验证缓存是否失效,未失效就返回304状态码继续使用本地缓存。
+
+[浏览器缓存机制](https://github.com/webproblem/Blog/blob/master/%E5%89%8D%E7%AB%AF/Performance/%E6%B5%8F%E8%A7%88%E5%99%A8%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6.md)
+
+#### http, https 的区别
+
+* http 协议传输的数据都是明文未加密的,是无状态的,存在安全问题
+* https 本质是 http + SSL,使用 SSL 对 http 协议传输的数据进行加密
+
+### 服务端响应请求
+
+服务端接收到了客户端发起的请求后,后端会进行一系列的处理:
+
+* 会先进行验证,安全拦截,跨域验证等
+* 验证通过后,才进入到后端代码并执行相关的处理逻辑代码
+* 后端程序执行完毕后会返回一个 http 响应包
+* 将响应包返回给客户端,完成响应
+
+响应报文由状态码,响应头,响应报文组成。
+
+### 浏览器解析渲染页面
+
+浏览器获取到 html 文件后就开始解析渲染页面。大致流程如下:
+
+* 解析 HTML 生成 DOM tree
+* 解析 CSS 生成 CSSOM tree
+* 合并 DOM tree 和 CSSOM tree,构建 render 树
+* 布局 render 树,计算元素的尺寸大小,位置
+* 绘制 render 树,绘制页面像素信息
+* 合并图层,显示在屏幕上
+
+这个过程中也涉及到了很多优化点:回流重绘,css阻塞DOM渲染,js阻塞DOM解析渲染等
+
+### 推荐阅读
+
+[从输入URL到页面加载发生了什么](https://segmentfault.com/a/1190000006879700)
+
+[从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!](https://zhuanlan.zhihu.com/p/34453198)
+
+[详细解析 HTTP 与 HTTPS 的区别](https://juejin.im/entry/58d7635e5c497d0057fae036)
+
+[深入浅出浏览器渲染原理](https://juejin.im/post/5c24d736f265da614b120d4a)
+
+
+
diff --git "a/\345\211\215\347\253\257/Browser/\345\205\263\344\272\216\351\230\273\345\241\236DOM\346\270\262\346\237\223.md" "b/\345\211\215\347\253\257/Browser/\345\205\263\344\272\216\351\230\273\345\241\236DOM\346\270\262\346\237\223.md"
new file mode 100644
index 0000000..33586a6
--- /dev/null
+++ "b/\345\211\215\347\253\257/Browser/\345\205\263\344\272\216\351\230\273\345\241\236DOM\346\270\262\346\237\223.md"
@@ -0,0 +1,87 @@
+## 前言
+
+前段时间,有个小姐姐问了我一道面试题,题目大致是:```css 和 js 是如何阻塞浏览器渲染 DOM 的,并给出一些优化方案。``` 后来发现自己给出的答案并不正确,所以这里就来总结下。
+
+### CSS 不会阻塞 DOM 解析,但是会阻塞 DOM 渲染
+
+首先需要知道的是,浏览器在渲染整个页面的过程中,遇到 css(外链表或者内联样式),都会阻塞后面的 DOM 渲染,但是对于后面的 DOM 解析会正常进行。这里写个 Demo 测试下。
+
+```html
+
+
+
+ css阻塞
+
+
+
+
+
+
+
+ 这是红色的
+
+
+
+```
+
+模拟浏览器教慢网络的情况下测试,测试的结果是:浏览器会先打印出获取 h1 的节点(没有阻塞 DOM 解析),而后再等样式文件下载解析完成后再渲染出 h1 节点元素(阻塞了 DOM 渲染)。
+
+
+
+同时也可以看到,css 文件的下载也延迟了后面 js 脚本的执行,脚本在等待 css 文件下载完成后才执行的。这里就有两个问题需要明白:
+
+1. 为什么 css 只阻塞 DOM 渲染,而不阻塞 DOM 解析?
+2. 后面的 js 脚本为什么要等待前面的 css 文件下载?
+
+关于第一个问题,首先要明白浏览器的渲染流程,不同内核的浏览器渲染过程可能会有些不一样,以 webkit 为例。
+
+
+
+* 解析 HTML 文件,生成 DOM Tree
+* 解析 CSS 文件,生成 CSSOM Tree
+* 合并 DOM Tree 和 CSSOM Tree 生成渲染树
+* 根据 Render Tree 机制绘制页面
+
+可以看到,DOM 解析和 CSS 解析是独立开来不相互影响的,所以 CSS 并不会阻塞 DOM 的解析。然而 Render Tree 是依赖于 DOM Tree 和 CSSOM Tree 的,页面渲染必须等待 CSSOM Tree 构建完成之后才会继续进行,所以 CSS 会阻塞 DOM 的渲染。
+
+关于第二个问题,其实是因为浏览器内核(浏览器渲染进程)是多线程工作的,浏览器内核包含了两个线程:GUI 渲染线程,JS 引擎线程。GUI 渲染线程负责渲染页面,解析 HTML,CSS 构成 Render Tree,布局和绘制等,JS 引擎线程负责解析 Javascript 脚本,执行代码 。这两个线程之间是互斥的,也就是不能并行执行,当遇到 CSS 文件需要下载解析时,JS 引擎线程必须等待 GUI 渲染线程执行完前面的任务后才会执行,所以后面的 js 脚本必须等待前面的 css 文件下载解析完成后再执行。
+
+### JS 会阻塞 DOM 解析,也会阻塞 DOM 渲染
+
+浏览器在下载解析及执行 JS 脚本(外链和内联)的时候,都会阻塞 DOM 的解析和渲染。这也是因为 GUI 渲染线程 和 JS 引擎线程是互斥的。JS 引擎在执行过程中,GUI 线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。
+
+其实也可以这样理解:浏览器在没下载解析 JS 脚本之前并不知道要进行怎样的操作,如果不阻塞后面 DOM 的解析和渲染,等到后面 DOM 解析渲染完成后,JS 脚本下载完成再执行发现里面有删除 DOM 的操作,那么前面的 DOM 解析渲染流程就变得无意义且会引发回流重绘导致性能下降。所以浏览器需要停止解析渲染,下载并执行 JS 脚本后再继续解析渲染后面的内容。
+
+### 小结
+
+* css 文件在下载解析时会阻塞后面 DOM 的渲染,但不会阻塞 DOM 的解析,且会延迟后面 JS 脚本的执行
+* js 文件在下载执行时不但会阻塞 DOM 的渲染还会阻塞 DOM 的解析,如果 JS 执行时间过长,会导致页面的渲染不连贯,甚至出现页面空白加载
+
+### 优化方案
+
+* css 文件放置在 head 标签中,如果涉及到页面加载的样式,就内联样式
+* js 文件放置在 body 尾部,减少 js 解析执行对页面渲染造成的阻塞
+* 合并压缩 css/js 文件,减少 http 请求数和请求体积
+* 使用浏览器缓存,图片资源优化等
+
+### 推荐阅读
+
+* [css加载会造成阻塞吗](https://github.com/chenjigeng/blog/blob/master/css%E5%8A%A0%E8%BD%BD%E4%BC%9A%E9%80%A0%E6%88%90%E9%98%BB%E5%A1%9E%E5%90%97%EF%BC%9F.md)
+* [CSS/JS 阻塞 DOM 解析和渲染](https://harttle.land/2016/11/26/static-dom-render-blocking.html)
+* [原来 CSS 与 JS 是这样阻塞 DOM 解析和渲染的](https://juejin.im/post/59c60691518825396f4f71a1)
+* [关键渲染路径](https://developers.google.com/web/fundamentals/performance/critical-rendering-path/?hl=zh-cn)
+* [CSS 与网络性能](https://mp.weixin.qq.com/s/0fSUaT-Y1b5hmXJ3Q0bmJA)
+* [从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理](https://segmentfault.com/a/1190000012925872)
\ No newline at end of file
diff --git "a/\345\211\215\347\253\257/Browser/\351\207\215\347\273\230\345\233\236\346\265\201.md" "b/\345\211\215\347\253\257/Browser/\351\207\215\347\273\230\345\233\236\346\265\201.md"
new file mode 100644
index 0000000..cad20e4
--- /dev/null
+++ "b/\345\211\215\347\253\257/Browser/\351\207\215\347\273\230\345\233\236\346\265\201.md"
@@ -0,0 +1,7 @@
+## 重绘回流
+
+### 参考
+
+* [页面重绘和回流以及优化](https://www.css88.com/archives/4996)
+* [回流与重绘:CSS性能让JavaScript变慢?](https://www.zhangxinxu.com/wordpress/2010/01/%E5%9B%9E%E6%B5%81%E4%B8%8E%E9%87%8D%E7%BB%98%EF%BC%9Acss%E6%80%A7%E8%83%BD%E8%AE%A9javascript%E5%8F%98%E6%85%A2%EF%BC%9F/)
+
diff --git "a/\345\211\215\347\253\257/CSS/BFC.md" "b/\345\211\215\347\253\257/CSS/BFC.md"
index 2d6b1ca..2ac3cc2 100644
--- "a/\345\211\215\347\253\257/CSS/BFC.md"
+++ "b/\345\211\215\347\253\257/CSS/BFC.md"
@@ -1,6 +1,28 @@
## BFC
+* BFC 是 web 页面中盒模型布局的 CSS 渲染模式。
+* BFC 相当于创建了一个隔离容器,容器内部元素与外部元素相互不影响。
+* 一个元素不能同时存在于两个 BFC 中。
+
+#### 创建 BFC 方式如下,只要满足一个条件即可:
+
+* 根元素(html 元素)
+* 浮动(float 值不为 none)
+* 绝对定位(position 值不为 static 和 relative)
+* overflow 值不为 visible
+* display 值为 table-cell, table-caption, inline-block, flex, inline-flex 中的一个
+
+####BFC 的布局规则:
+
+* 内部的盒模型会在垂直方向按照顺序一个接一个的排列
+* 同一个 BFC 内部的相邻元素的外边距会重叠
+* BFC 相当于页面上的独立隔离容器,里面的子元素和外部元素相互不影响
+* 计算 BFC 容器的高度时,浮动元素也参与计算
+* 同一个 BFC 内部每个盒子的左外边框紧挨着包含块的左边框(从右到左的格式,则为紧挨右边框),即使存在也是这样
+
### 参考
* https://juejin.im/post/59b73d5bf265da064618731d
+* https://juejin.im/post/5909db2fda2f60005d2093db
+* [理解CSS中BFC](https://www.w3cplus.com/css/understanding-block-formatting-contexts-in-css.html)
diff --git "a/\345\211\215\347\253\257/CSS/Demo/BFC.html" "b/\345\211\215\347\253\257/CSS/Demo/BFC.html"
new file mode 100644
index 0000000..24cdf9c
--- /dev/null
+++ "b/\345\211\215\347\253\257/CSS/Demo/BFC.html"
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+ BFC
+
+
+
+
+
+ Sibling 1
+ Sibling 2
+
+
+
+
+
\ No newline at end of file
diff --git "a/\345\211\215\347\253\257/CSS/Demo/index.html" "b/\345\211\215\347\253\257/CSS/Demo/index.html"
index c22194e..128925a 100644
--- "a/\345\211\215\347\253\257/CSS/Demo/index.html"
+++ "b/\345\211\215\347\253\257/CSS/Demo/index.html"
@@ -4,7 +4,7 @@
- Document
+ 多栏布局
+
+
+
+
+