自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

huangpb的博客

好好学习,天天向上!

原创 通信API MessageChannel

一、简介MessageChannel 接口允许我们创建一个新的消息通道,并通过它的两个MessagePort 属性发送数据。简单来说,MessageChannel创建了一个通信的管道,这个管道有两个口子,每个口子都可以通过postMessage发送数据,而一个口子只要绑定了onmessage回调方法,就可以接收从另一个口子传过来的数据。MessageChannel的使用场景:2个Web Worker间通信二、2个简单的使用例子例子1: var ch = new Messa..

2020-07-05 17:47:36 80

原创 css in js开发利器 - styled-components(样式组件)

styled-components是一个常见的 css in js 类库,和所有同类型的类库一样,通过 js 赋能解决了原生 css 所不具备的能力,比如变量、循环、函数等。注意:有时候 React 版本和 styled-components 版本不匹配时使用 styled-components 会有 hook 报错,要升级一下 React 版本。一、安装npm install --save styled-components二、使用文档1. 基本使用import styled.

2020-06-27 23:46:45 95

转载 带你深度解锁Webpack系列(优化篇)

带你深度解锁Webpack系列(基础篇) 和 带你深度解锁Webpack系列(进阶篇),主要是讲解了 Webpack 的配置,但是随着项目越来越大,构建速度可能会越来越慢,构建出来的js的体积也越来越大,此时就需要对 Webpack 的配置进行优化。本文罗列出了十多种优化方式,大家可以结合自己的项目,选择适当的方式进行优化。这些 Webpack 插件的源码我大多也没有看过,主要是结合 Webpack 官方文档以及项目实践,并且花了大量的时间验证后输出了本文,如果文中有错误的地方,欢迎在评论区指正。鉴

2020-06-20 21:47:57 160

转载 带你深度解锁Webpack系列(进阶篇)

三篇长文,带你解锁 Webpack ,希望读完这三篇文章,你能够对 webpack 的各项配置有一个更为清晰的认识。本文是第二篇,如果你还没有阅读《带你深度解锁Webpack系列(基础篇)》,建议阅读之后,再继续阅读本文。本文会引入更多的 webpack 配置,如果文中有任何错误,欢迎在评论区指正,我会尽快修正。 webpack 优化部分放在了下一篇。推荐大家参考本文一步一步进行配置,不要总是想着找什么最佳配置,掌握之后,根据自己的需求配置出来的,就是最佳配置。本文对应的项目地址(编写本文时

2020-06-20 21:03:33 114

转载 带你深度解锁Webpack系列(基础篇)

三篇长文带你解锁 Webpack ,希望读完这三篇文章,你能够对 webpack 的各项配置有一个更为清晰的认识。1.webpack 是什么?webpack 是一个现代 JavaScript 应用程序的静态模块打包器,当 webpack 处理应用程序时,会递归构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个 bundle。2.webpack 的核心概念entry: 入口 output: 输出 loader: 模块转换器,用于把模块原内容按照需求转换成新内

2020-06-20 20:18:07 88

原创 Homebrew - Mac必备软件包管理工具

Homebrew 又叫 brew,是Mac OSX上的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。一、安装按照Homebrew官网提供的地址安装,很简单,就一条命令。二、Homebrew基本使用1. 安装软件比如安装node:brew install node2...

2020-04-19 09:35:22 86

原创 前端上传

上传前用户要选择本地要上传的文件,用户可以通过以下三种方式操作触发:通过input type="file" 选择本地文件 通过拖拽的方式把文件拖过来 在编辑框里面复制粘贴一、三种选择文件的不同操作1. 通过input type="file" 选择本地文件通过这种方式选择文件的话,前端可以有2种上传方式:Ajax请求 和 Form表单。Ajax请求:就是平时用的 post...

2020-04-11 11:45:57 95

转载 Node调试之 谷歌Inspect扩展程序

一、安装Node.js V8 InspectorNode.js V8 Inspector 是Chrome的一个调试node的扩展程序,可以去谷歌商品下载。二、示例程序为了方便讲解,下面是一个示例脚本。首先,新建一个工作目录,并进入该目录。$ mkdir debug-demo$ cd debug-demo然后,生成package.json文件,并安装Koa框架和 koa...

2020-03-23 23:45:41 64

原创 GitBook 本地安装和使用

GitBook 是一个基于 Node.js 的现代化文档平台,可使用 Github/Git 和 Markdown 来制作精美的电子书。一、GitBook 本地安装和使用教程1. 全局安装 gitbook 脚手架$ npm install gitbook-cli -g2. 检查是否安装成功$ gitbook -VCLI version: 2.3.2GitBook vers...

2020-03-08 16:43:29 323

原创 对象getter和setter属性 - 属性监听

一、在新对象初始化时定义 getter settervar obj = { log: ["a", "b", "c"], get latest() { if (this.log.length == 0) { return undefined; } return this.log[this.log.length - 1]; }, set lat...

2020-02-23 22:41:37 98

原创 事件冒泡、事件捕获和事件委托

一、事件冒泡和事件捕获的区别事件冒泡:目标元素事件先触发,然后父元素事件触发 事件捕获:父元素事件先触发,然后目标元素事件触发事件执行顺序是:先事件捕获(从 Windows -> document 依次往下) 再是目标事件处理 最后是事件冒泡addEventListener() 第三个参数为 false 事件触发顺序是冒泡顺序,true 为捕获顺序,默认为 false(这个...

2020-02-22 10:44:55 76

原创 性能调试实践

页面帧(Performance -> FPS,Rendering -> FPS meter)、事件(Performance -> Event Log)和实际内存(Memory,Performance Monitor -> JS heap size)使用三个方面发现程序的问题。如果一个页面比较卡,可能是由以下几方面造成的:内存泄露。使用 Memory 的3次快照查看总...

2020-02-16 23:58:34 71

转载 前端异常捕获和日志上报

一、异常捕获对于前端来说,我们需要的异常捕获无非为以下两种:接口调用情况; 页面逻辑是否错误,例如,用户进入页面后页面显示白屏;对于接口调用情况,在前端通常需要上报客户端相关参数,例如:用户OS与浏览器版本、请求参数(如页面ID);而对于页面逻辑是否错误问题,通常除了用户OS与浏览器版本外,需要的是报错的堆栈信息及具体报错位置。异常捕获方法全局捕获可以通过全局监听异常来捕获...

2020-02-16 23:56:28 180

转载 前端性能优化清单

前端性能优化清单

2020-02-16 15:14:36 31

原创 用 @font-face 实现自定义字体

目录一、语法二、字体格式三、实战使用四、各浏览器兼容五、用 unicode-range 指定字体适用范围1. unicode-range的值和语法2. unicode-range的常用值六、字体压缩参考文章一、语法@font-face { font-family: <fontFamily>; /* 自定义字体名称; */ s...

2020-02-09 22:03:05 162

原创 Unix、Linux、macOS 操作系统简介

一、Unix 操作系统Unix是1970年出现的一个操作系统。在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代初,可以说 UNIX 是操作系统中的"老大哥",后来的 Windows 和 Linux 都参考了 UNIX。UNIX系统的主要特点表现在以下几方面:(1...

2020-02-08 22:04:57 471

转载 HTTPS让数据传输更安全

谈到HTTPS, 就不得不谈到与之相对的HTTP。HTTP的特性是明文传输,因此在传输的每一个环节,数据都有可能被第三方窃取或者篡改,具体来说,HTTP 数据经过 TCP 层,然后经过WIFI路由器、运营商和目标服务器,这些环节中都可能被中间人拿到数据并进行篡改,也就是我们常说的中间人攻击。为了防范这样一类攻击,我们不得已要引入新的加密方案,即 HTTPS。HTTPS并不是一个新的协议, ...

2020-02-07 22:24:40 400

原创 二进制对象:Blob、File和它们的读取对象:FileReader

一、Blob 对象Blob,全称 Binary Large Object,代表二进制类型的大对象。在Web领域,Blob对象表示一个不可变、二进制原始数据的类文件对象,因此可以像操作文件对象一样操作Blob对象。File 接口基于Blob,继承了 Blob 的功能并将其扩展使其支持用户系统上的文件。一、Blob基本用法1. 创建Blob对象生成Blob对象有两种方法:使用Blo...

2020-02-06 00:17:40 350

原创 Base64编码格式

Base64 就是一种编码方法,可以将任意值转成 0~9、A~Z、a-z、+、/ 这64个字符组成的可打印字符。使用它的主要目的,不是为了加密,而是为了不出现特殊字符,简化程序的处理。经编码后,文本体积会变大 1/3。一、ASCII 编码转Base64js原生提供两个 Base64 相关的方法:btoa():ASCII 编码转为 Base64 编码 atob():Base64 编码...

2020-02-02 12:06:12 341

原创 URI 和 URL

一、URI(统一资源标识符)URI 是用来标识互联网上的资源(例如,网页或文件)和怎样访问这些资源的传输协议(例如,HTTP 或 FTP)的字符串。js编码解码URI的方法有4个:encodeURI、encodeURIComponent、decodeURI、decodeURIComponent。1、一个URI的组成一个 URI 是由组件分隔符分割的组件序列组成。其一般形式是:Sch...

2020-02-02 10:38:17 50

转载 浏览器的多进程架构

以 Chrome 为例,它由多个进程组成,每个进程都有自己核心的职责,它们相互配合完成浏览器的整体功能。Chrome 采用多进程架构,其顶层存在一个 Browser process 用以协调浏览器的其它进程。优点由于默认 新开 一个 tab 页面 新建 一个进程,所以单个 tab 页面崩溃不会影响到整个浏览器。同样,第三方插件崩溃也不会影响到整个浏览器。多进程可以充分利用现...

2020-01-23 20:52:26 79

原创 授权认证登录之 Cookie、Session、Token、JWT 详解

目录一、先了解几个基础概念二、什么是 Cookie1. cookie 重要的属性2. 服务器端设置cookie示例(Node)3. 客户端对Cookie的存取4. 每个域名下cookie个数限制5.封装对Cookie的操作三、什么是 Session四、Cookie 和 Session 的区别五、什么是 Token(令牌)Acesss Token...

2020-01-14 22:25:54 402 1

原创 计算机存储部件详解

一、存储器计算机的存储器有两类:一类是内部存储器(内存),存储信息速度快,但是断电后存储内容全部丢失。 一类是外部存储器(主要是磁盘),存取速度比内存慢得多,但是存储信息不受断电的影响。二、磁盘磁盘又分为两类,一类是硬盘,一类是软盘。硬盘的容量比较大,一般都装在机箱里面。软盘的容量就相对比较小了,一般放在机箱外面。计算机上有个特殊的地方叫做软盘驱动器,要用软盘的时候就把它放...

2020-01-04 17:03:02 164

原创 iconfont 的使用方法

iconfont 常用的方法有两种:一种是直接下载到本地,另一种是使用远程链接。直接下载到本地把 iconfont 下载到本地,然后把整个文件夹放到自己的项目中。iconfont 有三种引用方式:Unicode,Font class,Symbol。Unicode 引用Unicode 是字体在网页端最原始的应用方式,特点是:兼容性最好,支持 IE6+,及所有现代浏览器。...

2020-01-02 23:36:02 107

原创 js中的内存管理

前言像C语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()用于分配内存和释放内存。 而对于JavaScript来说,会在创建变量时分配内存,并且在不再使用它们时“自动”释放内存,这个自动释放内存的过程称为垃圾回收。 因为自动垃圾回收机制的存在,让大多Javascript开发者感觉他们可以不关心内存管理,所以会在一些情况下导致内存泄漏。一、内存结构内存分为...

2020-01-01 14:09:57 112

原创 对象序列化 - JSON.parse() 和 JSON.stringify()

一、语法JSON.stringify(value[, replacer [, space]])二、JSON.stringify() 实际使用场景对象和数组的深拷贝 对 http 请求参数进行序列化 对要存储到 Storage 的数据转换成字符串三、JSON.stringify() 的六大特性第一大特性对于 undefined、任意的函数以及 symbol 三个特殊的值分...

2019-12-28 22:43:51 83

原创 JS 数据结构

一、认识数据结构什么是数据结构?下面是维基百科的解释数据结构是计算机存储、组织数据的方式数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装我们每天的编码中都会用到数据结构,因为数组是最简单的内存数据结构,下面是常见的数据结构:数组(Array) 栈(Stack) 堆(Heap) 队列(Queue) 链表(L...

2019-12-21 22:48:19 30

转载 栈、堆、队列 深入理解

栈、堆、队列都属于常见数据结构。一、栈1.1 简介栈 是一种遵循 后进先出(LIFO) 原则的有序集合。新添加和待删除的数据都保存在栈的同一端栈顶,另一端就是栈底。新元素靠近栈顶,旧元素靠近栈底。 栈由编译器自动分配释放。栈使用一级缓存。调用时处于存储空间,调用完毕自动释放。举个栗子:乒乓球盒子/搭建积木1.2 基本数据结构的存储(存储栈)javaScript中,...

2019-12-21 22:30:51 79

原创 商米系统升级PDA,PDA自动更新

(一)在商米系统里升级项目商米系统地址:https://partner.sunmi.com/login打包完成正式包以后,如下图的方式下载下来安卓的apk包,apk的命名为版本号,如1.3.3.apk2.登录商米系统,升级安装包在点击升级版本时如果提示签名不一致,则需要删除应用重新上传。(二.一)删除并重新上传应用1.打开商米,如下图点击 详情,本地存储下详...

2019-12-03 17:36:29 517

转载 JS引擎执行一段js的过程

最初,JavaScript 只能在 Web 浏览器中运行,但是随着 Node 的出现,现在 JavaScript 也可以在服务端运行。虽然我们可能知道应该在何时何地去使用它, 但是我们真的了解这些脚本执行的背后发生了什么吗?如果您觉得自己对 JavaScript 引擎有了一些了解的话,可以先给自己鼓个掌,但不要急着关掉本文,我相信阅读完成后您仍然可以从中学到一些东西。JavaScript ...

2019-11-27 23:19:01 35

转载 前端如何实现即时通讯?

短轮询短轮询的原理很简单,每隔一段时间客户端就发出一个请求,去获取服务器最新的数据,一定程度上模拟实现了即时通讯。优点:兼容性强,实现非常简单 缺点:延迟性高,非常消耗请求资源,影响性能Websocket使用指南请看WebSocket 教程Websocket是一个全新的、独立的协议,基于TCP协议,与http协议兼容、却不会融入http协议,仅仅作为html5的一部分,其作...

2019-11-24 16:43:04 705

转载 CentOS7 安装Nginx的两种方式

本文将为大家介绍在CentOS7系统下安装Nginx的两种方式。一、编译安装1. 安装编译安装所需要的依赖yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel2.下载Nginx安装 wget 这步可以省略,Linux 本身支持 wget 命令。yum install ...

2019-11-23 22:17:54 101

转载 为什么前端监控要用GIF打点

1背景我们知道,目前主流的前端监控(百度统计/友盟/谷歌统计)都在用GIF进行打点。但是,为什么这些系统都会使用GIF,难道是因为没有其他的解决方案吗?这得从前端监控的原理说起。2前端监控的原理所谓的前端监控,其实是在满足一定条件后,由Web页面将用户信息(UA/鼠标点击位置/页面报错/停留时长/etc)上报给服务器的过程。一般是将上报数据用url_encode(百度统计/CNZZ...

2019-11-10 17:04:08 507

转载 浅析TCP三次握手和四次挥手

TCP 三次握手TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是因为雾霾等原因不能100%确认,所以要通过招手的方式相互确定对方是否认识自己。张三首先向李四招手(syn),李四看到张三向自己招手后,向对方点了点头挤出了一个微笑(ack)。张三看到李四微笑后确认了李四成功辨认出了自己(进入estalished状态)。但是李四还有点狐疑,向四周看了一看,有没有可能张三是在看...

2019-11-09 22:37:32 37

转载 阿里云云服务器操作系统介绍与选择

首先,我们要清楚的便是每个系统之间的差别,以及在阿里云上的差别:1. Windows1.1) 系统内含正版激活。1.2) 适合于运行Windows下开发的程序,如.net等。1.3) 支持SQL Server等数据库(需自行安装)。1.4) 可以使用远程桌面方式登录进行管理。注:512内存不支持选择Windows系统,1G以上内存才能很好支持该系统。2. Linux...

2019-11-09 21:15:37 637

转载 第 1 题:(滴滴、饿了么)写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?

key能提高diff效率其实是不准确的。然后,官网推荐的使用key,应该理解为“使用唯一id作为key”。因为index作为key,和不带key的效果是一样的。index作为key时,每个列表项的index在变更前后也是一样的,都是直接判断为sameVnode然后节点复用。说到底,key的作用就是更新组件时判断两个节点是否相同。相同就复用,不相同就删除旧的创建新的。正是因为带唯一key...

2019-11-06 00:10:27 236

原创 域名的解析过程

一、域名的层级结构根域名域名的尾部都有一个根域名。www.baidu.com 真正的域名是 www.baidu.com.root,简写为www.baidu.com.,又因为根域名 .root 对于所有域名都是一样的,所以平时是省略的。子域名mail.example.com和calendar.example.com是example.com的两个子域,而example.com则是一级域...

2019-11-02 21:36:54 104

原创 js常用工具函数

1.解析 URL Params 为对象function parseParam(url) { const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来 const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中 let paramsObj =...

2019-10-27 22:03:05 61

原创 GitHook 工具 —— husky 配置

husky 是一个 GitHook 工具。本文主要实现提交前 eslint 校验和 commit 信息的规范校验。1. 安装 husky,lint-staged,@commitlint/cli,@commitlint/config-conventional 依赖lint-staged: 用于实现每次提交只检查本次提交所修改的文件。npm i -D husky lint-staged...

2019-10-22 21:24:55 12907

转载 什么是闭包?闭包的作用是什么?

闭包的定义《JavaScript高级程序设计》:闭包是指有权访问另一个函数作用域中的变量的函数《JavaScript权威指南》:从技术的角度讲,所有的JavaScript函数都是闭包:它们都是对象,它们都关联到作用域链。《你不知道的JavaScript》当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。自己的解释:一个...

2019-10-21 22:47:55 62

提示
确定要删除当前文章?
取消 删除