Li Yucang

While there is life there is hope

Monorepo最佳实践

带你了解更全面的 Monorepo - 优劣、踩坑、选型

Monorepo最佳实践 为什么使用 monorepo 随着业务复杂度的上升,前端项目不管是从代码量上,还是从依赖关系上都会爆炸式增长。对于单页面应用或者多应用项目来说,各个应用之间的关系也会更加复杂,多个应用之间如何配合,如何维护相互关系?公共库版本如何管理?如何兼顾开发体验和上线构建效率?应用复杂度的问题如何解决,随着前端业务的发展逐渐浮出水面。 应用复杂度的场景场景大概有如下几类...

GraphQL搭建BFF实战

微服务背景下的前后端数据交互方案

GraphQL搭建BFF实战 前言 随着多终端、多平台、多业务形态、多技术选型等各方面的发展,前后端的数据交互,日益复杂。 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费。 在理想情况下,这些复杂性可以全部由后端承担。前端只管从后端接口里,拿到已然整合完善的数据。 然而,不管是因为后端的领域模型,还是因为微服务架构。作为前端,我们感受到的是,后端提供的接口,越发不够前端...

JavaScript库打包指南

搞懂CJS、UMD、ESM

JavaScript库打包指南 本指南旨在提供一些大多数库都应该遵循的一目了然的建议。以及一些额外的信息,用来帮助你了解这些建议被提出的原因,或帮助你判断是否不需要遵循某些建议。这个指南仅适用于 库(libraries),不适用于应用(app)。 要强调的是,这只是一些建议,并不是所有库都必须要遵循的。每个库都是独特的,它们可能有充足的理由不采用本文中的任何建议。 最后,这个指南不针对...

缓存淘汰算法详解

谈谈缓存淘汰的LRU和LFU算法

缓存淘汰算法详解 我们通常在设计一个系统的时候,由于数据库的读取速度远小于内存的读取速度,所以为了加快读取速度,会将一部分数据放到内存中,称为缓存。 但是内存容量是有限的,当你要缓存的数据超出容量,就得有部分数据删除,这时候哪些数据删除,哪些数据保留,就是缓存淘汰算法要干的事。 在缓存系统中,常用的缓存淘汰算法包括: FIFO LFU LRU ARC FIFO ...

koa源码解析

深入理解中间件和洋葱模型

koa源码解析 koa是什么 koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。 koa是一个精...

serviceworker运用与实践

深入浅出 Service Workers

serviceworker运用与实践 工作者线程(Web Workers) 官方文档规范参考:https://html.spec.whatwg.org/multipage/workers.html JavaScript 是单线程的,这样可以保证它与浏览器 API 兼容。如果 JavaScript 可以多线程执行并发更改,那么像 DOM 这样的 API 就会出现问题。因此 POS...

RPC详解

深入浅出RPC框架

RPC详解 RPC(Remote Procedure Call),即远程过程调用。RPC 的核心目的是实现进程间通信,在分布式环境中广泛应用。RPC 框架面向开发者屏蔽了网络底层逻辑,使远程调用可以像本地调用一样方便。 本地调用 假设你有一个Calculator,那么单体应用时,要调用Calculator的add方法来执行一个加运算,你可以方法中直接使用,因为在同一个地址空间,或者说在...

http压缩方式gzip、brotli比较

使用压缩减少HTTP传输时间

http压缩方式gzip、brotli比较 压缩原理 信息熵:数据为何是可以压缩的,因为数据都会表现出一定的特性,称为熵。绝大多数的数据所表现出来的容量往往大于其熵所建议的最佳容量。比如所有的数据都会有一定的冗余性,我们可以把冗余的数据采用更少的位对频繁出现的字符进行标记,也可以基于数据的一些特性基于字典编码,代替重复多余的短语 ​压缩原理其实很简单,就是找出那些重复出现的字符...

一个sshkey访问多个代码仓库

多代码仓库登陆管理

一个sshkey访问多个代码仓库 背景 在编码时,我们经常需要访问多个代码仓库中的代码,本文总结了只需要生成一个 ssh key 即可访问多仓库的方法。 生成SSH-Key 执行如下代码,默认一直回车就好: cd ~/.ssh ssh-keygen -t rsa -C "your email" 添加 known_hosts 将需要访问的多个代码仓库域名添加到known_hos...

前端包管理器对比 npm、yarn 和 pnpm

为什么现在我更推荐 pnpm 而不是 npm/yarn

前端包管理器对比 npm、yarn 和 pnpm 前言 本文先从前端包管理器的发展开始说起,对比 npm、yarn 和 pnpm 的差异,最后再通过详细介绍 pnpm 的特性来说明为什么现在前端包管理更推荐使用 pnpm。 前端包管理器的发展 没有包管理器 依赖(dependency)是别人为了解决一些问题而写好的代码,即我们常说的第三方包或三方库。 一个项目或多或少的会有一些依...