Optimizing App Assets
學習如何在你的應用通過使用assets達到最好的視覺效果和最高效的使用視圖資源,概述了iOS12種的新特性。可以瞭解到如何使用assets分類來最優化的組織、優化、製作視圖資源。可以學習到更好的簡化設計和開發人員之間工作流程的一些手段。通過充分的使用視圖asset,可以提高應用的交付質量,佔用更小的空間,受益到更多的用戶。
本文章主要介紹了使用asset分類的最佳實踐,通過使用asset分類來優化應用資源的部署,下面將從圖片壓縮、設計和開發、分類以及部署流程這四個方面展開介紹
圖片壓縮
選擇合適的壓縮類型
圖片壓縮是asset分類的核心,asset分類默認會提供多種壓縮類型,對於一種給定的圖片或文字asset系統會默認選擇最優的壓縮類型,這種情況對於大多數的工程應該是已經足夠用了。但是,如果能夠詳細的瞭解系統提供的這些可供調試參數的用途的話就能根據開發的環境作出做好的權衡。
自動圖片打包
1.不同的類型會存儲各自的元信息和其他的一些屬性信息,如果存在很多同類型的資源,這部新信息會冗餘浪費多餘的空間。對於一些小的資源文件,也沒有進行充分的壓縮。
2.就是在組織文件的時候,處理這些比較大的分散的圖片資源會比較麻煩,而且調用的接口也不一樣。
3.還要注意不同圖片的不一致性。
assets分類會根據圖片的圖譜對圖片進行分類通過圖集的方式進行存儲,幫我們處理圖片的壓縮以及元數據的存儲工作。圖片資源越大使用assets分類後優化的效果就越明顯。
有損壓縮
1.有損壓縮主要是圖片的質量和大小的權衡
2.適合於一些特定的場景下,比如一些顯示時間比較短的圖片資源
High Efficiency Image File Format
assets分類支持High Efficiency Image File Format,並且將High Efficiency Image File Format格式作為assets分類有損壓縮的默認格式
1.比現有的格式圖片更大的壓縮率
2.支持透明度
3.assets分類可以自動將其他類型的圖片轉換為High Efficiency Image File Format,只要選擇有損壓縮的形式就會自動做這種轉換無需做其他的額外的工作。
無損壓縮
圖片資源可以根據使用的色譜和輪廓分為兩類,不同的形式在有損壓縮時會有不同的優化方式。一種是簡單的圖片資源,這類使用了簡單的配色和使用簡單的設計簡單,例如很多應用的icon。另一類指的是複雜的圖片資源。有損壓縮針對這兩種形式都做了不同形式的優化。
Apple Deep Pixel Image Compression
1.會適配圖片色譜
2.選擇最優的壓縮算法
3.壓縮的大小能夠提高15-20%
Size improvement
解碼時間也會提高20%
部署版本和應用瘦身
由於為了使更多的用戶使用,應用會向前兼容一些iOS版本。應用瘦身會根據不同的系統進行相應的優化,但以往的兼容形式無法向前兼容。因此,蘋果推出了新的兼容方案OS Variant Thinning,會根據不同的系統進行瘦身,一直兼容到iOS9,並且在最新的系統上會使用最新的優化效果。
應用瘦身報告
打包後會生成報告包括不同版本的包大小、優化空間等信息
App variant export
Design and production
圖片資源
1.資源來自很多不同的地方
2.都是人設計出來的
3.需要很多精力來組織資源文件
顏色管理
1.沒有顏色的像素點只是字節!
2.顏色配置文件提供預期的顯示樣式
3.維護顏色配置文件
4.保持設計的樣式
5.應用會在很廣泛的顯示樣式上運行
6.顏色映射會在將對應的顏色映射到設備上
在編譯的時候asset Catalogs會進行顏色的配對工作,這部分工作就不用在設備上來做了。並且這樣做達到的額外的好處就是可以縮減顏色配置文件。
工作空間
1.針對所有設計文件的顏色配置保持一致性
2.sRGB / 8 bits是被廣泛使用的顏色協議
3.Display P3 / 16 bits使用於生動的圖像設計
4.提供了廣泛靈活的顏色選項
圖片拉伸
1.設計工具支持分片
2.區分可拉伸區域和不可拉伸區域
為了適配很多的設備和界面可能會遇到拉伸圖片資源的情況。傳統的方法是將圖片分解開,然後在組合起來。這樣做的缺點是最後組合起來的時候比較耗費cpu,而且實現起來可能稍微有點複雜。這種形式對於流行的gpu也不是很適合。
Asset Catalog “Show Slicing”
Asset Catalog分片邏輯
1.確保拉伸的元數據和圖片資源一致
2.所有設計相關的邏輯都收斂到一處
Vector assets
1.不同的顯示比率使用不同的asseasts(1x, 2x, 3x)
2.將所有需要的asset數組組合成一個PDF格式
3.Xcode會根據不同的顯示比例生成優化的bitmaps
4.保持數組數據可以在運行時尺寸改變時動態調整
Design for 2x
1.Retina 2X是最常用的顯示比例
2.沒有像素點對齊的時候還是會出現虛的情況
3.將邊緣的點和像素對齊可以使設備的像素點對齊
4.數組資源可以使用2x格來優化沒有像素點對齊的情況
Assets提示
如果還是有問題的話可以手動根據提示拖入指定的槽位,這樣會更可控一些
分類
1.提供很多選項
2.只使用需要用到的部分
Bundles
1.對於大規模的工程來說bundle組織是一個挑戰
2.通過多個bundle來解決這個問題
3.高效的重用策略
大工程都放到主bundle裡面難以維護、要保證命名不會衝突 xcode會把所有的圖片資源都針對每個target打到一個bundle裡面。可以將圖片資源打到一個bundle裡面,使用一致的命名空間,可以方便複用。
通過指定bundle獲取bundle內的圖片
Namespaces
1.大的集合對於命名來說是一個挑戰
2.帶命名空間目錄是用來分組的
選中provides namespace會在asset catalog中對應圖片會自動添加目錄路徑
部署
App Thinning
Performance classes
1.硬件的能力不同
2.不需要限制可兼容設備!
3.通過可適配的資源來解決這些問題
內存分類
圖像能力分類
分為兩個方面,一個是metal屬性,Metal 是一種低層次的渲染應用程序編程接口,提供了軟件所需的最低層,保證軟件可以運行在不同的圖形芯片上。另一個方面是特定版本的處理器
能力矩陣
通過能力矩陣我們就能適配我們的assets資源
提供了三種指定的assets,一種是為了兼容老版本的,另外兩個是優化的2g下的Metal4的另一個是3G下的Metal3的。
我們舉例通過iphone 8來選擇。4g下沒有找到,在3g下找到了metal3的。儘管有GPU完全匹配的選項,但是由於我們的策略是內存優先的,因為內存對總體的性能影響會更大,所以最後選擇了3g下找到了metal的asset。
Using Performance Classes
對於比較大的或交互比較豐富,還有比較需要顯示很多細節的圖片資源最好使用內存優先的形式,這樣用戶體驗會更好一些。
一些複雜的圖片資源對CPU和GPU要求比較高更適合使用圖像優先的方式。
NSDataAsset可以提供靈活的容器
可以放在asset分類裡,內容可以是任何類型的文件,可以利用性能分類的功能來做文件的選擇和路由。
Sprite atlases
SpriteKit是對文本圖片進行動畫的一個圖像渲染和動畫構建的庫
1.將所有相關圖片打包成一個整體
2.整個圖集一次性加載
3.圖片通過圖集中位置來引用
通過UIImage / NSImage 獲取圖片
在一些特殊的場合使用異步加載
這個方法耗費I/O和內存的操作,使用時需謹慎
Xcode通過像素格式、設備特性和壓縮類型自動進行應用瘦身的優化
asset分類的特性也都應用到了
Sprite atlases上了
Optimizing App Assets
1.圖片資源最好的選擇
2.在iOS12的應用上可以減少10-20%的空間
3.應用瘦身功能針對最新的系統進行了優化
4.可以在應用中使用分類功能來適配資源
閱讀更多 今日頭條技術團隊 的文章