Ответ 1
Вот script, который я использовал в течение некоторого времени в элементе head.
С этим вы получаете хороший контроль над загрузкой файлов и можете загружать что-либо после загрузки DOM, просто убедитесь, что файлы не требуются нигде в DOM при загрузке.
<head>
<title></title>
<link rel='stylesheet' type='text/css' href='css.css' />
<script type='text/javascript'>
var DomLoaded = {
done: false, onload: [],
loaded: function () {
if (DomLoaded.done) return;
DomLoaded.done = true;
if (document.removeEventListener) { document.removeEventListener('DOMContentLoaded', DomLoaded.loaded, false); }
for (i = 0; i < DomLoaded.onload.length; i++) DomLoaded.onload[i]();
},
load: function (fireThis) {
this.onload.push(fireThis);
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', DomLoaded.loaded, false);
} else {
/*IE<=8*/
if (/MSIE/i.test(navigator.userAgent) && !window.opera) {
(function () {
try { document.body.doScroll('up'); return DomLoaded.loaded(); } catch (e) { }
if (/loaded|complete/.test(document.readyState)) return DomLoaded.loaded();
if (!DomLoaded.done) setTimeout(arguments.callee, 10);
})();
}
}
/* fallback */
window.onload = DomLoaded.loaded;
}
};
DomLoaded.load(function () {
var d = document;
var h = d.getElementsByTagName('head')[0];
var s = d.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('async', true);
s.setAttribute('defer', true);
s.setAttribute('src', '/path/to/scripts.js');
h.appendChild(s);
});
</script>
</head>
И вот хорошая статья, в которой описывается еще несколько способов ускорить процесс, и один из них объединяет ваши файлы js в 1 или 2-3-4, на основе которых он нуждается. Преимущество - это меньше HTTP-запроса.
http://exisweb.net/web-site-optimization-making-javascript-load-faster
И google заполняется статьями
https://www.google.com/search?q=speed%20up%20loading%20javascript%20files&rct=j