小森林

async/await 的常见问题

在 Nodejs 中编写异步代码一直饱受诟病,基于回调函数的原理很容易写出 “箭头型” 代码,有的人甚至因此对 node 产生了阴影。在那之后相继出现 Promise,Generator 和 async/await 试图从语法层面解决这一问题,自 Nodejs 7 中原生支持 async/await 后大部分 nodejs 开发者应该都在用了,本篇文章我们来探讨一些在使用 async/aw......

zIndex 的层叠上下文

上一篇字儿少了点,再写一篇吧 这篇文章想写一下工作中遇到过的一个问题,也是这个博客少有的 CSS 相关文章… 我考虑过为什么 CSS 相关的内容较少,原因主要是日常开发中对 CSS 的关注远不如 JS,而且随着浏览器发展,兼容性这个话题越来越薄弱了。当然,最主要的原因是我 CSS 不好 🤗。 浏览器的布局按照从左到右,从上到下的顺序排列,在使用了 position 或者 float 之......

HTTP 缓存失效的计算

HTTP 1.1 中要求服务端为每个请求设置一个 Date 响应头,表示这个资源生成的时间。当从缓存中获取资源时,HTTP 1.1 会在每个资源上设置 Age 头,它的值是一个数字,表示资源已经存在的时间(或是距离上一次同服务器验证有效性的时间) 下图是我在百度贴吧的请求里截了张图: 根据前文提到的信息,这个资源的创建时间是 2017 年 5月 25 日 00:24:14,资源存活时间是......

Console in Nodejs

在 JS 中 console 的作用类似其他语言的 print、echo,在开发调试过程中常常会用到。上周在工作中用 console 调试代码的时候遇到了 console 在 Nodejs 中一个神奇的行为,这里记录下。 在一段业务逻辑中我拿到了数据库中的一条记录,类似: 12345var record = { id: 1, name: 'ymy', weight: 49&......

JS 中参数的传递方式

提到 Javascript 参数的传递方式,大部分稍微有点经验的人都能说出有按值和按引用传递,基础类型数据按值传递,Object 按引用传递,比如下面的代码: 1234567function parse(raw) { raw = 10;}var num = 5;parse(num);num // 5 由于基础类型按值传递,所以函数 parse 并不会改变外面的 num ......

「译」That's so fetch!

记得去年看到过 @sodatea 跟人讨论时说:「Fetch 并不仅仅是 XHR 包了一层 Promise 而已」,我在后面很长一段时间里一直不解其意,直到后来对 Stream 有所了解并阅读完这篇文章后才体会到个中精妙。Stream 是我非常希望学习掌握的技术之一,不出意外后面几篇文章都会是关于 Stream(流)的。另外博客换了新主题,被某人说不如之前好看,果然美感是需要培养的呀 ╮(......

记一次用 MutationObserver debug 的经历

上篇文章在创建 Microtask 中提到了 MutationObserver 的回调函数会创建一个 microtask,很巧的是这周刚好用上了这个 API 并且快速的解决了一个很诡异的问题。 有天下午上班间隙被叫去看一个问题,一个 Node 节点在添加新的 Node 之后它的子节点依然是空的,在检查了拼写、时序等问题后还是没有头绪,这时获取到一个信息:“如果把 DOM 插入操作放到 s......

「译」Tasks, microtasks, 队列和执行顺序

搁了好久没更博客,再不写要被某人 BS 了,挑了篇之前看过的关于 microtasks 很好的文章(来自 Google Chrome 的开发),看完会对 setTimeout/process.nextTick/Mutation.Observer 等等 task 和 microtasks 的概念更清晰些,当然如果这些名词对你来说感到陌生也不妨碍阅读。 当我告诉我的同事 Matt Gaunt......

「译」通过 ECMAScript 6 proxies 进行元编程

介绍 Proxy 的一篇好文,原文来自 2ality,原文挺长的,拖了很久才成稿。原文地址:Meta programming with ECMAScript 6 proxies 这篇博客介绍 ES6 的一个特性:Proxies,Proxies 允许开发者拦截并自定义一个对象(比如获取属性),这属于元编程的特性。 本文的代码会使用到其它一些 ES6 特性,查看 Using ECMAScri......

开启 Web 桌面通知

通知在手机系统上是很常见的功能,比如我们使用微信的时候,退出应用后有消息进来系统会推送通知给用户,这里涉及到两部分:推送 和 通知,本篇文章主要来看一下 Web 通知(顺便给自己立个 flag,下一篇会写相对复杂一点的 Web 推送)。 申请权限第一步依然是检测浏览器是否支持 Notification API: Reflect.has(window, ‘Notification’) 截止到本......