Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@bjouhier
bjouhier / benchCallbacks.js
Created April 11, 2012 20:01
streamline vs. callbacks bench
"use strict";
var fs = require('fs');
var cache = {}, hit = 0, missed = 0;
function load(name, cb) {
var res = cache[name];
if (res) {
process.nextTick(function() {
hit++;
cb(null, res);
@bjouhier
bjouhier / primes.js
Created April 28, 2012 14:30
Primes generator
exports.generator = function() {
var found = [];
function isPrime(p) {
for (var i = 0; i < found.length; i++) {
var q = found[i];
if (p % q === 0) return false;
if (q * q > p) return true;
}
return true;
@bjouhier
bjouhier / doesnotexit.js
Created May 6, 2012 17:03
luvmonkey program that does not exit
var Timer = require('uv').Timer;
function foo() {
var timer = new Timer();
timer.start(1000, 0, function(err) {
f.send("ok");
f.close();
})
var r = yield;
print("got " + r);
@bjouhier
bjouhier / asyncgen.js
Created May 18, 2012 17:24
Asynchronous hello world with JS generators
(function() {
var GENERATOR_PROTO = Object.getPrototypeOf((function() {
yield;
})());
function isGenerator(val) {
return typeof val === 'object' && Object.getPrototypeOf(val) === GENERATOR_PROTO;
}
var PENDING = {};
@bjouhier
bjouhier / benchNextTick.js
Created May 29, 2012 20:53
Benching setTimeout against process.nextTick
"use strict";
var count = 1000000;
function bench(fn, cb) {
var total = 0;
function loop(i) {
if (i === count) {
cb(null, total);
} else {
@bjouhier
bjouhier / hackGlobal.js
Created June 2, 2012 12:18
Wrapping a function to hack a global temporarily
var g = 3;
function hackGlobal(fn) {
return function() {
var saveG = g;
try {
g = 5;
fn.apply(this, arguments);
} finally {
g = saveG;
@bjouhier
bjouhier / demo1-original.js
Created July 4, 2012 20:53
equivalence between event-oriented and callback-oriented stream API
"use strict";
var wrappers = require('./wrappers');
var http = require('http');
var zlib = require('zlib');
var util = require('util');
var fs = require('fs');
http.createServer(function(request, response) {
response.writeHead(200, {
'Content-Type': 'text/plain; charset=utf8',
// Wrapping asynchronous functions
// This wrapper is implemented with callbacks
// i is the index of the callback in the parameter list
// isFuture is a reserved parameter - do not pass it
function wrapper1(fn, i, isFuture) {
return function wrapped() {
var cb = arguments[i];
if (!isFuture) console.log("WRAPPER1 BEFORE CALL: " + fn.name);
if (cb == null) return wrapper1(fn.apply(this, arguments), 0, true);
arguments[i] = function(err, result) {
@bjouhier
bjouhier / testgen._js
Created May 9, 2013 20:23
streamlined harmony generators example based on https://gist.github.com/creationix/5544019
var fs = require('fs');
function testgen(_) {
console.log(fs.readFile(__filename, _));
console.log("Sleeping for 2000ms...");
setTimeout(_, 2000);
console.log("Done");
}
testgen(_);
@bjouhier
bjouhier / fiboBench.js
Created May 10, 2013 12:46
First bench to compare raw callbacks and the 3 streamline modes: callbacks, fibers and generators
var fs = require('fs');
function fib(n) {
return n <= 1 ? 1 : fib(n - 1) + fib(n - 2);
}
function rawBench(n, loop, modulo, asyncFn, callback) {
var count = 0;
var l = loop;