我已经构建了延迟加载 javascript 以加快页面加载的结构。为了部署网站,我使用 YIU 压缩器来最小化脚本,也为了速度。将有两个版本的脚本,一个是压缩的,一个不是原始的。例如:example-min.js 和 example.js。某些 javascript 仅在功能进入时才会加载,有时它需要更多脚本(插件理念)。
无论如何,我想知道(如果需要其他 js 文件)“主机”js 文件是否被压缩,所以当它被压缩时,它会加载 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);};
火狐将显示:
function () {
s = o.isJsMinified.toString(), ss = "s= ";
return s.indexOf(ss + "o.is") < 0;
}
该功能在 Firefox 中失败,它总是“说”它没有被压缩。有人知道解决方法吗?