Ich hatte gerade diesen Artikel gelesen und war neugierig, das selbst zu versuchen. In Browsern, die keine hochauflösenden Timer unterstützen, habe ich versucht, einen Wrapper zum rAF-Callback hinzuzufügen. Es nutzt Paul Irish ursprünglichen polyfill mit den folgenden hinzugefügten Zeilen:
var hasPerformance = !!(window.performance && window.performance.now);
// Add new wrapper for browsers that don't have performance
if (!hasPerformance) {
// Store reference to existing rAF and initial startTime
var rAF = window.requestAnimationFrame,
startTime = +new Date;
// Override window rAF to include wrapped callback
window.requestAnimationFrame = function (callback, element) {
// Wrap the given callback to pass in performance timestamp
var wrapped = function (timestamp) {
// Get performance-style timestamp
var performanceTimestamp = (timestamp < 1e12)
? timestamp
: timestamp - startTime;
return callback(performanceTimestamp);
};
// Call original rAF with wrapped callback
rAF(wrapped, element);
}
}
Hier ist ein Kern des Ganzen miteinander kombiniert und ein aktualisiertes Beispiel mit dem neuen Code:
https://gist.github.com/4078614
http://jsfiddle.net/timhall/XQpzU/4351/
Dieser Ansatz zielt darauf ab, den Parameter, der an die Callback-Funktion übergeben wird, an das hochauflösende Zeitgeberformat zu normalisieren. Sie könnten einen ähnlichen Ansatz verwenden, genau umgekehrt, um den hochauflösenden Timer in das alte Format zu konvertieren, wenn Sie bereits Code erwarten, aber ich sehe das als eine Regression.
Ich werde es in einem meiner Projekte ausprobieren, an denen ich gerade arbeite, und werde das Wesentliche aktualisieren, wenn ich irgendwelche Probleme/Verbesserungen finde.
Ich glaube nicht, dass es möglich ist, einen Sub-Millisekunden-Timer ohne die neuen APIs zu bekommen. – Bergi
Wir planen, diese Änderung in Chrome 21 auszuweiten, also wenn Sie diesen Callback-Parameter bereits nutzen sicher, deinen Code zu aktualisieren! - Nicht Chrome 20, Sie haben noch Zeit. – nycynik