编程

为什么async/await关键字是如此重要

现在JS里有async/await了,处理异步代码几乎不再有什么争议,但还是会有人有疑问,为什么不把所有函数都定义成async的,然后所有函数调用都写成await的,这样最终不就可以省略掉所有的async/await关键字了吗(默认隐式async/await)?这样不就达成了“天下无异步”的太平盛世了吗?

只要稍微动点脑筋就不会有这种想法。

【万吨巨轮,史前天坑】h5pal是怎样练成的 - 开篇

h5pal AKA 仙剑奇侠传Web版是我造过最大的轮子,也是开过最大的坑。曾经装过的逼,终究是要还,不然我脸被打得啪啪响那还了得。虽然早就没更新(呃,准确的说,是自从开源以后就再也没更新),但对我自己而言心里其实还是想把这个坑给填了——至少是以另一种方式——也就是现在这个新坑——h5pal是怎样练成的。

其实一开始我是想做一个PPT完事儿,但最后发现信息量放进一个PPT里实在是有点太大了,还是老老实实的写文章吧。

挖坑如山倒,填坑如抽丝,今天是第0篇,开坑之作自然也没什么干货(逃,不过重点是先帮助我自己梳理一下这艘万吨巨轮要从何说起。

所以开篇其实只是一个提纲性质,我的打算是按照模块又底层到表层来慢慢介绍h5pal是如何从船坞到下水,当然我在写的过程中也毫无疑问肯定会被自己当年写的代码丑到吐,看我都吐了的份上,你们就别跟着吐槽了是吧……

继续探索JS中的Iterator,兼谈与Observable的对比

前言

JavaScript 2015中引入了Generator Function(相关内容可以参考前作ES6 generator函数与co一瞥ES6 generator函数与co再一瞥),并且在加入了Symbol.iterator之后,使得构造拥有自定义迭代器的集合变得相当容易(可以参考前作在JavaScript中实现LINQ——一次“失败”的尝试)。

前几天在群里@徐叔提出了这样一个问题:

1
2
3
4
5
function* listen(element) {
element.addEventListener('click', function(e) {
// 这里怎么把e通过外面的listen给yield出去?
})
}

音锤思婷……

我理解,叔叔写listen的目的是为了把事件源抽象成一个“可以被遍历的集合”。

在JavaScript中实现LINQ——一次“失败”的尝试

这篇文章的起因是我在知乎上对JavaScript 函数式编程存在性能问题么?这个问题的回答。其实在这个问题之前挺久我就想做相关的尝试,但懒癌无药医,挖坑如山倒,填坑如抽丝。

废话不多说,走你。

C# 3.0引入了引以为豪的LINQ(Language INtergrated Query),可以用类函数式的方式操作集合(C#中的IEnumerable接口)。

在JS中,数组也有类似的filtermapreduce一类方法,但存在重复遍历问题,利用C#中LINQ的思路,给JS实现一套LINQ是否可行呢?

初窥 ASP.NET Core MVC

最近心血来潮,想搞一下ASP.NET Core,于是准备把练琴记录仪的服务端迁移到ASP.NET Core MVC上,不过遇到些小问题,记录一下。

Cordova中与In App Browser的通讯

为了把我的练琴记录仪改成多用户App,我需要做一个Weibo OAuth功能,因为练琴记录仪是Single Page App,我不愿意直接跳转到OAuth页面,那样会打断我的应用状态,于是我打算打开一个新窗口来完成OAuth。

这样一来,问题自然就转换为跨窗口通讯问题了。

窗口间通讯毫无疑问首选是window.postMessage,在cordova当中,原生window.open是不能用的,官方给的方案是使用cordova-plugin-inappbrowser插件所提供的cordova.InAppBrowser.open(url, target, options)来取代window.open,这两者基本上API差不多一致。

但是IAB插件所返回的对象并不是真正的window,它没有postMessage功能,并且在IAB所打开的页面中,也没有window.opener,于是只能另辟蹊径,找点不靠谱的挫方法来试试了。

使用RxJS做一个Pull-to-Refresh的例子

本文将用一个Pull-to-Refresh的例子来介绍如何使用RxJS进行高度抽象的复杂DOM事件处理。

文中所开发的完整demo代码可以在github找到,在线demo在这里(需要使用手机或开启touch模拟,未作浏览器兼容)。

这个程序将会用到的工具:

  • RxJS
  • VueJS(并非对其依赖,仅仅是为了方便开发一个UI)

使用C#开发桌面hybrid应用程序

周末和基友一起开发了一个程序MP3CutAdgithub),用的是C#做容器和“后端”,webkit做UI。

因为后端的算法是用C#写的,就打算不迁移了,用C#做UI吧。但是我特么不会,距离上一次开发WinForm程序已经过去了5、6年;WPF也没有实践经验。所以就想弄个办法,用C#做后端,web做前端,赶个时髦。