|
(function() { |
|
let isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0, |
|
// Chrome 1+ |
|
isChrome = !!window.chrome && !!window.chrome.webstore; |
|
|
|
console.log("isChrome: ", isChrome); |
|
console.log("isOpera: ", isOpera); |
|
function linkPreload(as, url) { |
|
let l = document.createElement("link"); |
|
l.rel = "preload"; |
|
l.as = as; |
|
l.crossOrigin = ""; |
|
l.href = url; |
|
document.head.appendChild(l); |
|
} |
|
|
|
function linkPrerender(url) { |
|
let l = document.createElement("link"); |
|
l.rel = "prerender"; |
|
l.href = url; |
|
document.head.appendChild(l); |
|
} |
|
|
|
function linkPrefetch(url) { |
|
let l = document.createElement("link"); |
|
l.rel = "prefetch"; |
|
l.as = "html"; |
|
l.crossOrigin = ""; |
|
l.href = url; |
|
document.head.appendChild(l); |
|
} |
|
|
|
function linkPreconnect(url) { |
|
let l = document.createElement("link"); |
|
l.rel = "preconnect"; |
|
l.crossOrigin = ""; |
|
l.href = url; |
|
document.head.appendChild(l); |
|
} |
|
let resourceHints = { |
|
"preconnect": ["example.com", "sub1.example.com", "sub2.example.com", "anotherexample.com", "anotherexample.com", "fonts.gstatic.com"], |
|
"preload": [{ |
|
type: "style", |
|
url: "//domain.com/path/to/style.css" |
|
}, |
|
{ |
|
type: "script", |
|
url: "//domain.com/path/to/script.js" |
|
}, |
|
{ |
|
type: "fetch", |
|
url: "/domain.com/path/to/a/config.json" |
|
}, |
|
{ |
|
type: "font", |
|
url: "//domain.com/path/to/iconfont.eot?abc123" |
|
}, |
|
{ |
|
type: "font", |
|
url: "//domain.com/path/to/iconfont.eot?abc123?7ipyug#iefix" |
|
}, |
|
{ |
|
type: "font", |
|
url: "//domain.com/path/to/iconfont.ttf?abc123" |
|
}, |
|
{ |
|
type: "font", |
|
url: "//domain.com/path/to/iconfont.woff?abc123" |
|
}, |
|
{ |
|
type: "font", |
|
url: "//domain.com/path/to/iconfont.svg?abc123#iconfont" |
|
} |
|
], |
|
"prerender": [ |
|
"//domain.com/path/to/some/page", |
|
"//domain.com/path/to/some/other/page" |
|
] |
|
}; |
|
// Preconnect |
|
for (var i = 0, l = resourceHints.preconnect.length; i < l; i++) { |
|
linkPreconnect(resourceHints.preconnect[i]); |
|
} |
|
|
|
// Preload static assets |
|
for (var i = 0, l = resourceHints.preload.length; i < l; i++) { |
|
linkPreload(resourceHints.preload[i].type, resourceHints.preload[i].url); |
|
} |
|
|
|
// Once have link pages (not privacy/tos) |
|
let ; |
|
for (var i = 0, l = resourceHints.prerender.length; i < l; i++) { |
|
// Use prerender if Chrome, Opera, Samsung |
|
if (isOpera || isChrome) { |
|
linkPrerender(resourceHints.prerender[i]); |
|
} else { |
|
// Otherwise use prefetch |
|
linkPrefetch(resourceHints.prerender[i]); |
|
} |
|
} |
|
})(); |