// @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; | |
} | |
} | |
})(); |
This comment has been minimized.
This comment has been minimized.
Wondering if line 15 should be:
|
This comment has been minimized.
This comment has been minimized.
@JofArnold thanks. Exactly what I needed. |
This comment has been minimized.
This comment has been minimized.
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. |
This comment has been minimized.
This comment has been minimized.
Thank you! |
This comment has been minimized.
This comment has been minimized.
This makes it easier for testing. Thanks for the script. Now I don't have to have two versions of performance scripts to juggle. |
This comment has been minimized.
This comment has been minimized.
For those of us in the corporate world, could you provide a license for this gist? |
This comment has been minimized.
This comment has been minimized.
Avoiding conditions:
|
This comment has been minimized.
This comment has been minimized.
@JordanDelcros That doesn't work in IE9, because it has window.performance (but not window.performance.now) |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
thank you~!!!!!! |
This comment has been minimized.
This comment has been minimized.
If anyone does Apache Cordova (a.k.a. Phonegap) dev, the iOS web view in there doesn't support performance either. At least not through Evothings workbench. I have yet to test with an actual built Cordova app, but I don't think it will make a difference. |
This comment has been minimized.
This comment has been minimized.
Thank you!! Solved my problem with Opbeat AngularJS plugin. Also thanks to @lukehedger for creating the bower package! |
This comment has been minimized.
This comment has been minimized.
Wonderful! Thanks. Used this to patch support for iOS 8. Would be nice if Polyfill.io offered performance.timing instead of just performance.now polyfill... |
This comment has been minimized.
This comment has been minimized.
As @rubencodes implies above, polyfill.io now has a performance.now polyfill, and the benefit is that it will polyfill Date.now for you automatically if needed: https://polyfill.io/v2/polyfill.min.js?features=performance.now |
This comment has been minimized.
This comment has been minimized.
@JofArnold that's not very idiomatic coffee-script, and looks like it needs updating to match the modified gist. do ->
window.performance = {} unless 'performance' of window
Date.now = if Date.now then Date.now else -> (new Date).getTime()
unless 'now' of window.performance
nowOffset = performance.timing?.navigationStart ? Date.now()
window.performance.now = ->
Date.now() - nowOffset 2016 what now? |
This comment has been minimized.
This comment has been minimized.
^ @ghost just a heads up, the snippet above has a typo: 'perfomance' -> 'performance' |
This comment has been minimized.
This comment has been minimized.
Thanks guys! I had issue with google's recaptcha code. |
This comment has been minimized.
This comment has been minimized.
There's another typo: it's navigationStart, not navigatorStart |
This comment has been minimized.
This comment has been minimized.
Hello, I have mixed this polyfill with Aaron Levine's (https://gist.github.com/Aldlevine/3f716f447322edbb3671) and modifier some code: 'use strict';
// @license http://opensource.org/licenses/MIT
// copyright Paul Irish 2015
// Added code by Aaron Levine from: https://gist.github.com/Aldlevine/3f716f447322edbb3671
// Some modifications by Joan Alba Maldonado.
// 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
// Gist: https://gist.github.com/jalbam/cc805ac3cfe14004ecdf323159ecf40e
// TODO: Think about adding vendor prefixes.
if (!Date.now) { Date.now = function() { return new Date().getTime(); } }
(function()
{
if (window.performance && window.performance.now) { return; }
window.performance = window.performance || {};
if
(
window.performance.timing && window.performance.timing.navigationStart &&
window.performance.mark &&
window.performance.clearMarks &&
window.performance.getEntriesByName
)
{
window.performance.now = function()
{
window.performance.clearMarks('__PERFORMANCE_NOW__');
window.performance.mark('__PERFORMANCE_NOW__');
return window.performance.getEntriesByName('__PERFORMANCE_NOW__')[0].startTime;
};
}
else if ("now" in window.performance === false)
{
var nowOffset = Date.now();
if (window.performance.timing && window.performance.timing.navigationStart)
{
nowOffset = window.performance.timing.navigationStart
}
window.performance.now = function now()
{
return Date.now() - nowOffset;
}
}
})(); I have placed it in this gist: https://gist.github.com/jalbam/cc805ac3cfe14004ecdf323159ecf40e Any comments will be welcome. Thank you very much. |
This comment has been minimized.
CoffeeScript version with
+new Date()
to accommodate IE8