简单优雅的JavaScript代码片段(三):合并请求,成批发出

2023-06-05
阅读 6 分钟
1.3k
简单优雅的JavaScript代码片段文章系列:简单优雅的JavaScript代码片段(一):异步控制简单优雅的JavaScript代码片段(二):流控和重试简单优雅的JavaScript代码片段(三):合并请求,成批发出场景说明后端提供的接口具备批量查询能力(比如,同时查询10个资源的详情信息),但是调用者每次只需要请求一个资源的详情...

手写一个Parser - 代码简单而功能强大的Pratt Parsing

2022-02-24
阅读 8 分钟
4k
在编译的流程中,一个很重要的步骤是语法分析(又称解析,Parsing)。解析器(Parser)负责将Token流转化为抽象语法树(AST)。这篇文章介绍一种Parser的实现算法:Pratt Parsing,又称Top Down Operator Precedence Parsing,并用TypeScript来实现它。

【代码鉴赏】简单优雅的JavaScript代码片段(二):流控和重试

2021-11-06
阅读 6 分钟
3.3k
后端为了保证系统稳定运行,往往会对调用频率进行限制(比如每人每秒不得超过10次)。为了避免造成资源浪费或者遭受系统惩罚,前端也需要主动限制自己调用API的频率。

微前端架构下的样式管控模式:使用CSS Variable来实现“样式参数”

2021-05-30
阅读 4 分钟
3.8k
目前,社区比较关注微前端应用样式的”隔离性“,网上已经有诸多文章介绍了微前端的样式隔离方案。然而,如果微应用的样式只有“隔离性”而没有“可操控性”,那么微应用的样式就是定死的:如同一个不接受外部参数的函数,永远只做预先定义的事情,不接受调用者的管控和配置。

数据系统杂谈:React,数据一致性,计算与通信的本质

2021-03-11
阅读 5 分钟
2.5k
揭晓答案:在id变化以后的第一次渲染,useAsync仍会返回上一个id对应的data。这一次渲染产生了两个不一致的数据:新的id和旧的data。

为什么信息产业更容易出现寡头?他们如何驯服标准为自己服务?

2020-12-09
阅读 4 分钟
975
你是否发现,在信息技术产业,经常会出现一家公司占据绝大部分市场的情况:微信、Windows、苹果、Photoshop、Google搜索、Chrome浏览器、Photoshop……大量的IT公司或产品,都在自己的领域呈现主导性优势。

程序员与流水线工人的区别

2020-10-31
阅读 2 分钟
2.2k
看到最近流行起来的“打工人”的梗,在捧腹大笑以后,我也开始严肃地思考程序员这个工种的本质,开始思考“为什么程序员薪资那么高”。现在将思考结果写出来与各位交流,欢迎与我分享你的思考。

React hooks之痛:低效的变化传播

2020-08-22
阅读 1 分钟
2.4k
不能。React hooks有一个致命的缺陷:数据变化每传播一步就需要等待1轮渲染。如果通过hook来定义计算关系,那么变化的传播会非常低效。

假设某个编程语言不支持函数调用本身,如何实现递归

2020-08-15
阅读 2 分钟
1.8k
本文用于记录我在阅读康托尔、哥德尔、图灵——永恒的金色对角线时的思考和实现(主要是其中的YCombinator部分),因此本文不会完整地叙述前因后果。举个例子,使用常见的语言,任何人都能毫不费力地写出一个阶乘函数。下面用JavaScript举例: {代码...} 但是,一个有意思的思考是,假设当前语言不支持函数调用自身,我们...

从前端的视角理解数据和缓存

2020-07-13
阅读 4 分钟
3.1k
数据系统是如此的普遍,以至于开发者实际上每天都在设计数据系统,却常常没有意识到它们的普适性,将多个本质相同的问题当作了孤立的问题来理解。应用状态管理、配置管理、用户数据管理问题,本质上都属于数据系统的问题。

【React的作弊模式】理解useReducer的优势和高级用法

2020-06-28
阅读 5 分钟
11.2k
或许你已经知道,“当多个state需要一起更新时,就应该考虑使用useReducer”;或许你也已经听说过,“使用useReducer能够提高应用的性能”。但是篇文章希望帮助你理解:为什么useReducer能提高代码的可读性和性能,以及如何在reducer中读取props的值。

【代码鉴赏】简单优雅的JavaScript代码片段(一):异步控制

2020-06-28
阅读 2 分钟
4.6k
Promise.race不满足需求,因为如果有一个Promise率先reject,结果Promise也会立即reject;Promise.all也不满足需求,因为它会等待所有Promise,并且要求所有Promise都成功resolve。

两种数据消费方式:pull与push,阴与阳

2020-06-15
阅读 3 分钟
7.2k
pull和push,是在软件中消费数据的两种方式,它们描述了数据生产者(或持有者)与数据消费者之间是如何通讯的。过去我们肯定了解过它们,不过可能会在编程中会忽略它们之间的区别与联系,本篇文章希望帮助大家理解这两者的区别于联系,从而在编程中有意识地分辨与选择它们。

JavaScript的WeakMap:向【不属于你的对象】添加【私有数据】

2020-06-14
阅读 2 分钟
2.3k
例子1:dom对象,是由浏览器创建的,并且它会被你无法掌控的代码使用(比如大部分页面的dom由React框架管理,又或者当前页面同时运行了别人编写的JavaScript),那么你就不是这个对象的拥有者,应该避免往上面添加属性。

【React性能优化总结】React组件什么时候重新渲染?如何做性能优化?

2020-04-18
阅读 2 分钟
5.7k
过渡期完成以后,函数式组件成为正统的React的开发模型,"component"就用来指代function component,而classes会使用“legacy class components”的方式来指代。未来不会出现“必须使用class组件才能实现”的React行为。

【JavaScript函数式编程】自己实现惰性数据流、数据流操作符

2020-03-25
阅读 13 分钟
5k
在JavaScript的世界中,ES6的iterable和generator的背后的思想其实就是惰性数据流。对比现在人们对这个思想的诠释(迭代器模式)和40年前的诠释,感觉非常奇妙,加深了我对iterable和generator的理解。

React hooks,组合与抽象,状态管理

2020-03-18
阅读 6 分钟
4k
用户可以定义一个状态仓储来容纳被共享的状态。状态仓储可以是一个全局对象,或者是一系列依附于组件树的对象。一般都会形成一个树状的数据结构,同构于应用的功能树。

leetcode 刷题总结归纳(干货)

2020-02-16
阅读 27 分钟
10.9k
通用建议:题目一般只给一两个输入示例,这是远远不够的。我们思考的时候经常会被示例给束缚(脑子里只对着那个示例想)。如果自己在做题的时候,在纸上多构造几个示例,对比(找不同)和归纳(找相同),会大大增加解决的概率。

【Typescript技巧】如何从“参数类型”推导出合适的“返回类型”

2019-09-30
阅读 2 分钟
6.4k
map是一个用来做数组mapping的高阶函数,先接收mapping function(将【输入数组的项】映射为【输出数组的项】),然后接收输入数组,返回输出数组。当mapping function没有传入时,mapping function默认为一个不做任何转化的函数(即x=>x)。

Typescript工具类型 - 整理汇总

2019-09-30
阅读 6 分钟
6.5k
Typescript工具类型已经内置在es5类型声明中,无需定义即可使用。不需要一次记住所有工具,只需留下印象,将来需要时再来查阅即可。文章目录已经组织成易于查阅的形式。函数工具ConstructorParameters {代码...} 输入构造函数的类型,输出构造函数的参数的类型。例子: {代码...} InstanceType {代码...} 输入构造函数的...

在React项目中优雅地使用Typescript

2019-09-29
阅读 5 分钟
23.3k
「优雅」的含义: 减少编写冗余的类型定义、类型标注,充分利用ts的自动类型推断,以及外部提供的类型声明。 类型安全:提供足够的类型信息来避免运行时错误,让错误暴露在开发期。这些类型信息同时能够提供代码补全、跳转到定义等功能。 组件定义 函数组件 {代码...} FC是FunctionComponent的缩写。 IProps无需声明chil...

Algebraic Effects,以及它在React中的应用

2019-08-18
阅读 6 分钟
6.8k
Algebraic Effects是一个在编程语言研究领域新兴的机制,虽然目前还没有工业语言实现它,但是在React社区会经常听到关于它的讨论。React最近新特性(Suspense和hooks)的背后实际上是Algebraic Effects的概念。因此,我花了一些时间来了解Algebraic Effects,希望体悟到React团队是如何理解这些新特性的。

React Fiber架构如何从JS引擎手中“夺回”调度权

2019-08-18
阅读 4 分钟
4.9k
time slicing将渲染工作切分,保证JavaScript的执行不会造成卡顿:如果当前帧的时间片已经用完,React就将控制权交还给浏览器,剩下的工作等到下一帧再做

coursera课程《学会如何学习》知识大纲分享

2019-01-06
阅读 1 分钟
2.9k
如果你觉得幕布这个知识大纲整理工具很好用,欢迎使用我的邀请链接来注册:https://mubu.com/inv/2060390 。你和我都会获得30天的高级版~

设计模式的知识大纲分享

2019-01-02
阅读 1 分钟
1.8k
最近一段时间,通过阅读《head first 设计模式》和其他资料,系统地学习了设计模式的知识。我将自己的思考和总结做成了知识大纲与大家分享:[链接]

浏览器的标签页会话机制,以及前进/后退缓存

2018-11-05
阅读 3 分钟
3.3k
客户端与服务端之间的会话是指:为了完成某个目标,客户端与服务端进行的一系列通讯(请求/响应对)。在这种会话中,服务端需要通过某种机制来识别出当前的请求属于哪一个会话(比如cookie)。

【js细节剖析】通过"="操作符为对象添加新属性时,结果会受到原型链上的同名属性影响

2018-10-31
阅读 5 分钟
4.3k
在使用JavaScript的过程中,通过"="操作符为对象添加新属性是很常见的操作:obj.newProp = 'value';。但是,这个操作的结果实际上会受到原型链上的同名属性影响。接下来我们分类讨论。

CSS单位em是相对于父元素还是当前元素的字体大小?

2018-10-24
阅读 3 分钟
8.2k
<div>会被padding-bottom撑开,而padding-bottom的高度是64px,而不是32px!这证明了1em等于当前元素的字体大小(只有一个例外,下面会讲)。

前端对产品和工程的思考

2018-10-15
阅读 3 分钟
2.2k
身为前端,不应该只会做网页。应该时刻对产品保持深刻的思考:这个产品的价值是什么?它是如何带来收益的?如何更好地满足需求、实现其价值?在这篇文章我将分享一些我的思考,以应用的类型来分类讨论。

【响应式布局】initial containing block、viewport以及相关尺寸

2018-09-18
阅读 11 分钟
4.4k
前言 本篇文章修改、整理自我以前写的一篇文章。 在阅读这篇文章之前,你需要了解设备像素、逻辑像素(设备独立像素)和CSS像素的区别,见我的前一篇文章理解设备像素、设备独立像素和css像素。 在经典文章A tale of two viewports中,作者定义了两种视口: layout viewport 包含了页面中的所有内容,浏览器已经计算好了...