Last active

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

performance.now() polyfill (aka perf.now())

View performance.now()-polyfill.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
// @license http://opensource.org/licenses/MIT
// copyright Paul Irish 2015
 
 
// Date.now() is supported everywhere except IE8. For IE8 we use the Date.now polyfill
// github.com/Financial-Times/polyfill-service/blob/master/polyfills/Date.now/polyfill.js
// as Safari 6 doesn't have support for NavigationTiming, we use a Date.now() timestamp for relative values
 
// if you want values similar to what you'd get with real perf.now, place this towards the head of the page
// but in reality, you're just getting the delta between now() calls, so it's not terribly important where it's placed
 
 
(function(){
 
if ("performance" in window == false) {
window.performance = {};
}
Date.now = (Date.now || function () { // thanks IE8
return new Date().getTime();
});
 
if ("now" in window.performance == false){
var nowOffset = Date.now();
if (performance.timing && performance.timing.navigationStart){
nowOffset = performance.timing.navigationStart
}
 
window.performance.now = function now(){
return Date.now() - nowOffset;
}
}
 
})();

CoffeeScript version with +new Date() to accommodate IE8

do ->
  # prepare base perf object
  if typeof window.performance=='undefined'
    window.performance = {}
  if not window.performance.now
    nowOffset = +new Date()
    if performance.timing and performance.timing
      nowOffset = performance.timing.navigationStart
    window.performance.now = ->
      now = +new Date()
      return now - nowOffset
qxk23 commented

Wondering if line 15 should be:

if (performance.timing && performance.timing.navigationStart){

@JofArnold thanks. Exactly what I needed.

Date.now() is not available in IE8. Also, without navigationStart what value is this polyfill? The numbers this polyfill would produce will not be comparable to the real performance.now(). It should do nothing for browsers lacking navigationStart.

lonce commented

Thank you!

This makes it easier for testing. Thanks for the script. Now I don't have to have two versions of performance scripts to juggle.

For those of us in the corporate world, could you provide a license for this gist?

Avoiding conditions:

window.performance = (window.performance || {
    offset: Date.now(),
    now: function now(){
        return Date.now() - this.offset;
    }
});

@JordanDelcros That doesn't work in IE9, because it has window.performance (but not window.performance.now)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.