bLanK's blog

攻无不克,战无不胜

http 1.0

  • 简单、灵活、易扩展、跨平台
    1. 基本格式:header+body
    2. header、status 都可以自定义
    3. https = http + tls/ssl
  • 无状态: 服务器不会记录请求的状态
  • 默认关闭 keepalive,每次请求都建立一次tcp连接,服务器处理后立即断开tcp连接

http1.0有队头阻塞, 即没收到第一个请求对应的响应 就不能发送第二个请求

阅读全文 »

  • 原型链
  • 盗用构造函数
  • 组合继承
  • 原型式继承
  • 寄生继承
  • 寄生式组合继承
阅读全文 »

浏览器进程模型

一个进程有很多线程,线程是干活的人,所以一个进程至少一个线程

浏览器极其复杂,拥有多个进程

  1. 浏览器进程

    负责:界面显示、交互、子进程管理

  2. 网络进程

  3. 渲染进程

    会开启一个渲染主线程,负责执行html\css\js代码

    默认每个标签开启一个新渲染进程

阅读全文 »

方法名 包含原型链上的 可枚举的
Object.keys()
for-in
Object.getOwnPropertyName() 可或不可
阅读全文 »

渲染流程

当浏览器获得html文档,会产生一个渲染任务,把渲染任务分配给渲染主线程的消息队列。
在时间循环机制下,渲染主线程去除消息队列中的任务,开始渲染流程

阅读全文 »

枚举和迭代有什么区别?

  • for-in 是遍历所有可枚举属性(包括原型链上的)
1
2
3
4
5
6
7
8
9
let obj = {
a: 'aaa',
b: 'bbb'
}
Object.prototype.c = 'ccc'
console.log(obj);
for(let i in obj){
console.log(i);
}
1
2
3
4
Object.defineProperty(obj,'d',{
value: 'ddd',
enumerable: false
}) //d属性枚举不到

🔗更多关于枚举

所以enumberable决定了属性能不能被枚举到
而可迭代性是由各种类型里内置的迭代器工厂函数决定的

详见:🔗迭代器-生成器

  • for-of 是迭代,要有迭代器才能用
1
2
3
4
5
//比如迭代一个Object类型会报错,因为Object没有实现Iterable接口不可迭代
console.log(obj); //{a: 'aaa', b: 'bbb', d: 'ddd'}
for (let x of obj){
console.log(x);
} //Uncaught TypeError: obj is not iterable

手写一个伪数组迭代器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

const { range } = require("lodash");

let fakeArr = {
0: 'a',
1: 'b',
2: 'c',
length: 3,

}
//赋值号右边是一个生成器函数
Object.prototype[Symbol.iterator] = function* () {
for (i in range(0, this.length)) {
yield this[i]
}

}

for (let item of fakeArr) {
console.log(item);
}

Porimise.resolve(obj) Promise.reject(obj)

  1. obj是非Promise对象,其状态PromiseState一定是 fulfilled
  2. obj是Promise对象, 则根据obj的状态PromiseState是 fulfilled或 rejected 来决定整体的
  3. resolve或 reject 本质是把 PromiseState 从 pending –> fulfilled/ rejected
  4. 状态不为pending 就会调用then
1
2
3
4
5
const p = Promise.resolve(
new Promise((resolve, reject) => {
reject("ok!");
})
);
阅读全文 »

  • nignx.exe所在目录启动nginx
    1
    nginx
  • 查看所有进程信息
    1
    ps -ef | grep nginx 查看nginx所有进程信息
  • 查看端口占用情况
    1
    2
    #80表示查看80端口的
    lsof -i:80
  • 停止nignx
    1
    2
    3
    nginx -s quit   #优雅停止
    nginx -s stop #立即停止
    nginx -s reload #重载配置文件
  • 查看配置
    1
    2
    nginx -V #查看配置
    nginx -t #检查配置是否出错

nginx 基本配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
event {}

http {

include /etc/nginx/mime.types; #导入文件MIME类型
include /etc/nginx/conf.d/*.conf;

server {
listen 80;
server_name localhost;
root /dist; # 访问80端口返回root页面
index egg.html; #默认访问index.html,配置后以配置优先
}
}

location 的使用

1
2
3
4
5
6
7
server {
listen 80;
server_name localhost;
location / { # 访问根目录下的请求都从/dist目录下开始寻找资源
root /dist;
}
}
1
2
3
4
5
6
7
8
# 完全指定请求地址对应的资源地址
location = /app/index.html {
root /dist;
}
# 也可以开启正则
location ~ /videos/video[6-9].avi {
root /videos/
}
{% if theme.CloudCalendar.enable %} {% endif %}