我們即將在iOS10上迎來大量的變化,諸如iMessage這樣蘋果重點提到的內容肯定是能贏得最多的關注了,但還有一些並沒有擺在台面上的改進卻值得注意,尤其是新系統中應用運行更加快速流暢這個變化。那麼蘋果是如何做到的呢?
如果要用最簡單的語言來說明其中的奧妙所在,可以這麼理解:新的API將能夠稍微提前一點點去加載你即將看到的內容,而不再是當你進行滾動操作的時候,內容才開始加載。
不少應用都有大量所謂的“區塊”,或者說數據集合。以前當你快速向下劃動應用頁面時,可能會注意到應用在試圖跟上你的操作時會有卡頓。這種丟幀現象會讓應用的性能表現看上去比它應有的水准更壞。
在WWDC大會的其中一個環節中,蘋果特意提到了這些丟幀現象的原因,那就是應用得在內容進入屏幕區域之後才開始加載,即使加載速度不過是毫秒之間,都會讓你注意到有明顯的卡頓出現。
在iOS10中,蘋果將會讓那些“區塊”在你進行滾動操作時提前加載,確保內容進入屏幕時已經被加載完畢,滾動時的性能影響和加載時間是不會被注意到的。蘋果表示60幀每秒是最理想的,但是應用達不到這個目標也是常事。
至於加載時間要提前多少的問題,蘋果稱它的測試已經表明應用的滾動性能是能夠停留在60幀的安全區的。
這種理念被稱為“數據預提取”,而且能夠進行反向工作。那些滑出你的屏幕的“區塊”較之以前會被保留更長的時間,以免你突然想要再回頭看看剛才漏掉的內容。這樣一來,再往上滾動仍然能有流暢的體驗。
另外蘋果還改變了應用訪問數據的方式。新的API仍舊采用異步的方式訪問數據,但調用更快了。盡管蘋果希望將這個新設計用於Core Data,它也適用於開發者采用的任何解決方案。
在這方面上,諸如Realm這樣的數據庫方案對於移動應用來說更好一些,速度上比Core Data或SQLite更快。蘋果自家的載入方案終於趕上來了。
新API在後台隊列中載入數據,因此這並不影響主線程。它也能夠自適應基於滾動操作的性能表現,因此數據載入能夠跟得上你讓“區塊”加載的操作。
如果你更想知道的是那些有著多排內容的應用,不用擔心,蘋果在加載這一類的“區塊”上也做出了重大的改進。
目前應用會一次性加載整排的內容。比如采用單排設計的應用,當你快速滾動內容時會出現卡頓。如果是擁有多排內容的應用,它就會像多米諾骨牌一樣,從左至右來加載那些“區塊”。
這樣一來,那些內容更復雜的應用也能得到和簡單應用相當的性能表現,而且不需要開發者進行額外的更新工作。蘋果指出這種新方案最適用於那些擁有相似尺寸的“區塊”,不過這種設計不是必須的。
如果某個應用是以頁面或是平板視圖來顯示內容的,那就一點問題都沒有了。蘋果全新的渲染API很適合這類應用,在你滾動內容時根本不會注意到有任何拖慢的載入時間。
最有趣的地方在於,開發者真的不需要為此做任何事情。所有的變化都在後端已有的API中完成了。只要應用兼容iOS10,應用就會運行得更加快速和順暢,至少蘋果是這麼說的。
如果某個開發者不喜歡這樣的設計,盡管不清楚他為什麼要拋棄這麼好的新方案,但他可以通過一行簡單的代碼回到過去的狀態。
蘋果的後端小魔術讓應用一下子變得更快了,這能夠讓用戶感到它們變得更好了。開發者不費勁,用戶們很開心,這還真是一次皆大歡喜的局面。