Node.js 动态插件架构 - 构建易于扩展的程序

两年前我做了一个名叫302go的不为人知的self-hosted玩具项目, 这个项目是一个重定向搜索引擎. 什么叫重定向搜索引擎呢? 就是它本身不具备任何搜索引擎应该具有的抓取和索引功能, 仅仅是把搜索用的关键字用HTTP 302状态重定向到指定的URL. 在实际使用中, 它的效果是这样的: 当你在浏览器的搜索栏(鉴于现在所有主流浏览器的地址栏和搜索栏都合并在了一起, 所以当成地址栏也没问题)里输入"Google 你好"或者"你好 Google"并按下回车进行搜索, 这个搜索引擎会直接302重定向到Google关于"你好"的搜索结果页 »


异步构造函数 - 构造函数与Promise的结合

拜浏览器和Node.js的更新所赐, async函数这几年变得越来越常见, 我们在实例化一个类的时候可能也会要先异步执行一些操作. 拿一个最简单的延迟初始化的类作例子, 来自其他语言的编程习惯会使我们下意识这么写: function delay(timeout) { return new Promise(resolve => setTimeout(() => resolve(), timeout)) } class MyClass { constructor() { this.completed = false } async init(timeout) »


异步Proxy - Proxy与Promise的结合

Proxy和Promise是两个已经可以在现代JavaScript运行环境里广泛使用的内置对象. 也许Proxy对你来说还有些陌生, 但Promise相信你已经使用过无数次了, 它是一个可爱的语法糖, 用来替代回调函数来以更优雅的写法串连起异步非阻塞操作. Proxy其实也并不是多么新鲜的事物, 它曾经以Object.observe()的身份现身过一段时间, 它是一个可以用来定制对象行为的同步钩子, 用它我们可以实现一些从前无法实现的奇妙行为, 比如创建出一个拥有无限个属性的对象. 很少有人会想到把Proxy和Promise联系在一起, 它们看起来是如此不同, 一个同步, 一个异步, 一个代理 »


名为JavaScript的魔法

这是一个新的文章系列, 主要讲一些JavaScript的真正使用技巧, 不定期更新. 写这个系列的原因是我受够了我的无知同行们写的一些狗屁玩意, 所以让我们来见识一些真正有意思的东西. 最初期的几篇文章主要是跟我的Chrome扩展Gloria相关的, 我本该在一年前就写Gloria的运行原理的, 但由于种种原因始终没能写成, 所以这个系列也用来提前揭开一些Gloria引擎盖下的东西. »