1、RSL簡介 跨域
RSL(Runtime shared libraries)即動態連接庫,在程序運行時由FlashPlayer動態加載。靜態連接庫是SWC文件,經過編譯器的library-path和include-libraries編譯進應用程序。採用靜態連接的應用程序SWF會產生比較大的文件以及更長的下載時間。使用RSL的應用程序載入時間短且文件比較小,並且提升了內存使用效率,只是在開始須要花點時間下載RSL。RSL的強大致如今多個應用程序共享公共代碼時,由於RSL只須要被下載一次,多個應用程序動態連接到相同的RSL,訪問其中已經緩存在客戶端的資源。雖然RSL的巨大優勢是緩存到客戶端,可是它並不考慮庫中的哪些類被真正用到,就把整個RSL庫都下載來。 瀏覽器
RSL分爲兩種:未簽名和簽名的。未簽名的RSL,好比標準的和跨域的SWF文件,存儲在瀏覽器緩存裏。簽名的RSL,這是通過Adobe簽名過的,擴展名爲.swz,存儲在Flash Player 緩存中。只有Adobe纔可對RSL進行簽名,以此提升安全防止第三方工具注入攻擊及執行代碼。 緩存
RSL是 Runtime Shared Library的簡稱,意思是運行時共享庫當前RSL主要有3個級別的,一個是Standard RSL(即一個網站內共享),一個是Cross-domain RSL(跨域共享),最後一個也是最關鍵的是Framework RSL(Flex框架共享)。 Framework RSL 意思是, 把Flex的類和庫在程序運行時動態加載而不是封裝在程序裏面若是不用 Framework RSL, 你的主程序就會使用你編寫的代碼裏必須導入的類,這樣一來, 你代碼寫的越多, 須要導入越多的類, 你程序體積就越大,也就是說, 不用Framework RSL, 你的程序就是這樣的:你本身的自定義類代碼 + 你必須使用的Flex自帶類 (framework)。若是使用了Framework RSL你的程序就只包含你本身寫的類代碼而已, 體積就很小了,framework會變成另外一個文件, 動態加載到你的程序裏。當一個用戶加載了任何一個使用此版本RSL的應用程序後,此版本RSL會被其緩存在flash player的cache中,而且這個cache不隨着瀏覽器緩存清空而清空,之後若是此用戶再次加載使用此版本RSL的程序的時候便再也不須要加載此RSL,加載速度將大大提升。 安全
2、使用RSL app
1.在項目文件夾中點右建,選擇"properties"-"Flex Build Path"-"Library Path" 框架
2.該選項卡上咱們看到"FrameWork linkage",默認是"Merged into cdoe"(FLEX4默認是RSL) dom
3.點開下拉,選擇"runtime shared library(RSL)" 工具
4.針對自定義的SWC,修改其link type爲RSL,選擇None,同時勾上Automatically extract swf to deployment path(自動將SWF提取到部署路徑)。若是想對不一樣域的RSL共享,則選擇Digests(摘要),同時指定其Policy file url(策略文件)。具體可參考FLEX SDK中的SWC文件處理方式。 測試
5.點擊OK 優化
3、RSL與MODULE的區別
先來看一組關於module1,module2,module3,module4,module5,module6,Application的數據
不使用RSL,不使用MODULE:843K,844K,863K,851K,851K,833K,1581K
只使用RSL:351K,353K,358K,358K,354K,348K,1022K
只使用MODULE:106K,107K,110K,113K,107K,103K,1581K
同時使用RSL和MODULE:104K,106K,109K,111K,106K,101K,1022K
注:
1.上述的RSL只包含FLEX FRAMEWORK(553K)
2.MODULE已經勾選optimize for application
4、RSL注意事項
1.RSL不是對於全部的應用都有益. 須要對應用RSL先後的下載時間和啓動時間都測試過, 才能獲得正確的結論.
2.RSL一般會增長應用的啓動時間. 這是應用無論整個庫實際如何使用, 只是簡單地所有加載整個庫. 就這一點來講, RSL越小越好. 這與靜態連接庫的使用是不一樣的. 當你編譯一個Felx應用時, 編譯器只解開須要的組件. 通常來講, 庫的大小能夠是任意的, 它隻影響編譯時間而不會影響下載的時間.若是在好幾個應用中使用相同的組件庫, 那麼能夠考慮合併這些庫, 造成一個RSL. 可是若是庫合併後, 每一個應用只會用到其中的一小部分, 那麼還不如多加載幾個小RSL更高效.
3.若是一些類重複打包在多個RSL中, 那麼必定要注意同步更新的問題.
4.RSL不能應用在基類是Sprite或者MovieClip的純ActionScript項目中. 由於RSL須要基類知道如何加載RSL, 好比: Application或者SimpleApplication.
5、使用optimizer命令行工具優化本身的RSL