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