- 博客(15)
- 收藏
- 关注
原创 npm的lock机制解析
npm是什么npm是一个包管理工具,开源作者可以把开源包发布在平台上供其他人下载使用。前端的同学基本都使用过npm,这里就不做过多介绍。日常工作中npm的主要用途就是根据项目的package.json使用npm install去安装依赖。npm install可以说是我们使用最频繁的一个指令。在npm5版本之前,npm install会根据package.json指定的依赖版本去进行安装。但往...
2019-06-20 22:28:27 3430
原创 浏览器的多进程、多线程运行机制
多进程的浏览器进程概念进程是操作系统分配资源的基本单位,而浏览器是多进程的程序。浏览器通过多个tab页来加载多个页面,标准上一个tab页应对应浏览器的一个进程。浏览器之所以能加载出页面,是因为操作系统给浏览器的各个进程分配了资源(CPU、内存)。浏览器包含的进程浏览器在打开后具体包含以下主要进程(未开始打开tab页加载页面):Browser进程:浏览器的主进程,主要作用有...
2019-06-01 21:45:39 2063
原创 nodejs的事件循环机制
一直以来,我写的的大部分JS代码都是在浏览器环境下运行,因此也了解过浏览器的事件循环机制,知道有macrotask和microtask的区别。但最近写node时,发现node的事件循环机制和浏览器端有很大的不同,特此深入地学习了下。单线程在传统web服务中,大多都是使用多线程机制来解决并发的问题,原因是I/O事件会阻塞线程,而阻塞就意味着要等待。而node的设计是采用了单线程的机制,但它为什么...
2019-06-01 21:44:28 931
原创 浅析badjs源码
最近在研究前端监控方案,由于工作需要研究了下鹅厂的badjs源码,主要是看了前端上报这一块,也就是badjs-report。关于badjs的使用可以看下官方文档前端监控痛点了解一个框架或者库之前要先思考它想解决的是什么问题。前端异常监控系统的落地这篇文章比较详细地总结了前端监控所需要解决的问题,总结了下有:错误拦截上报错误离线错误日志存储错误路径回放日志可视化管理后台...
2018-07-09 17:53:19 776
原创 Vue的nextTick原理解析
假设当前的模板代码为<div id="a">{{a}}</div>,这时我们在mounted钩子里写下如下的代码:this.a = '纳尼?!';this.$nextTick(function(){ console.log($('#a')[0].textContent);})于是vue内部的执行流程如下图所示:首先外部代码(即mounted钩...
2018-04-23 14:44:00 2253 4
原创 Vue数据绑定原理及简单实现
本篇文章中的代码只是部分片段,完整代码存放于github上https://github.com/Q-Zhan/simple-vue。进入正文~实现数据绑定主要是要实现两个方面的功能:数据变化导致视图变化,视图变化导致数据变化。后者比较容易实现,就是监听视图的事件,然后在回调函数中改变数据。所以重点是数据变化时如何改变视图。 这里的思路是通过object.defineProperty()来对数...
2018-03-31 09:38:14 6276
原创 JavaScript小知识点(三):web缓存
对于浏览器端的缓存来说,缓存规则是由meta标签和http协议标签头来决定的,然而由于只有部分浏览器支持meta标签且缓存代理服务器都不支持它,所以我们一般都使用http标签头来设置缓存。 有关缓存的标签头分为检测新鲜度(时间过期)和检测校验值(验证机制) 规则 报头 值 类型 作用 新鲜度 Expires Sun,16 Oct 2016 05:43...
2017-10-25 21:16:04 247 1
原创 JavaScript难点系列(六):原型链与继承
类和构造函数JS中使用构造函数来定义类:function Range(from, to) { this.from = from this.to = to}Range.prototype.includes = function(x) { return this,from this.to}Range.prototype.toString = function
2017-09-28 16:09:18 185
原创 JavaScript小知识点(二):函数防抖和节流
函数防抖函数防抖就是让某个函数满足等待某个时间内不再触发此函数后再执行, 而在这个等待时间内再次触发此函数, 等待时间会重新计算。例如监听滚动无限加载时,如果没有对请求函数进行防抖控制,用户拉到底部时会多次触发请求函数。进行防抖控制后,只有用户拉到底部并且在规定的事件内不再滚动才会触发请求函数。function debounce(func, wait) { var timeout;
2017-09-03 17:25:35 270
原创 JavaScript小知识点(一):深浅拷贝
浅拷贝一般我们需要拷贝复制的就是对象和数组两种数据类型。对于数组可以利用一些原生的方法来实现浅拷贝。var old_arr = ['old']var new_arr1 = old_arr.slice()var new_arr2 = old_arr.concat() 而对于对象可以使用for in 循环var old_obj = {'a': 'old'}var new_obj = {}for
2017-08-16 14:48:46 257
原创 JavaScript难点系列(五):执行上下文
深入了解js这门语言后,才发现它有着诸多众所周知的难点(例如:闭包、原型链、内存空间等)。有的是因为js的设计缺陷导致的,而有的则是js的优点。不管如何,总需要去学会它们,在学习过程中我觉得只看别人的文章并不能做到深刻理解,所以我决定写这一系列的文章来记录我所学习到的知识点,也方便自己以后回顾,如有写错的地方欢迎指正。 废话不多说,马上进入正题!顺序执行每个人刚学JS时都会知道JS执行代码时是顺序执
2017-08-16 14:38:56 235
原创 JavaScript难点系列(四):作用域
深入了解js这门语言后,才发现它有着诸多众所周知的难点(例如:闭包、原型链、内存空间等)。有的是因为js的设计缺陷导致的,而有的则是js的优点。不管如何,总需要去学会它们,在学习过程中我觉得只看别人的文章并不能做到深刻理解,所以我决定写这一系列的文章来记录我所学习到的知识点,也方便自己以后回顾,如有写错的地方欢迎指正。 废话不多说,马上进入正题!函数作用域有句人人皆知的江湖传言:“JavaScr
2017-08-16 14:35:57 230
原创 JavaScript难点系列(三):异步编程
深入了解js这门语言后,才发现它有着诸多众所周知的难点(例如:闭包、原型链、内存空间等)。有的是因为js的设计缺陷导致的,而有的则是js的优点。不管如何,总需要去学会它们,在学习过程中我觉得只看别人的文章并不能做到深刻理解,所以我决定写这一系列的文章来记录我所学习到的知识点,也方便自己以后回顾,如有写错的地方欢迎指正。 废话不多说,马上进入正题!一、现在和将来在我刚开始学习js的时候,并不知道j
2017-08-16 14:35:01 427
原创 JavaScript难点系列(二):this
深入了解js这门语言后,才发现它有着诸多众所周知的难点(例如:闭包、原型链、内存空间等)。有的是因为js的设计缺陷导致的,而有的则是js的优点。不管如何,总需要去学会它们,在学习过程中我觉得只看别人的文章并不能做到深刻理解,所以我决定写这一系列的文章来记录我所学习到的知识点,也方便自己以后回顾,如有写错的地方欢迎指正。 废话不多说,马上进入正题!一、默认绑定在看过很多种的this解读思路后,我觉
2017-08-16 11:52:48 274
原创 JavaScript难点系列(一):内存空间
深入了解js这门语言后,才发现它有着诸多众所周知的难点(例如:闭包、原型链、内存空间等)。有的是因为js的设计缺陷导致的,而有的则是js的优点。不管如何,总需要去学会它们,在学习过程中我觉得只看别人的文章并不能做到深刻理解,所以我决定写这一系列的文章来记录我所学习到的知识点,也方便自己以后回顾,如有写错的地方欢迎指正。 废话不多说,马上进入正题!一、基本数据类型和引用类型S中有五种基本数据类型:
2017-08-16 11:07:07 275
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人