拖延症了好久,第二篇终于写出来了。

上一篇在这里:
JavaScript函数式编程(一)

上一篇文章里我们提到了纯函数的概念,所谓的纯函数就是,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环境的状态(我偷懒复制过来的)。

但是实际的编程中,特别是前端的编程范畴里,“不依赖外部环境”这个条件是根本不可能的,我们总是不可避免地接触到 DOM、AJAX 这些状态随时都在变化的东西。所以我们需要用更强大的技术来干这些脏活。

阅读全文 »

这几天写腾讯实习生 Mini 项目的时候用上了 React 全家桶,当然同时引入了 Webpack 作为打包工具。但是开发过程中遇到一个很棘手的问题就是,React 加上 React-Router、superagent、eventproxy 这些第三方轮子一共有好几百个 module,Webpack 的打包速度极慢。这对于开发是非常不好的体验,同时效率也极低。

阅读全文 »

一、引言

说到函数式编程,大家可能第一印象都是学院派的那些晦涩难懂的代码,充满了一大堆抽象的不知所云的符号,似乎只有大学里的计算机教授才会使用这些东西。在曾经的某个时代可能确实如此,但是近年来随着技术的发展,函数式编程已经在实际生产中发挥巨大的作用了,越来越多的语言开始加入闭包,匿名函数等非常典型的函数式编程的特性,从某种程度上来讲,函数式编程正在逐步“同化”命令式编程。

JavaScript 作为一种典型的多范式编程语言,这两年随着React的火热,函数式编程的概念也开始流行起来,RxJS、cycleJS、lodashJS、underscoreJS等多种开源库都使用了函数式的特性。所以下面介绍一些函数式编程的知识和概念。

阅读全文 »

在传统的 Web 应用中,浏览器与浏览器之间是无法直接相互通信的,必须借助服务器的帮助,但是随着 WebRTC 在各大浏览器中的普及,这一现状得到了改变。

WebRTC(Web Real-Time Communication,Web实时通信),是一个支持网页浏览器之间进行实时数据传输(包括音频、视频、数据流)的技术,谷歌于2011年5月开放了工程的源代码,目前在各大浏览器的最新版本中都得到了不同程度的支持。

这篇文章里我们采用 WebRTC 来构建一个简单的视频传输应用。

阅读全文 »

本来应该早几天就写完的,结果拖延症到现在。

GitHub - starkwang/Maus: A Light RPC Framework for NodeJS or Browser.

Maus 0.3新特性如下:

  1. 当任意Worker连接失去时,Manager会把已发出给这个Worker但未完成的函数调用重新发送到其它可用的Worker上。简单地说即使,现在的框架允许任意Worker失联(当然起码要有一个Worker啦),大大提高了容错性。
  2. 加入了Parkserver(职介所)的新特性,下面详细说说Parkserver是啥。

阅读全文 »

starkwang/Maus: A Simple JSON-RPC Framework running in NodeJS or Browser, based on websocket.

这几天写了个小型的RPC框架,最初只是想用 TCP-JSON 写个纯 NodeJS 平台的东西,后来无意中开了个脑洞,如果基于 Websocket 把浏览器当做 RPC Server ,那岂不是只要是能运行浏览器(或者nodejs)的设备,都可以作为分布式计算中的一个 Worker 了吗?

打开一张网页,就能成为分布式计算的一个节点,看起来还是挺酷炫的。

阅读全文 »

这几天把一年多前买的《松本行弘的程序世界》重新看了看,很多当时不能理解的东西现在再去看真是茅塞顿开呀,看到元编程那一段真是把我震撼到了,后来发现 Javascript 里其实也是有一些支持元编程的特性的,今天就用一个 DEMO 示范一下吧。

阅读全文 »

CommonJS 是一个流行的前端模块化规范,也是目前 NodeJS 以及其模块托管仓库 npm 使用的规范,但目前暂无浏览器支持 CommonJS 。要想让浏览器用上这些模块,必须转换格式。

这个系列的文章,我们会一步步完成一个基于 CommonJS 的打包工具,类似于一个简单版的 Browserify 或者 Webpack 。

阅读全文 »

今天翻了翻一年多前写的代码,感觉当年年轻的自己写下的代码真是图样啊(然而现在也没好到哪里去 /w\)。近期看了好多函数式编程以及设计模式的书和文章,于是想分享一些让JS代码更优雅的小技巧。

阅读全文 »