2011-08-03 49 views
0

同耀壓縮機壓縮我已經做出了建設推遲加載JavaScript來加快頁面加載速度。爲了部署網站,我使用YIU壓縮機來最小化腳本,也爲了提高速度。將會有兩個版本的腳本,一個是壓縮的,而另一個不是。例如:example-min.js和example.js。有些JavaScript只會在功能進入時加載,有時需要更多腳本(插件的想法)。檢測如果JavaScript在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有一個問題,它不會返回原始格式,因此無法檢測到任何差異。

例如: //由銳壓縮機壓縮:

o.isJsMinified=function(){s=o.isJsMinified.toString(),ss='s= ';return (s.indexOf(ss+'o.is')<0);}; 

Firefox將顯示:

function() { 
    s = o.isJsMinified.toString(), ss = "s= "; 
    return s.indexOf(ss + "o.is") < 0; 
} 

該函數在Firefox失敗,它總是 '表示' 它不被壓縮。有沒有人知道這方面的解決辦法?

+0

爲什麼對GS downvote有人這個封閉的話題? – Codebeat

+0

不要污衊你的問題,特別是有現有答案的問題。我在這裏回滾了您的修改,但請不要再這樣做。 –

回答

0

HTTP頭將指定是否請求並啓用了壓縮,但there's no easy way to read them所以你可能需要一個特殊的Firefox擴展的發展空間。

也許是做出改變的正確的地方是服務器,發送非精縮出腳本,如果某頭部賦予了(並請求IP地址是本地的)。

+0

謝謝,但事實並非如此。你在談論gzip壓縮。 – Codebeat

1

我真的覺得你在這裏過於複雜的事情。哇,你爲什麼不在服務器上創建兩個文件夾,如js/productionjs/debug。你可能在你的javascript文件中有一個標誌可以指示它是否有效或者調試。像

if(window.DEBUG) { 
    o.require('/js/debug/new.js',800); 
} 
else { 
    o.require('/js/production/new.js',800); 
} 

考慮到這一點,即使這些文件夾是不必要的。你可以區分.min或不。你唯一需要做的就是在代碼中設置一個全局變量DEBUG

+0

我不是過於複雜的事情,也許在我展示的例子中我會。我明白你在說什麼。但我不想用調試或其他東西來標記事情。 – Codebeat

+0

@Erwinus:問題是,您無法可靠地確定腳本文件是否被壓縮。我的意思是,當然你可以嘗試發現壓縮文件中非常典型的東西,或者甚至注意壓縮器在文件中留下的某種「註釋」,但是非常不可靠。 – jAndy

+0

另外它在其他瀏覽器中工作得很好。問題是Firefox。 Function.toString()返回格式化文本,而不是「原樣」。 – Codebeat