HTTP2

HTTPHTTP协议(超文本传输协议)是因特网上应用最广泛的一种网络传输协议,它基于TCP/IP协议来传递数据,它是无连接、无状态的,不会在两个请求之间记录任何状态,而且它可以发送任何类型的数据。 目前使用最广泛的版本是HTTP/1.1 HTTP大致存在的问题: 使用明文传输数据。 HTTP请求头臃肿,且没有...

撸一个简易富文本编辑器

前言印象中,富文本编辑器一直是一个高大上的玩意儿,想实现一个应该也挺难的。既然如此,那必须得学啊,这篇文章就是记录如何实现一个超简易的富文本编辑器。 实现方式实现富文本编辑器通常来说有两种方式: 给元素设置 contenteditable=’true’123<div contenteditable=&quo...

学习Vue源码9-浅谈Vue中的Diff算法

虚拟DOM操作DOM的代价操作DOM的代价很高,影响页面性能的主要问题有以下几点: 访问和修改DOM元素 修改DOM元素的样式,导致重绘或重排 通过对DOM元素的事件处理,完成与用户的交互功能 DOM的修改会导致重绘或重排 重绘:重绘是指一些样式的修改,元素的位置和大小都没有改变,浏览器会根据元素的新属性重...

学习Vue源码8-vm._render与vm._update

接上篇$mount方法总结 获得模版 template。 调用 compileToFunctions 获得 template 对应的 render函数。 调用 mountComponent ,其中的 vm._render() 将 render函数 转化为 vNode。 vm._update() 以生成的 vNod...

学习Vue源码7-Vue中的$mount方法

用法使用 vm.$mount() 可以手动地挂载一个未挂载的实例,比如:12345678910111213var MyComponent = Vue.extend({ template: '<div>Hello!</div>'})// 创建并挂载到...

实现一个Promise

先实现一个简易版Promise既然是简易版直接看在代码里的注释就可以了。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465...

Buffer笔记

BufferBuffer是一个类数组对象,主要用于操作字节,它的元素为16进制两位数,即0-255的数值。Buffer非常像数组,它可以访问length属性的到长度,也可以通过下标访问元素。Buffer对象的内存分配不是在V8堆内存中,而是在Node的C++层实现内存申请的。 Buffer对象1234var st...

Node中的Js模块机制

CommonJS模块规范模块定义123exports.add = function() { console.log('add')} 模块引用在另一个文件中通过require引入模块后即可调用定义的属性或方法了12var add = require('./add&...

V8垃圾回收机制

V8的内存限制在一般的后端语言中,在内存的使用上没什么限制,而在Node.js中却是被限制的(64ͮ位系统下约为1.4 GB,32ͮ位系统下约为0.7 GB)。这就导致Node.js无法直接操作过大的内存操作。 造成这种问题的原因,一是V8本是为浏览器设计的,很少会遇到使用大量内存的场景。二是垃圾回收机制所限,以...

学习Vue源码6-nextTick的实现原理

nextTick的实现原理 core/util/next-tick.js作用:Vue的DOM更新是异步的,nextTick可以让我们在下次DOM更新后,拿到更新后的DOM。 原理(Vue版本2.6.8): 四套方案: Promise MutationObserver setImmediate setTimeo...