Я сделал конструкцию, чтобы отложить загрузку JavaScript для ускорения загрузки страницы.Для развертывания веб-сайтов я использую компрессор YIU для минимизации сценариев, а также для повышения скорости.Там будет две версии сценариев, один сжатый, а оригинальный нет.Например: example-min.js и example.js.Некоторые javascript-скрипты будут загружаться только при входе в функционал, и иногда ему нужно больше скриптов (идея плагина).
В любом случае, я хочу знать (нужны ли другие js-файлы), если js-файл 'host'сжатый, поэтому при сжатии загружается уменьшенная версия файла js.Если нет (при разработке), он загружает оригинальный файл.
Например:
function myObject()
{
var o = this;
o.isJsMinified = function()
{ s = o.isJsMinified.toString(),ss='s= ';
return (s.indexOf(ss+'o.is')<0);
};
o.require = function( s, delay, baSync, fCallback ) // add script to dom
{
var oo = document.createElement('script'),
oHead = document.getElementsByTagName('head')[0],
f = (typeof fCallback == 'function')?fCallback:function(){};
if( !oHead )
{ return false; }
oo.onload = function() {oo.id='loaded'; f(oo); };
oo.type = 'text/javascript';
oo.async = (typeof baSync == 'boolean')?baSync:false;
oo.src = s;
setTimeout( function() { oHead.appendChild(oo); }, (typeof delay != 'number')?delay:1 );
return true;
};
.....
.....
if( <new functionality found> )
{
if( o.isJsMinified() )
{ o.require('new-min.js',800); }
else { o.require('new.js',800); }
}
.....
.....
}
Когда вы смотрите на функцию jsIsMinified (), я использую трюк, чтобы определить, работает ли сама функция (источник) вырезан из пробелов (минимизированная версия).Но есть проблема с Firefox, он не возвращает исходное форматирование, поэтому он не может обнаружить никаких различий.
Например: // сжатие компрессором YUI:
o.isJsMinified=function(){s=o.isJsMinified.toString(),ss='s= ';return (s.indexOf(ss+'o.is')<0);};
Firefox будетdisplay:
function () {
s = o.isJsMinified.toString(), ss = "s= ";
return s.indexOf(ss + "o.is") < 0;
}
Функция не работает в Firefox, она всегда «говорит», что она не сжата.Кто-нибудь знает обходной путь для этого?