3.4.0 YUI和裝載機變化
2011年7月1日起,在6:34上午DAV玻璃| 發展 , 性能 | 10評論在3.4.0中,我們開始轉向裝載機的邏輯左右,不僅使其更高性能的過程,但更強大和更容易使用,在其他地方(如在服務器上)。 我們將推出更多的變化在今後的修訂,但我想需要一些時間,並解釋了什麼變化,為什麼它被改變,它可能會如何影響開發。 對於大多數用例,開發人員會發現什麼不同,但事情快一點,他們的要求下載是有點小。
種子文件
我要解決的第一件事是YUI種子文件。 在以前版本的銳,我們的種子文件是非常微小的,並沒有包含Loader或任何其元數據。 我們發現這是高性能,並非如我們所希望,在90%的使用情況。 普通用戶包括種子文件,然後請他們的模塊,這反過來又意味著,種子需要先取裝載機,然後計算其所有依賴項,然後取他們所有。 現在,我們覺得,這個額外的HTTP請求是錯誤的事情,所以新標準的種子文件包含裝載機和元數據。 是的,這將使稍大的初始請求,但它會使加載的模塊,更快,因為其元數據的要求,現在已經在頁面上。
如果你想使用它的老辦法,你可以只是包括YUI基地種子文件,而不是。 它包含了所需的一切,使銳在單機模式下運行,再加上它包含的能力,以獲取需求的裝載機。 如果您需要更精細的細粒度的依賴,我們已經創建了一個YUI的核心正是YUI老基地種子的種子文件。
/構建/ YUI / YUI min.js的/ /銳種子+裝載機
/構建/ YUI基/ YUI基min.js / /舊YUI的種子裝載機獲取支持
沒有裝載機/構建/ YUI核心/ YUI核心min.js / /舊YUI的基礎獲取支持
應當指出的是,這些網址是比以前的URL不同。 任何使用yui/yui-base.js文件需要repoint到yui-core/yui-core.js 。 如果你想加載的種子和提取裝載機的舊方式,你會使用的yui-base/yui-base.js種子文件。
這種變化的理由是我們YUI的運行在盡可能多的地方的路線圖。 舊的種子文件,加上裝載機是在一個單一的組合服務器的請求都很好,如果你有一個組合在您的應用程序的服務器, 但在服務器上呢? 或在移動設備上的脫機應用程序?這些地方需要,以盡量減少文件的訪問,同時還得到他們所需要的信息。
匯總
接下來的事情,我們改變了從系統中刪除匯總和拖欠allowRollup在裝載機配置為false。 這是什麼意思你?好了,希望什麼都沒有。 之前,我解釋變化的影響,讓我解釋一下它背後的推理。 再次,首要原因是,性能,隨著有效載荷交付。 以這個例子:
模塊A:需要事件,事件-B
模塊B:需要事件C,事件-D
當您要求,匯總邏輯到3.4.0之前用來確定你應該得到的事件匯總。 這實際上意味著,你得到:
event.a,event.b,event.c,event.d,event.e,event.f,event.g,event.h
你結束了與您的網頁上比你更實際需要。 通過關閉匯總支持,YUI將現在要求只有你真正要求,僅此而已。 在大多數情況下, 你不會注意到這一點 。 模塊開發,可能會遇到的情況,在過去工作的事情,可能現在還沒有工作。 這樣做的原因是,他們實際上是由事故工作過。 讓我用一個真實的例子: 撥號 。
3.3.0,撥號需要這個:
要求:[
“部件”,
'DD-阻力,
“替代”
“事件的MouseEnter,
“過渡”,
“國際機場”
]
在大多數情況下,在3.4.0撥號工作,但是鍵盤的支持沒有奏效。 做一些簡單的調查後,事實證明,匯總的支持實際上是要求整個事件匯總(包括移動事件和事件的關鍵)。 3.4.0撥號沒有在所有的事件匯總拉動邏輯,不再有其所有要求。 使撥號的要求更加具體和正確定義所有的實際依賴,使得它如預期般運作。
要求:[
“部件”,
'DD-阻力,
“替代”
“事件的MouseEnter,
“事件的舉動”,
“事件的關鍵,
“過渡”,
“國際機場”
]
對於模塊的開發,這是最好的做法是確保,正是它需要的功能模塊需要。 不要以為上游模塊的要求是有。 它總是更好,以確保你問你需要什麼。
這也意味著,模塊的要求更明確界定。 例如, datatype-date有國際機場建立在以前的版本中,您將訪問這樣的國際機場英寸支持:
Y.Intl.getAvailableLangs(“數據類型的日期”);
但因為這個模塊實際上並沒有一種語言( datatype-date-format模塊一樣),這將失敗。 它需要更具體和實際要求語言正確的模塊:
Y.Intl.getAvailableLangs(“數據類型的日期格式”);
構建文件的爆炸和子模塊去除
進行此更改後,未來的變化,我們提出了爆炸生成目錄,並從核心系統子模塊。 子模塊的邏輯是不能完全取消,只有我們的元數據結構被改變。 這將提供當前安裝的向後兼容性。
在核心系統的子模塊,我們需要解決的問題,引起了情侶。 第一個原因是性能。 每次加載所需的計算依賴關係,它需要走的每個模塊的子模塊/插件結構。 這數千次受傷了,我們在裝載機的性能計算程序。 通過消除為核心系統的子模塊的支持,我們挽救了數以萬計的函數調用和迭代。
裝載機被改變,所以,如果一個use在一個模塊的元數據屬性定義多個模塊,它會使用這些模塊,而不是試圖加載原始的模塊。 所以,如果你要求“ dd “裝載機將檢查dd DD “的元數據,並看到一個使用屬性,看起來像這樣:
“DD-DD-DDM的基礎上,DDM,DD-DDM下降,DD-阻力,DD-代理,DD-約束,DD-下降,滾動DD-DD-下拉插件”
在核心YUI種子文件,我們也包括我們調用虛擬匯總或別名 。 正是這些模塊的定義是相同的元數據在裝載機。 這種方式可以包括從我們的依賴配置出口的所有文件,仍然可以使用,而無需在頁面上的裝載機目前這些匯總。 在未來的版本中,我們將完善這種方法更。
進行此更改後,我們再preceeded爆炸我們的構建文件。 在以前的版本中,確定的子模塊的模塊文件的路徑。 例如:
“DD”:{
“子模塊”:{
“DD-拖”:
/ /模塊數據
}
}
在3.3.0當您建立“DD”,文件的結構看起來像這樣:
/構建/月/ DD-drag.js的
/構建/月/ DD-ddm.js的
/構建/月/ DD-drop.js的
3.4.0爆炸生成系統,“DD”的構建文件現在看起來像這樣:
/構建/ DD-拖/ DD-drag.js的的
/構建/ DD-DDM / DD-ddm.js的的
/構建/ DD-滴/ DD-drop.js的的
這使我們從我們的模塊元數據全部刪除“路徑”屬性,保存文件的大小,並減少所需的組裝模塊的URL路徑的邏輯。
如果包括一個預配置的組合URL,則必須重新計算您的網址,當您升級。
這種變化的缺點是,如果你是其中的“準備”您的網頁模塊組合URL,你可以不只是改變了版本號和升級。 您將需要重新配置的依賴 ,並產生一個新的模塊結構的新的URL。
未來
我將繼續完善,重構,並最大限度地提高我們的裝載機和種子戰略的各個方面。 這些步驟需要幫助需要的不僅是我們的客戶端的策略,而且我們的服務器,命令行和移動設備的策略,以及未來變化。
共享和擴展: 書籤del.icio.us Digg它! | reddit!


我不太這樣一段話:
“裝載機被改變,所以,如果在使用一個模塊的元數據屬性定義多個模塊,它會使用這些模塊,而不是試圖加載原始的模塊。 所以,如果你要求“DD”裝載機將檢查“DD”的元數據,並看到一個使用屬性,看起來像這樣:
“DD-DD-DDM的基礎上,DDM,DD-DDM下降,DD-阻力,DD-代理,DD-約束,DD-下降,滾動DD-DD-下拉插件”
“
相反你能解釋這個有說服力的,在當前版本中發生的事情嗎?
THX
/保羅
評論由保羅NESTI - 2011年7月4日, #
@保羅
在之前的版本3.4.0 PR2的,我們創建了靜態的匯總文件。 因此,在DD的情況下,有一個名為:
/構建/日/ dd.js
和包含所有相關模塊的DD。
評論由DAV玻璃 - 7月4日,2011年#
我很高興你們都這樣做。 我總是避免像瘟疫輥UPS。 然而,因為一些基類現在似乎被刪除,如節點基地成為核心節點,這將是一件好事,這種方式已過時的所有類的列表。
馬克 - 7月5日,2011年#
@馬克
3.4.0被釋放時,應該有大量的文件,改變周圍的模塊。
評論由DAV玻璃 - 7月5日,2011年#
這個評論是不是這個職位具體而言,但我仍然覺得YUI的理念,對我的信念,在良好的設計,“簡單的事情,應該是簡單的,複雜的事情應該是可能的”。
因為我發現自己又再次通讀與YUI3個月後,如節點和事件的最根本的模塊文件。
新的應用程序/ MVC模塊似乎適合我的應用程序在第一,然後我開始寫很多自定義的邏輯來解決由於巨大的內存開銷的默認行為。 當我扔掉模塊查看完全,我結束了一個更短,結構緊湊的邏輯,只有更快!
另一種情況是上下文菜單,這在YUI3我沒有找到。 一些YUI的專家建議,建立一個新的類的基礎上疊加,然後添加各種自定義屬性和渲染方法...我只需要一個上下文菜單,我終於得到它做原料的JS + CSS的不到10線。
我從來沒有懷疑YUI3可以支持複雜的情況,但非常簡單的情況下,像一個Hello World應用程序? 與C,你只要調用printf(“世界您好!”)在main()。 對於Java,你需要先定義一個HelloWorld類,然後一個public static void方法稱為(),最後,請致電(“世界你好!”)... OMG,任何人都意識到它需要多少必備的知識像這樣簡單的東西寫嗎? 這是我覺得銳究竟如何!
任何,我不認為YUI3永遠不會變得更簡單,但我還是希望你們能使其盡可能簡單。
韋恩- 7月16日,2011年#
韋恩:你不需要銳寫一個Hello World應用程序。 這聽起來像你也並不需要YUI的你試圖建立使用模型和視圖組件來構建應用程序。
沒關係!
YUI的不會是每個任務的理想工具。 如果你能寫10行JavaScript,完成你需要做的,然後通過各種手段,這樣做,而不是使用一個部件,它遠遠比你更需要的。
這並不意味著該部件是無用的,或不必要的複雜。 這意味著它是沒有合適的工具,你想要做的工作。
我們絕對要簡單實用,使銳,但有一個簡單性和實用性之間取得平衡。 最簡單的代碼是沒有代碼,但如果我們去那麼遠,我們也不會提供任何價值。 因此,我們的目標是平衡:我們試圖使複雜的事情變得更簡單,但沒有簡單化他們的地步,我們的抽象是沒有用的。
我同意你的理念,簡單的事情,應該是簡單和複雜的事情應該是可能的。 而且我相信這正是銳確實不使簡單的事情沒有那麼簡單,它可能使複雜的事情。 YUI的模塊化架構的優點是,如果你發現簡單推出自己的代碼,而不是使用一個特定的widget,你不會被迫加載該widget代碼。 和Loader在3.4.0的變化使這個更簡單。
評論由瑞安格羅夫 - 2011年7月20日, #
[...]裝載機有重大更新為3.4.0。 如果你正在做通過手動負載規格使用(“*”)或利用子模塊的配置,我們會非常感激你想用你的代碼,新的加載程序,以確保我們正確處理所有的用例。 如需對本新聞稿中的裝載機變化的詳細信息,請參閱博客文章描述3.4.0裝載機變化。 [...]
pingback的YUI的3.4.0預覽版現已在CDN»雅虎用戶界面博客(YUIBlog)的 - 2011年7月28日, #
@瑞安,
剛才看到您的評論。 我是維護一個老銳3.1編寫1000行代碼的項目,我只是想添加一個上下文菜單。 但我沒有找到任何可行的方法來獲取模塊/做快速和容易。 預見這個小小的功能可能需要數百面向YUI的代碼行,我用,而不是原始的JS。
順便說一句:有一些小問題,當切換到3.2,但整個系統停止工作時切換到3.3。 所以我不認為有必要嘗試為這個項目3.4。
韋恩- 2011年8月18日, #
[...]在計算裝載機的依賴所執行的迭代數。 你可以參考3.4.0的有關裝載機變化的博客後,[...]
pingback的公佈3.4.0銳和新YUILibrary.com»雅虎用戶界面博客(YUIBlog)的 - 2011年8月18日, #
所有這些裝載機的變化似乎非常有前途和去除子模塊計算是偉大的。 這是可能的原因,我們看到的功能噸調用IE中做依賴計算時,IE瀏覽器會八九不離十嗆了幾秒鐘。
與裝載機的變化和元數據 - 是YUI服務器端的裝載機影響。 是,正在更新中考慮到這一變化的起飛。 原因那我們結束了使用。
阿里ð - 2011年8月19日, #