ioredis源码阅读[1]

2021-06-04
阅读 5 分钟
3.1k
上次针对 redis 的源码阅读涉及普通的 client,这次针对 cluster 模式下的 client 源码进行分析。 具体的源码路径就是在 lib/cluster 目录下了。

GitLab CI/CD 在 Node.js 项目中的实践

2019-05-30
阅读 10 分钟
8.2k
近期在按照业务划分项目时,我们组被分了好多的项目过来,大量的是基于 Node.js 的,也是我们组持续在使用的语言。 现有流程中的一些问题 在维护多个项目的时候,会暴露出一些问题: 如何有效的使用 测试用例 如何有效的使用 ESLint 部署上线还能再快一些吗 使用了 TypeScript 以后带来的额外成本 测试用例 首先是测试用...

使用JSDoc提高代码的可读性

2019-04-22
阅读 6 分钟
5.7k
工作了四年多,基本上都在围绕着 JavaScript 做事情。 写的代码多了,看的代码也多了,由衷的觉得,写出别人看不懂的代码并不是什么能力,写出所有人都能读懂的代码,才是真的牛X。 众所周知, JavaScript 是一个弱类型的脚本语言,这就意味着,从编辑器中并不能直观的看出这段代码的作用是什么,有些事情只有等到代码真...

Node程序debug小记

2019-01-17
阅读 7 分钟
2.3k
有时候,所见并不是所得,有些包,你需要去翻他的源码才知道为什么会这样。 背景 今天调试一个程序,用到了一个很久之前的NPM包,名为formstream,用来将form表单数据转换为流的形式进行接口调用时的数据传递。 这是一个几年前的项目,所以使用的是Generator+co实现的异步流程。 其中有这样一个功能,从某处获取一些图片...

基于游标的分页接口实现

2018-11-12
阅读 6 分钟
5.8k
接口传入请求的页码、以及每页要请求的条数,我个人猜想这可能和大家初学的时候所接触的数据库有关吧- -,我所认识的人里边,先接触MySQL、SQL Server什么的比较多一些,以及类似的SQL语句,在查询的时候基本上就是这样的一个分页条件:

了解可执行的NPM包

2018-10-26
阅读 5 分钟
6.5k
NPM是Node.js的包管理工具,随着Node.js的出现,以及前端开发开始使用gulp、webpack、rollup以及其他各种优秀的编译打包工具(大多数采用Node.js来实现),大家都开始接触到一些Node.js,发现了使用NPM来管理一些第三方模块会很方便。 大家搬砖的模式也是从之前的去插件官网下载XXX.min.js改为了npm install XXX,然后在...

util.promisify 的那些事儿

2018-10-18
阅读 5 分钟
11.9k
util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松。

如何编写 Typescript 声明文件

2018-10-15
阅读 7 分钟
9.4k
使用TypeScript已经有了一段时间,这的确是一个好东西,虽说在使用的过程中也发现了一些bug,不过都是些小问题,所以整体体验还是很不错的。

async语法升级踩坑小记

2018-09-28
阅读 6 分钟
5.3k
从今年过完年回来,三月份开始,就一直在做重构相关的事情。 就在今天刚刚上线了最新一次的重构代码,希望高峰期安好,接近半年的Node.js代码重构。 包含从callback+async.waterfall到generator+co,统统升级为了async,还顺带推动了TypeScript在我司的使用。 这些日子也踩了不少坑,也总结了一些小小的优化方案,进行精...

适配器在JavaScript中的体现

2018-09-19
阅读 4 分钟
4.7k
适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题、整合多个第三方SDK的调用,都可以看到它的身影。 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就是老前辈们总结提炼出来的一些能够帮助提升开发效率的一些模版,源于日常的开发中。 而适配器其实在JavaScript中应该是...

使用TS+Sequelize实现更简洁的CRUD

2018-09-10
阅读 8 分钟
14.6k
如果是经常使用Node来做服务端开发的童鞋,肯定不可避免的会操作数据库,做一些增删改查(CRUD,Create Read Update Delete)的操作,如果是一些简单的操作,类似定时脚本什么的,可能就直接生写SQL语句来实现功能了,而如果是在一些大型项目中,数十张、上百张的表,之间还会有一些(一对多,多对多)的映射关系,那么...

使用 TypeScript 改造构建工具及测试用例

2018-09-03
阅读 6 分钟
4.1k
最近的一段时间一直在搞TypeScript,一个巨硬出品、赋予JavaScript语言静态类型和编译的语言。 第一个完全使用TypeScript重构的纯Node.js项目已经上线并稳定运行了。 第二个前后端的项目目前也在重构中,关于前端基于webpack的TypeScript套路之前也有提到过:TypeScript在react项目中的实践。

TypeScript在react项目中的实践

2018-08-27
阅读 9 分钟
12.4k
前段时间有写过一个TypeScript在node项目中的实践。 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的。 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我来主持,经过上次的实践以后,尝到了TS所带来的甜头,毫不犹豫的选择用TS+React来重构这个项目。 这次的重构不仅包括Node的重构...

koa源码阅读[3]-koa-send与它的衍生(static)

2018-08-24
阅读 8 分钟
5.9k
处理静态文件是一个繁琐的事情,因为静态文件都是来自于服务器上,肯定不能放开所有权限让接口来读取。 各种路径的校验,权限的匹配,都是需要考虑到的地方。 而koa-send和koa-static就是帮助我们处理这些繁琐事情的中间件。 koa-send是koa-static的基础,可以在NPM的界面上看到,static的dependencies中包含了koa-send。

微任务、宏任务与Event-Loop

2018-08-16
阅读 9 分钟
8.2k
首先,JavaScript是一个单线程的脚本语言。 所以就是说在一行代码执行的过程中,必然不会存在同时执行的另一行代码,就像使用alert()以后进行疯狂console.log,如果没有关闭弹框,控制台是不会显示出一条log信息的。 亦或者有些代码执行了大量计算,比方说在前端暴力破解密码之类的鬼操作,这就会导致后续代码一直在等待...

koa源码阅读[2]-koa-router

2018-08-09
阅读 24 分钟
4.7k
首先,因为koa是一个管理中间件的平台,而注册一个中间件使用use来执行。 无论是什么请求,都会将所有的中间件执行一遍(如果没有中途结束的话) 所以,这就会让开发者很困扰,如果我们要做路由该怎么写逻辑?

koa源码阅读[1]-koa与koa-compose

2018-07-30
阅读 12 分钟
3.6k
接上次挖的坑,对koa2.x相关的源码进行分析 第一篇。 不得不说,koa是一个很轻量、很优雅的http框架,尤其是在2.x以后移除了co的引入,使其代码变得更为清晰。

koa源码阅读[0]

2018-07-23
阅读 7 分钟
3.1k
Node.js也是写了两三年的时间了,刚开始学习Node的时候,hello world就是创建一个HttpServer,后来在工作中也是经历过Express、Koa1.x、Koa2.x以及最近还在研究的结合着TypeScript的routing-controllers(驱动依然是Express与Koa)。 用的比较多的还是Koa版本,也是对它的洋葱模型比较感兴趣,所以最近抽出时间来阅读其...

TypeScript在node项目中的实践

2018-07-22
阅读 7 分钟
8.7k
TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法。 最近的一个新项目开始了TS的踩坑之旅,现分享一些可以借鉴的套路给大家。

Javascript装饰器的妙用

2018-07-09
阅读 15 分钟
18k
最近新开了一个Node项目,采用TypeScript来开发,在数据库及路由管理方面用了不少的装饰器,发觉这的确是一个好东西。 装饰器是一个还处于草案中的特性,目前木有直接支持该语法的环境,但是可以通过 babel 之类的进行转换为旧语法来实现效果,所以在TypeScript中,可以放心的使用@Decorator。

纯原生组件化-模块化的探索

2018-07-01
阅读 15 分钟
6.4k
纯原生的组件化、模块化的一次小小的尝试,用到了如下几个新特性:shadown-DOM 对HTML标签结构的一个封装,真正意义上的组件,能保证 shadow-DOM 中的DOM元素不会被外界影响,内部也不会影响到外部的行为,变成了一个独立的模块。 custom-elements 可以在浏览器中注册自定义的标签来使用,类似这样的效果<my-tag>&...

原生ES-Module在浏览器中的尝试

2018-06-10
阅读 5 分钟
8.7k
其实浏览器原生模块相关的支持也已经出了一两年了(我第一次知道这个事情实在2016年下半年的时候) 可以抛开webpack直接使用import之类的语法 但因为算是一个比较新的东西,所以现在基本只能自己闹着玩 :p 但这并不能成为不去了解它的借口,还是要体验一下的。

记一次Node项目的优化

2018-06-09
阅读 5 分钟
3.1k
这两天针对一个Node项目进行了一波代码层面的优化,从响应时间上看,是一次很显著的提升。 一个纯粹给客户端提供接口的服务,没有涉及到页面渲染相关。

拿Proxy可以做哪些有意思的事儿

2018-05-24
阅读 5 分钟
20.8k
首先,我们要清楚,Proxy是什么意思,这个单词翻译过来,就是 代理。 可以理解为,有一个很火的明星,开通了一个微博账号,这个账号非常活跃,回复粉丝、到处点赞之类的,但可能并不是真的由本人在维护的。 而是在背后有一个其他人 or 团队来运营,我们就可以称他们为代理人,因为他们发表的微博就代表了明星本人的意思...

使用box-shadow进行画图(性能优化终结者)

2018-05-20
阅读 6 分钟
4.8k
最近突然想做一些好玩的东西,找来找去,想到了之前曾经在网上看到过有人用box-shadow画了一副蒙娜丽莎出来 感觉这个挺有意思,正好趁着周末,自己也搞一波

Generator的正确打开方式

2018-05-16
阅读 6 分钟
2.4k
前两年大量的在写Generator+co,用它来写一些类似同步的代码 但实际上,Generator并不是被造出来干这个使的,不然也就不会有后来的async、await了 Generator是一个可以被暂停的函数,并且何时恢复,由调用方决定 希望本文可以帮助你理解Generator究竟是什么,以及怎么用

如何更好的编写async函数

2018-05-13
阅读 5 分钟
4.3k
2018年已经到了5月份,node的4.x版本也已经停止了维护 我司的某个服务也已经切到了8.x,目前正在做koa2.x的迁移 将之前的generator全部替换为async 但是,在替换的过程中,发现一些滥用async导致的时间上的浪费所以来谈一下,如何优化async代码,更充分的利用异步事件流 杜绝滥用async

如何在ES5与ES6环境下处理函数默认参数

2018-05-12
阅读 3 分钟
2.5k
函数默认值是一个很提高鲁棒性的东西(就是让程序更健壮)MDN关于函数默认参数的描述:函数默认参数允许在没有值或undefined被传入时使用默认形参。

JavaScript异步编程:Generator与Async

2018-05-06
阅读 5 分钟
4.7k
从Promise开始,JavaScript就在引入新功能,来帮助更简单的方法来处理异步编程,帮助我们远离回调地狱。 Promise是下边要讲的Generator/yield与async/await的基础,希望你已经提前了解了它。

数组的遍历你都会用了,那Promise版本的呢

2018-04-26
阅读 5 分钟
22.2k
这里指的遍历方法包括:map、reduce、reduceRight、forEach、filter、some、every因为最近要进行了一些数据汇总,node版本已经是8.11.1了,所以直接写了个async/await的脚本。但是在对数组进行一些遍历操作时,发现有些遍历方法对Promise的反馈并不是我们想要的结果。