SF
我只是个前端AI
我只是个前端AI
注册登录
关注博客
注册登录
主页
关于
RSS
HTTP 协议的缓存机制概述
Bernie维尼
2019-12-13
阅读 4 分钟
1.6k
HTTP 协议的缓存机制涉及到多个请求头字段,而且整个缓存机制的细节行为也存在各种情况的差异,譬如说什么时候访问本地缓存不发送请求,什么时候发送请求查看资源是否更新,获取 response 什么情况下更新缓存等。以前我对此一知半解只是笼统的知道一些概念,譬如 Cache-Control 可以控制缓存的时间和是否需要缓存,但是...
npm package开发指南-包内容篇
Bernie维尼
2019-12-06
阅读 3 分钟
1.5k
如果开发人员安装了你的库,那么引入的时候找哪个文件?编译源码生成 dist/index.js,并在 package.json 中增加一个 main 字段指向这个文件。
ES6模块默认导出和变量绑定(Default Exports and Exporting bindings)
Bernie维尼
2019-08-22
阅读 3 分钟
5.3k
JavaScript 现在最主流的模块机制是 commonjs 和 ES6 module。两者不单是语法上有所区别,在加载的时候也有所不同,譬如 commonjs 是运行时加载,ES6模块是编译时输出接口的。还有一个重要的区别是 commonjs 导出的东西是值拷贝,而 ES6 模块导出的东西是……暂时认为是引用拷贝吧。具体表现出来的区别看下面的例子:
package-locks 机制简述
Bernie维尼
2019-07-30
阅读 1 分钟
1.5k
然后你把 package.json 提交到代码库。过了一段时间,有新人加入到项目里面。他克隆出了代码,然后本地安装依赖包 npm install。在他安装的时候 eslint 已经发布了新的版本5.16.0。那么新人本地安装的 eslint 版本就会变成5.16.0。这个机制意味着同一份 package.json 在不同时间安装出来的依赖包有可能不一样。可能造成...
如何使用Git Rebase
Bernie维尼
2019-06-12
阅读 4 分钟
11.9k
我们在日常开发中使用 Git 做分支合并的时候有两种方式:merge 和 rebase。merge 是最常用的,rebase 使用的没有 merge 这么多,那么 rebase 和 merge 有什么区别呢?什么时候使用 rebase?使用 rebase 的时候有什么注意事项呢?接下来我来介绍下这三个问题。
ESLint+Prettier代码规范实践
Bernie维尼
2019-06-04
阅读 5 分钟
6.3k
代码规范校验使用 ESLint,但是一开始 ESLint 只有检测告诉你哪里有问题,常常出现的情况就是一堆 warning,改起来很痛苦。后来 ESLint 提供了 $ ESLint filename --fix 的命令可以自动帮你修复一些不符合规范的代码。Prettier 是一个代码格式化工具,可以帮你把代码格式化成可读性更好的格式,最典型的就是一行代码过长...
leetcode算法第10题正则表达式匹配-回溯-动态规划
Bernie维尼
2019-05-24
阅读 6 分钟
2.6k
题目 简要贴下题目,具体详见这里: 给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。 '.' 匹配任意单个字符。'*' 匹配零个或多个前面的元素。 匹配应该覆盖整个字符串 (s) ,而不是部分字符串。 说明: s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,...
前端项目请求层封装过程
Bernie维尼
2019-04-06
阅读 6 分钟
3.5k
调用 ajax 取请求后端数据是项目中最基础的功能。但是如果每次直接调用底层的浏览器 api 去发请求则非常麻烦。现在来分析一下怎么封装这一层,看看有哪些基础问题需要考虑。本文底层使用 fetch ,如果你使用 XMLHttpRequest 甚至第三方库(譬如:axios)封装过程都是大同小异的。
React16性能改善的原理(二)
Bernie维尼
2019-03-13
阅读 6 分钟
2.5k
上一篇我们提到如果 setState 之后,虚拟 dom diff 比较耗时,那么导致浏览器 FPS 降低,使得用户觉得页面卡顿。那么 react 新的调度算法就是把原本一次 diff 的过程切分到各个帧去执行,使得浏览器在 diff 过程中也能响应用户事件。接下来我们具体分析下新的调度算法是怎么回事。
使用IndexedDB做前端日志持久化
Bernie维尼
2019-03-08
阅读 10 分钟
5.9k
页面如果表现不符合预期,前端工程师在没有 javascript 日志的情况下,很难 debug。所以就需要针对必要的步骤记录日志,并上传。但是每记录一条日志就上传并不是一个合适的选择,譬如如果生成日志的操作比较密集,会频繁产生上传日志请求的情况。那么我们可以在页面做一次日志的缓存,把日志先存在本地,当缓存达到一定...
React16性能改善的原理一
Bernie维尼
2019-02-21
阅读 6 分钟
3.1k
React16 更新了底层架构,新架构主要解决更新节点过多时,页码卡顿的问题。譬如如下代码,根据用户输入的文字生成10000行数据,用户输入框会出现卡顿现象。
前端项目目录如何组织
Bernie维尼
2018-07-31
阅读 4 分钟
4.3k
由于 antd pro 本身引用了 antd 的组件库,所以不存在自己写通用组件的步骤。但是有的时候我们自己项目会有自己写通用组件的需要。组件除了有通用组件,还会有业务组件。通用组件是粒度比较细且和业务无关的组件,譬如 Dropdown。而业务组件可能是你这个项目特有的,譬如工具栏,或者某种特殊的弹框。业务组件大多数情况...
通过npm包来制作命令行工具的原理
Bernie维尼
2018-06-07
阅读 3 分钟
10.4k
用过构建工具的亲们知道,通常通过全局安装一个 xxx-cli 的 npm 包,就能在命令行用命令进行构建。那么这个 npm 包如何变成一个可执行的命令呢?
WebSocket与http长连接的区别
Bernie维尼
2018-05-31
阅读 3 分钟
27.7k
GET / HTTP/1.1 Host: localhost:8080 Origin: [url=[链接]:3000][链接]:3000[/url] Connection: Upgrade Upgrade: WebSocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==
KeyboardEvent和快捷键
Bernie维尼
2017-12-16
阅读 3 分钟
7.9k
项目中需要对网页的 UI 操作设置快捷键,但是我们的开发机是 Mac,用户使用的是 Windows。所以开发起来遇到一些小小的坑。现在我们来梳理下这些知识点。
function作为构造函数和非构造函数调用的区别
Bernie维尼
2017-05-26
阅读 3 分钟
2.1k
var currentTime = Date() 能生成一个当前时间的日期对象,var currentTime = new Date() 也能生成一个同样的对象。如果你看过一些框架,那么你会发现有的框架生成对象写法是 new ClassName(),有的框架是 className()。 那么两种方式有什么区别呢?
什么是作用域和执行上下文
Bernie维尼
2017-05-23
阅读 4 分钟
9.7k
说到 Javascript 中的作用域,通常一同出现的还有一个执行上下文(execution context)的概念,以前我在网上搜索相关的内容总是理不清这两者的关系。似乎函数,作用域,执行上下文这三者天生就是纠缠在一起的。为了获得一手的资料我翻看了 ES6 规范,把他们到底是什么梳理了一下:
ES6 迭代器简介
Bernie维尼
2017-05-20
阅读 3 分钟
3.4k
简单介绍下 ES6 规范里面迭代器(Iterator)相关的概念。最近为啥会看到迭代器,是因为看了 fetch 相关的 Headers 接口,为了实现下 Headers 接口就涉及到了迭代器。
React 奇技淫巧 - defaultValue 和虚拟 dom diff 算法实现表单重置
Bernie维尼
2017-05-19
阅读 3 分钟
3.9k
我们知道 React 的标准模式是单向数据流,而其表单项通常需要监听 onChange 事件,然后通过改变外部的 value 来回写表单项的 value,譬如如下 input
如何面试JS原理
Bernie维尼
2017-05-18
阅读 2 分钟
2.1k
先说说最近两件让我有点诚惶诚恐的事情。第一件,是前段时间我花了一点时间去读了一点 ES6 规范。对于第一次读规范的我是比较困难的,因为有很多术语及平时不常见的描述方式。经过几个知识点的阅读,我已经能读得比较顺畅,也掌握了规范层面的原理,我也很有成就感。但是随后当我开始入坑 react-native 并写 demo 的时候...
SPA项目经验总结
Bernie维尼
2017-05-17
阅读 2 分钟
6.5k
最近选用了 React + React-Router 的技术栈,自然而然走了 SPA 的路线,下面总结下在所谓的 SPA 下的一些技术点的坑。
React 更新视图过程
Bernie维尼
2017-05-16
阅读 6 分钟
2.7k
说在前面,着重梳理实际更新组件和 dom 部分的代码,但是关于异步,transaction,批量合并新状态等新细节只描述步骤。一来因为这些细节在读源码的时候只读了部分,二来如果要把这些都写出来要写老长老长。
React 渲染过程
Bernie维尼
2017-05-15
阅读 6 分钟
4.8k
拿 ReactDOM render 的部分(<div className="test">...</div>)为例,用 babel 把 jsx 转成 js 后得到如下代码:
React组件编写思路(二)
Bernie维尼
2017-05-12
阅读 4 分钟
2.2k
上一篇讲了 React 两种最常见的组件:受控组件和非受控组件。为了可用性,我们一般编写出来的组件希望支持这两种特性:可以通过组件自身的方法来改变组件的某(些)状态,也可以通过 props 的值的变化来改变组件自身的同一个(些)状态。
React组件编写思路(一)
Bernie维尼
2017-05-12
阅读 5 分钟
3.4k
新手写 React 组件往往无从入手,怎么写,什么时候用 props,什么时候用 state 摸不着头脑。其实是没有了解到 React 的一些思想。就我个人的经验大多数的组件都有一定的套路可言,接下来就先介绍下 React 组件的基本思想。