npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

netus-k-bucket

v1.1.0

Published

Kademlia DHT k-bucket implementation

Downloads

5

Readme

k-bucket

Kademlia DHT K-bucket implementation as a binary tree.

This is a performance-optimized rewrite of the webtorrent k-bucket using ES5 and zero runtime package dependencies for broader compatibility. Development packages were also reduced from 555 to 43.

This implementation is highly optimized for javascript using for loops and even break labels (shudder) in important areas. The closest() function is almost 3x faster, for example.

The rewrite uses quickbit style for easier portability to C.

External Changes

Most changes are the internal.

Pubic changes from the original include:

Internal property names are shortened (though original public options names have been kept):

localNodeId                 -> root_id
numberOfNodesPerKBucket     -> bucket_len
numberOfNodesToPing         -> num_to_ping

(snake_case was chosen for parameters and functions to support easier porting to C) 

The root_id is no longer randomly generated when not provided. It is simply generated as a middle-value id (0x80000....). If you would like to randomly generate it, just pass it in as a construction option.

Distance calculation for mismatched keys aligns now with the same logic used for traversing the graph, that is, the missing lower-order bytes are defaulted to zero (instead of 0xFF).

Type checks such as those for UIntArray have been dropped in favor of duck-typing which reduces the code and test overhead and also implies using any sort of byte array should be possible.

Contacts objects now have a '_dist' distance property which is used by closest() to quickly sort values without creating extra structures. This property is modified and available on the contacts returned after calling closest(). They will change with the next closest() call that has them in scope. It is up to clients to create defensive copies if needed.

Credits

Though this optimization of KBucket was a full rewrite, these folks have put in time to testing and modifying the original code over several years and it's important to give them credit - I use their original tests to ensure backward compatibility:

@tristanls, @mikedeboer, @deoxxa, @feross, @nathanph, @allouis, @fanatid, @robertkowalski, @nazar-pc, @jimmywarting

Installation

npm install netus-k-bucket

Tests

npm test

Sources