Skip to content

Instantly share code, notes, and snippets.


Bryce Baril brycebaril

View GitHub Profile
brycebaril / binding.gyp
Created Apr 13, 2017 — forked from trevnorris/binding.gyp
Example of returning all values from uv_rusage() as tuples w/ no overhead. Values are only valid until getrusage() is called again.
View binding.gyp
"targets": [{
"target_name": "addon",
"sources": [ "" ]
brycebaril /
Last active Jun 23, 2016
another user queue example, similar to how the Redis protocol works

requests come in e.g. /foo

replies come out upper-cased as /FOO

however, they are sent over to db.js to get upper-cased, and it replies two at once, concatenated with \n to delimit

when a reply comes back from db.js it sends both queued replies back to the HTTP clients at the same time, i.e. the first will wait until the second comes in.

brycebaril /
Created Sep 22, 2015
So you want to try N|Solid? Here's a simple playlist:

Trying N|Solid

  1. Download the N|Solid Runtime
  2. tar -xf nsolid-v1.0...
  3. cd nsolid-v1.0...
  4. ./nsolid /path/to/your/app.js

Now let's get tricky

  1. NSOLID_SOCKET=8000 ./nsolid /path/to/your/app.js
brycebaril /
Last active Feb 23, 2020
process.nextTick vs setImmediate

@mafintosh asks: "Does anyone have a good code example of when to use setImmediate instead of nextTick?"

The answer is "generally anywhere outside of core".

process.nextTick is barely asynchronous. Flow-wise it is asynchronous, but it will trigger before any other asynchronous events can (timers, io, etc.) and thus can starve the event loop.

In this script I show a starved event loop where I just synchronously block, use nextTick and setImmediate


Y axis = stack depth X axis = percent of time spent in this function

If a function sits atop another, it was in its callchain and spent time in the callee. The more of a parent that is covered by the things it calls, the less it is doing and the more its children are doing.

This means the two main things (in my experience) to look for are:

  • plateaus -- functions where a lot of time was spent
  • shallow-sloped pyramids -- functions where time was spent up and down the callchain vs any isolated place

In the middle of the wide section you can see a function called "parseGif" which is where we'll focus. This particular flame graph was generated to analyze something inside there -- for the most part I don't care about the rest right now.

View ast.json
"type": "Program",
"body": [
"type": "ExpressionStatement",
"expression": {
"type": "CallExpression",
"callee": {
"type": "Identifier",
"name": "require"
View bizarguments.js
function abc() {
return def();
function def() {
return abc.arguments[0] * 2;
abc(50); // >> 100
// so that's weird enough but:
brycebaril / eventloop.js
Last active Aug 29, 2015
An interesting little demo to demonstrate some of the intricacies and changes with the Node.js event loop
View eventloop.js
var counter = 0
var start =
function foo(from, when) {
console.log(counter, when, from, process._getActiveHandles().length, - start)
var scheduledAt = counter
if (counter == 2 || counter == 25) {
brycebaril / linesplit.js
Created Mar 27, 2014
Split a file into a file per line of the input file.
View linesplit.js
var fs = require("fs")
var split = require("binary-split")
var terminus = require("terminus")
var path = require("path")
var input = process.argv[2]
var dir = path.dirname(input)
var basename = path.basename(input)
var count = 0

Keybase proof

I hereby claim:

  • I am brycebaril on github.
  • I am brycebaril ( on keybase.
  • I have a public key whose fingerprint is 602C 9953 7442 29B1 B9E2 DFD8 9425 9F4D 2F09 DCCC

To claim this, I am signing this object: