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

marky

v1.2.5

Published

Performance timer based on performance.mark() and measure()

Downloads

12,710,476

Readme

marky

JavaScript timer based on performance.mark() and performance.measure(), providing high-resolution timings as well as nice Dev Tools visualizations.

For browsers that don't support performance.mark(), it falls back to performance.now() or Date.now(). In Node, it uses process.hrtime().

Quick start

Install via npm:

npm install marky

Or as a script tag:

<script src="https://unpkg.com/marky/dist/marky.min.js"></script>

Then take some measurements:

var marky = require('marky');

marky.mark('expensive operation');
doExpensiveOperation();
marky.stop('expensive operation');

Why?

The User Timing API is more performant than console.time() and console.timeEnd(), and more accurate than Date.now(). Also, you get nice visualizations in Chrome Dev Tools:

Chrome Dev Tools screenshot

As well as Edge F12 Tools:

Edge F12 screenshot

This is because marky adds standard PerformanceEntries to the Performance Timeline. Tools like WebPageTest and Windows Performance Analyzer also surface them, and you can even send them to your analytics provider.

API

marky.mark() begins recording, and marky.stop() finishes recording:

marky.mark('releaseTheHounds');
releaseTheHounds();
marky.stop('releaseTheHounds');

You can also do more complex scenarios:

function setSail() {
  marky.mark('setSail');
  marky.mark('raiseTheAnchor');
  raiseTheAnchor();
  marky.stop('raiseTheAnchor');
  marky.mark('unfurlTheSails');
  unfurlTheSails();
  marky.stop('unfurlTheSails');
  marky.stop('setSail');
}

marky.stop() also returns a PerformanceEntry:

marky.mark('manTheTorpedos');
manTheTorpedos();
var entry = marky.stop('manTheTorpedos');

The entry will look something like:

{
  "entryType": "measure",
  "startTime": 1974112,
  "duration": 350,
  "name": "manTheTorpedos"
}

You can get all entries using:

var entries = marky.getEntries();

This provides a list of all measures ordered by startTime, e.g.:

[
  {
    "entryType": "measure",
    "startTime": 1974112,
    "duration": 350,
    "name": "numberOne"
  },
  {
    "entryType": "measure",
    "startTime": 1975108,
    "duration": 300,
    "name": "numberTwo"
  },
  {
    "entryType": "measure",
    "startTime": 1976127,
    "duration": 250,
    "name": "numberThree"
  }
]

You can also clear the entries using marky.clear():

marky.clear()

After this, marky.getEntries() will return an empty list. (If the User Timing API is supported, this will delete all the mark and measure entries from the timeline.)

Browser support

marky has been tested in the following browsers/environments:

  • IE 9+
  • Safari 8+
  • iOS 8+
  • Android 4.4+
  • Chrome
  • Firefox
  • Edge
  • Node 4+

Per the spec, browsers only need to hold a minimum of 150 entries in their Performance Timeline buffer. In older versions of Firefox, the buffer is throttled to 150, which for marky means you can get a maximum of 50 entries from marky.getEntries() (because marky creates two marks and a measure).

If you need to get more than 50 entries from marky.getEntries(), you can do:

if (typeof performance !== 'undefined' && performance.setResourceTimingBufferSize) {
  performance.setResourceTimingBufferSize(10000); // or however many you need
}

In Node and browsers that don't support the User Timing API, marky follows the behavior of Edge and Chrome, and does not limit the number of entries. marky.stop() and marky.getEntries() will return pseudo-PerformanceEntry objects.

See also

  • appmetrics.js – a library on top of mark()/measure() which reports to Google Analytics.

Credits

Thanks to @toddreifsteck for feedback on this project and clarifications on the User Timing API.