2010-01-11 22 views
2

我開始使用Dojo工具包,它具有豐富的功能,如Dijits和主題,這些功能很有用,但需要永久加載。有沒有方法可以改進javascript(Dojo)加載?

我有一個很好的互聯網連接,但連接速度較慢的人會遇到相當慢的頁面加載。

這也是一個關於重vs輕框架的問題。如果您大量使用小部件,有哪些技術可以減少頁面加載時間?

+1

您使用自定義圖層和構建系統嗎? – prodigitalson 2010-01-11 19:34:25

+0

不,我不是,但可以應該......我會深入研究它。 – marko 2010-02-24 06:21:05

回答

6

Dojo有一個構建系統,可以大幅度縮短加載時間。看一看dojo書籍或在線文檔&看看分層構建。爲了進行構建,您需要擁有包含構建工具的dojo的「源」(或「完整」)版本 - 您可以通過「util」目錄來確定是否存在此問題(與dojo,dijit,dojox處於同一水平)。如果您沒有完整版本,請返回到道場網站&深入下載區域 - 這可能並不完全明顯。無論如何,如果你有正確的版本,你基本上只需要創建一個「構建配置文件」文件(或文件...又名分層構建),這本質上是你的dojo.requires列表,你通常會有你的HTML。構建系統會將所有的dijits,dojox等等的所有javascript代碼都封裝成一個「分層構建」(一個文件),並且它會在其上運行縮減安全,這樣可以縮小代碼(刪除空格,縮短名稱等)。它也會對css文件做一些這樣的事情。除了使事情變得更小以外,你只需要爲所有js代碼獲得一個文件(如果你做了多個圖層,或者大多數情況下只有一個圖層就足夠了)。

這會將您的加載時間提高至少十倍,如果不是更多。你可能需要一點點閱讀才能理解配置文件和構建命令本身的格式,但實際上並不難。一旦你創建了一個構建文件,把它命名爲「mystuff」,然後你可以dojo.require「mystuff」文件(它將在你構建時創建的新構建目錄中,然後在該構建目錄下面掛着dojo目錄中的dojo.js文件)。在你構建的文件中需要滿足你通常所做的所有dojo.require(假設你將它們全部列在配置文件中),並且加載速度非常快。

下面是舊建文檔,其中大部分仍然成立一個鏈接: http://www.dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/package-system-and-custom-builds

下面是最新的文檔(雖然或許有點不完整): docs.dojocampus.org/build/index

它比實際讀取更難......使用profiles目錄中的layer.profile文件作爲起點。只要放幾件東西&然後做一個構建&看看你是否已經創建了release目錄(它應該和dojo,dijit等級一樣),它會包含整個dojo系統(全部縮小)以及你的建造(分層)的東西。快多了。

迪倫泰南

3

這不是那麼大(28k gzipped)。不過,您可以使用Dojo的Google's hosted version。你的許多用戶已經擁有了它的緩存。

1

一旦你創建一個構建文件,將其命名明顯的東西像「的MyStuff」 ,然後你可以道場。需要「mystuff」文件(將在 新建版目錄中創建時創建,然後在 之下&與dojo目錄中的dojo.js文件進行外掛)。 在您的內置文件要求將滿足所有考慮dojo.require的你 通常做(假設你讓他們都在配置文件中 構建上市),事情將加載速度非常快

小幅回調 - 你不t dojo.require那個文件,你在一個普通的腳本標記中引用它。

<script type="text/javascript" src="js/dojo/dojo/dojo.js" ></script> 
<script type="text/javascript" src="js/dojo/mystuff/mystuff.js"></script> 

對於目錄佈局,我將構建的文件「mystuff.js」放到與我的包相同的目錄中。因此,在與dojo,dojox和dijit相同的級別中,我將有一個名爲「mystuff」的目錄,並且內部有MyClass1.js和MyClass2.js。然後從構建的profile.js文件的片段看起來像:

layers:[ 
{ 
name: "../mystuff/mystuff.js", 
dependencies: [ 
    "mystuff.MyClass1", 
    "mystuff.MyClass2" 
    ] 
},... 
0

我知道這是一箇舊線程。但我發佈這個答案是爲了像我這樣的其他用戶的好處,他們可能會閱讀這個。

如果您從apache提供服務,還有其他一些因素。這些設置可以產生巨大的差異 - MaxClientsMaxRequestsPerChild。你將需要根據服務器/機器可用的資源來調整它們。

更改這個工作真的很適合我。

使用谷歌CDN也是一個不錯的選擇,雖然它可能在某些情況下不實際。

自定義構建也有其他答案中指出的效果。

相關問題