技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?

我从事技术写作的时间其实不长,开始写作的时间就是我掘金账号注册的时间: 到今天(2021年2月23日)也就是一年零一个月,这一年的收获是超过我的预期的: 产出博文四十多篇,总共数十万字 掘金优秀作者,掘金年度人气作者No.27 思否2020年度"Top Writer",万粉专栏作者 开源中国优秀源创 ... »

手写一个webpack,看看AST怎么用

本文开始我会围绕webpack和babel写一系列的工程化文章,这两个工具我虽然天天用,但是对他们的原理理解的其实不是很深入,写这些文章的过程其实也是我深入学习的过程。由于webpack和babel的体系太大,知识点众多,不可能一篇文章囊括所有知识点,目前我的计划是从简单入手,先实现一个最简单的可以 ... »

歪门邪道性能优化:魔改三方库源码,性能提高几十倍!

本文会分享一个React性能优化的故事,这也是我在工作中真实遇到的故事,最终我们是通过魔改第三方库源码将它性能提高了几十倍。这个第三方库也是很有名的,在GitHub上有4.5k star,这就是:react-big-calendar。 这个工作不是我一个人做的,而是我们团队几个月前共同完成的,我觉得 ... »

使用mono-repo实现跨项目组件共享

本文会分享一个我在实际工作中遇到的案例,从最开始的需求分析到项目搭建,以及最后落地的架构的整个过程。最终实现的效果是使用mono-repo实现了跨项目的组件共享。在本文中你可以看到: 从接到需求到深入分析并构建架构的整个思考过程。 mono-repo的简单介绍。 mono-repo适用的场景分析。 ... »

轻松理解HTTP缓存策略

上一篇文章我写了koa-static的源码解析,其中用到了HTTP的缓存策略,给返回的静态文件设置了一些缓存的头,比如Cache-Control之类的。于是我就跟朋友讨论了一下HTTP的缓存策略: 朋友说:“HTTP里面控制缓存的头(header)太多了,啥Cache-Control,ETag,La ... »

手写@koa/router源码

上一篇文章我们讲了Koa的基本架构,可以看到Koa的基本架构只有中间件内核,并没有其他功能,路由功能也没有。要实现路由功能我们必须引入第三方中间件,本文要讲的路由中间件是@koa/router,这个中间件是挂在Koa官方名下的,他跟另一个中间件koa-router名字很像。其实@koa/router ... »

手写Koa.js源码

用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器 第二篇文章是看了Express的基本用法,更主要的是看了下他的源码:手写Express.js源码 ... »

手写Express.js源码

上一篇文章我们讲了怎么用Node.js原生API来写一个web服务器,虽然代码比较丑,但是基本功能还是有的。但是一般我们不会直接用原生API来写,而是借助框架来做,比如本文要讲的Express。通过上一篇文章的铺垫,我们可以猜测,Express其实也没有什么黑魔法,也仅仅是原生API的封装,主要是用 ... »

使用Node.js原生API写一个web服务器

Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点。一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa。但是Express和Koa都是对Node.js原生API的封装,所以其实不借助任何框架,只用原生API ... »

手写Redux-Saga源码

上一篇文章我们分析了Redux-Thunk的源码,可以看到他的代码非常简单,只是让dispatch可以处理函数类型的action,其作者也承认对于复杂场景,Redux-Thunk并不适用,还推荐了Redux-Saga来处理复杂副作用。本文要讲的就是Redux-Saga,这个也是我在实际工作中使用最多 ... »

手写一个React-Redux,玩转React的Context API

上一篇文章我们手写了一个Redux,但是单纯的Redux只是一个状态机,是没有UI呈现的,所以一般我们使用的时候都会配合一个UI库,比如在React中使用Redux就会用到React-Redux这个库。这个库的作用是将Redux的状态机和React的UI呈现绑定在一起,当你dispatch acti ... »

手写React的Fiber架构,深入理解其原理

熟悉React的朋友都知道,React支持jsx语法,我们可以直接将HTML代码写到JS中间,然后渲染到页面上,我们写的HTML如果有更新的话,React还有虚拟DOM的对比,只更新变化的部分,而不重新渲染整个页面,大大提高渲染效率。到了16.x,React更是使用了一个被称为Fiber的架构,提升 ... »

不知道怎么提高代码质量?来看看这几种设计模式吧!

提高代码质量的目的 程序猿的本职工作就是写代码,写出高质量的代码应该是我们的追求和对自己的要求,因为: 高质量的代码往往意味着更少的BUG,更好的模块化,是我们扩展性,复用性的基础 高质量的代码也意味着更好的书写,更好的命名,有利于我们的维护 什么代码算好的质量 怎样来定义代码质量的"好",业界有很 ... »

不知道怎么提高代码可扩展性?来看看优秀框架源码中的这几种设计模式吧!

为什么要提高代码扩展性 我们写的代码都是为了一定的需求服务的,但是这些需求并不是一成不变的,当需求变更了,如果我们代码的扩展性很好,我们可能只需要简单的添加或者删除模块就行了,如果扩展性不好,可能所有代码都需要重写,那就是一场灾难了,所以提高代码的扩展性是势在必行的。怎样才算有好的扩展性呢?好的扩展 ... »

设计模式第二弹: 不知道怎么提高代码复用性?看看这几种设计模式吧!

本文是设计模式的第二篇文章,第一篇文章是 "不知道怎么封装代码?看看这几种设计模式吧!" ,后面还会有 ,`提高代码质量`的设计模式,点个关注不迷路,哈哈~ 想必大家都听说过 原则,其实就是 ,意思就是不要重复写一样的代码,换句话说就是要提高代码的复用性。那什么样的代码才算有好的复用性呢? 1. 对 ... »

不知道怎么封装代码?看看这几种设计模式吧!

为什么要封装代码? 我们经常听说:“写代码要有良好的封装,要高内聚,低耦合”。那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处: 1. 封装好的代码,内部变量不会污染外部。 2. 可以作为一个模块给外部调用。外部调用者不需要知道实现的细节,只需要按照约定的规范使用就行了。 3. 对扩 ... »

JS作用域和变量提升看这一篇就够了

作用域是JS中一个很基础但是很重要的概念,面试中也经常出现,本文会详细深入的讲解这个概念及其他相关的概念,包括声明提升,块级作用域,作用域链及作用域链延长等问题。 什么是作用域 第一个问题就是我们要弄清楚什么是作用域,这不是JS独有的概念,而是编程领域中通用的一个概念。我们以下面这个语句为例: 这一 ... »

JS做类型检测到底有几种方法?看完本文就知道了!

JS有很多数据类型,对于不同数据类型的识别和相互转换也是面试中的一个常考点,本文主要讲的就是类型转换和类型检测。 数据类型 JS中的数据类型主要分为两大类:原始类型(值类型)和引用类型。常见的数据类型如下图所示: 原始数据类型存在栈中,引用类型在栈中存的是一个引用地址,这个地址指向的是堆中的一个数据 ... »

从Generator入手读懂co模块源码

这篇文章是讲JS异步原理和实现方式的第四篇文章,前面三篇是: "setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop" "从发布订阅模式入手读懂Node.js的EventEmitter源码" "手写一个Promise/A+,完美通过官方872个测试用例" ... »

手写一个Promise/A+,完美通过官方872个测试用例

前段时间我用两篇文章深入讲解了异步的概念和Event Loop的底层原理,然后还讲了一种自己实现异步的发布订阅模式: "setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop" "从发布订阅模式入手读懂Node.js的EventEmitter源码" 本文会讲 ... »