Chrome Devtool 网络请求timing

Stalled: 是浏览器得到要发出这个请求的指令,到请求可以发出的等待时间,一般是代理协商、以及等待可复用的TCP连接释放的时间,不包括DNS查询、建立TCP连接等时间等

Request sent: 请求第一个字节发出前到最后一个字节发出后的时间,也就是上传时间

Waiting: 请求发出后,到收到响应的第一个字节所花费的时间(Time To First Byte)

Content Download: 收到响应的第一个字节,到接受完最后一个字节的时间,就是下载时间

Webpack异步ChunkName

webpack2.4+ 异步chunkName

  1. 在项目.babelrc中添加”comments”: true, 保留注释
  2. 异步组件注释语法 const Test = () => import(/ webpackChunkName : “Hello” / ‘@/components/Test’)
  3. 按chunkName输出文件名, 修改prod.conf.js中output项 chunkFilename: utils.assetsPath(‘js/[name].js’)
  4. 按上述方法,则最终该chunk会输出为Hello.js

Nginx server location正则

Nginx location的语法形式:

location [=|~|~*|^~|@] /uri/ { … }

=: 阻止匹配正则,严格匹配

^~: 阻止匹配正则,最大匹配

~: 区分大小写

~*: 不区分大小写

@: 定义”Named Location”

Chrome Network filters

Network filter 支持的属性的完整列表:

  • domain: 只显示来自指定域的资源。您可以使用通配符()来包含多个域。例如, .com显示以.com结尾的所有域名的资源。 DevTools使用它遇到的所有域填充自动完成下拉菜单。
  • has-response-header: 显示包含指定HTTP响应头的资源。 DevTools使用它遇到的所有响应标头填充自动完成下拉列表。
  • is: 使用方法是:运行以查找WebSocket资源。

浏览器缓存协商

浏览器缓存协商

  1. last-modified:根据last-modified作为时间点,发起if-modified-since,询问server在此之后有没有修改,若有304,否则200
  2. etag指纹: 同时存在Etag和Last-Modified的时候,Etag优先。发起if-none-match,比对etag是否一致,若一致304,否则200。
  3. expires: 首次访问,server缓存过期时间n,n之内的时间,不发请求,直接启用缓存,n之外,走1,2流程

    优先级:expires -> etag -> last-modified
    没有缓存,返回200

Javascript递归遍历树

递归是一个很常用的算法,虽然,因为调用栈的原因,资源消耗比较大,但其简单优雅的用法,使之广受欢迎。递归常用在不可预期层级数的树形数据结构遍历。

递归有三个基本的概念:入栈、出栈、出口。这三个概念说简单也简单,说复杂也复杂,关键在于对函数的理解,这里不展开讨论该内容。

由于,经常需要在前端遍历菜单等树形结构,又不想每次翻以前的夹杂着业务逻辑的代码,这里干脆做一个原始的深度优先遍历demo,以备查阅。

前端单元测试

为什么需要单元测试

  • 正确性:测试可以验证代码的正确性,在上线前做到心里有底
  • 自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到保证。通过编写测试用例,可以做到一次编写,多次运行
  • 解释性:测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些API。其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途径,有时比文档说明更清晰
  • 驱动开发,指导设计:代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性,就需要在开发中注意API的设计,TDD将测试前移就是起到这么一个作用
  • 保证重构:互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎么才能保证重构后代码的质量呢?有测试用例做后盾,就可以大胆的进行重构

Curl调试restful接口

Curl可以很方便的配合restful接口调试,不过,其参数相当复杂,这里把最常用的CRUD方法简要记录一下。

curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。——百度百科

Canvas图像处理

Canvas图像处理能力,主要是依赖ImageData 对象,该对象中存储着canvas对象真实的像素数据,它包含以下几个只读属性:width,图片宽度;height,图片高度,单位均是像素;data,Uint8ClampedArray类型的一维数组,包含着RGBA格式的整型数据,范围在0至255之间(包括255)。

最关键的就是这个data属性,它里面包含图像的初始像素数据,且是可以更改的。它是一个类型化数组,按照rgba的色彩模型,每4项描述一个像素点的色彩信息。举个例子:

[255,0,0,0,0,255,0,0,0,0,255,0]

H5图片上传本地预览

这个例子之前也曾多次写过,主要是依赖ES5提供的Blob对象。

Blob简介

ECMAScript 5引入了Blob对象,允许直接操作二进制数据。Blob对象是一个代表二进制数据的基本对象,在它的基础上,又衍生出一系列相关的API,用来操作文件。

File对象:负责处理那些以文件形式存在的二进制数据,也就是操作本地文件;
FileList对象:File对象的网页表单接口;
FileReader对象:负责将二进制数据读入内存内容;
URL对象:用于对二进制数据生成URL。