Skip to content

Instantly share code, notes, and snippets.

View hijackFunction.js
const applyBind = Function.prototype.bind.bind(Function.prototype.apply);
const mapSetApply = applyBind(Map.prototype.set);
const hijackedFns = new Map();
function hijackFunction(context, propName, replacer) {
mapSetApply(hijackedFns, [replacer, context[propName]]);
context[propName] = replacer;
}
const fnToStringApply = applyBind(Function.prototype.toString);
const mapGetApply = applyBind(Map.prototype.get);
hijackFunction(Function.prototype, 'toString', function toString() {
@cvazac
cvazac / was-served-from-browser-cache.js
Created Dec 21, 2018
Determine if resource was cached in browser using RT
View was-served-from-browser-cache.js
function wasServedFromBrowserCache(url) {
const {transferSize, decodedBodySize, duration} = performance.getEntriesByName(url)[0]
// if we transferred bytes, it must not be a cache hit
// (will return false for 304 Not Modified)
if (transferSize > 0) return false;
// if the body size is non-zero, it must mean this is a
// ResourceTiming2 browser, this was same-origin or TAO,
// and transferSize was 0, so it was in the cache
@cvazac
cvazac / total-bytes-saved.js
Created Dec 21, 2018
Counting byte savings using Server-Timing
View total-bytes-saved.js
window.addEventListener('load', function() {
let totalBytesSaved = 0
for (const {encodedBodySize, serverTiming} of performance.getEntriesByType('resource')) {
for (const {name, description} of serverTiming || []) {
if (name === 'disk') {
totalBytesSaved += parseInt(description) - encodedBodySize
}
}
}
console.info('Total Bytes Saved:', totalBytesSaved)
View natives.js
;(function() {
function getNatives(objects) {
if (typeof objects === 'string') {
objects = [objects]
}
var natives = {}
if (objects.length) {
var iframe = document.createElement('iframe')
iframe.style.display = 'none'
View measure-before-unload.js
(function() {
let userThinkTime = 0
;['alert', 'confirm', 'prompt'].forEach(function(methodName) {
window[methodName] = (function(method) {
return function () {
userThinkTime -= performance.now()
var returnValue = method.apply(window, arguments)
userThinkTime += performance.now()
return returnValue
@cvazac
cvazac / cached-in-browser.js
Last active Nov 28, 2017
Heuristic to identify resources that were cached in the browser
View cached-in-browser.js
function cachedInBrowser(resourceTimingEntry) {
if (resourceTimingEntry.requestStart) {
// has permissive Timing-Allow-Origin response header
return resourceTimingEntry.transferSize === 0
}
// because.... physics?
return resourceTimingEntry.duration < 30
}
View po-interface-check.js
!(function() {
const nativePO = window.PerformanceObserver
const interfaces = {
resource: 'PerformanceResourceTiming',
longtask: 'PerformanceLongTaskTiming',
// etc.
}
const polyfills = {
longtask: LongTaskPolyFill
// etc.
View po-filtered.js
!(function() {
const nativePO = window.PerformanceObserver
const polyfills = {
longtask: LongTaskPolyFill
// etc.
}
window.PerformanceObserver = (callback) => {
let po, registeredPolyFills = []
const observe = function(options) {
View doesItAll.js
const query = `
CREATE TEMPORARY FUNCTION getHeaders(payload STRING)
RETURNS STRING
LANGUAGE js AS """
try {
var $ = JSON.parse(payload);
var headers = $.response.headers;
var st = headers.find(function(e) {
return e['name'].toLowerCase() === 'server-timing'
});
View tti-fps.js
(function() {
if (window !== top) return;
const bucketSize = 500, threshold = 30, stamps = []
function measureFps() {
const now = performance.now()
if (stamps.length) {
while (now - stamps[0] > bucketSize) {
stamps.shift()
}