2020-11-27 分類: App開發(fā)
作為APP開發(fā)產(chǎn)品經(jīng)理,要對(duì)所負(fù)責(zé)產(chǎn)品的整體用戶體驗(yàn)負(fù)責(zé),產(chǎn)品的性能優(yōu)化是很重要的一個(gè)環(huán)節(jié),為了避免用戶在使用產(chǎn)品過程中出現(xiàn)卡頓、加載緩慢、崩潰等性能問題,同時(shí)也為了在安排性能優(yōu)化工作時(shí)做到心中有數(shù),我們有必要加深一下對(duì)性能優(yōu)化的理解。
WEB端性能優(yōu)化
網(wǎng)頁并不是單獨(dú)存在的東西,它需要一個(gè)載體(瀏覽器),無論是pc端還是移動(dòng)端。使用網(wǎng)頁的一個(gè)基本流程:在瀏覽器輸入網(wǎng)址、DNS解析(將輸入的域名轉(zhuǎn)換為IP地址)、下載html文件、下載css文件、下載js文件等等,當(dāng)然這一切都是基于網(wǎng)絡(luò)的,如果沒有網(wǎng)絡(luò)的話,網(wǎng)頁也就不能使用了。
前端頁面優(yōu)化
加載優(yōu)化
對(duì)于網(wǎng)頁來說,加載過程是最為耗時(shí)的過程,可能會(huì)占到總耗時(shí)約80%的時(shí)間,因此作為優(yōu)化的重點(diǎn)。
減少HTTP請(qǐng)求。每個(gè)請(qǐng)求建立連接也需要時(shí)間,dns解析也需要時(shí)間,所以做到盡量減少網(wǎng)絡(luò)請(qǐng)求個(gè)數(shù)。可采用如下方案:合并CSS、JS。合并小圖片,使用雪碧圖(把每張小圖標(biāo)以.png格式文件的形式引用到頁面上,使用雪碧圖只需要引用一張圖片,對(duì)內(nèi)存和帶寬更加友好)。使用iconfont或SVG代替小圖片。
使用緩存(關(guān)于緩存,可查看淺析互聯(lián)網(wǎng)中的緩存機(jī)制)。使用緩存可以減少向服務(wù)器的請(qǐng)求次數(shù),節(jié)省加載時(shí)間,所以所有靜態(tài)資源都要在服務(wù)器端設(shè)置緩存。使用緩存的方案:緩存一切可緩存的資源。使用外聯(lián)式引用CSS、JS。
壓縮HTML、CSS、JS。減少資源大小可以加快網(wǎng)頁的顯示速度,所以要對(duì)HTML、CSS、JS等進(jìn)行代碼壓縮。
避免相互阻塞。CSS的代碼放在頁面的頭部并使用Link方式引入,避免在HTML標(biāo)簽中寫style樣式,JS放在頁面尾部。
使用首屏加載。首屏的快速顯示,可以很大程度上提升用戶對(duì)頁面速度的感知,因此應(yīng)盡量針對(duì)首屏的快速顯示做優(yōu)化。
按需加載。將不影響首屏的資源和當(dāng)前屏幕資源不用的資源放到用戶需要時(shí)才加載??刹捎萌缦路桨福貉舆t加載LazyLoad。 滾屏加載。注:按需加載會(huì)出現(xiàn)重繪制,會(huì)影響渲染的性能。
預(yù)加載。大型的重資源頁面可使用提前加載下一頁的方式加載頁面。
圖片優(yōu)化。圖片過大會(huì)影響頁面的加載速度。優(yōu)化方案:使用iconfont或SVG代替。webp優(yōu)于jpg。PNG8優(yōu)于gif。
減少Cookie。Cookie會(huì)影響頁面的加載速度。
避免重定向(通過各種方法將各種網(wǎng)絡(luò)請(qǐng)求重新定個(gè)方向轉(zhuǎn)到其它位置)。重定向會(huì)影響加載速度,在服務(wù)器中應(yīng)正確設(shè)置避免重定向。
代碼優(yōu)化
相關(guān)代碼的一些優(yōu)化,也會(huì)提升網(wǎng)頁的性能。以下這些是我從開發(fā)哥哥那里得到的答案還有一些查詢的資料,這一塊的優(yōu)化還需要多和開發(fā)哥哥溝通。
盡量避免寫在HTML標(biāo)簽中寫Style屬性。
移除空的CSS代碼。
合理使用display屬性。
不濫用Web字體。
不聲明過多的font-size,過多的font-size引發(fā)CSS的效率。
標(biāo)準(zhǔn)化各種瀏覽器前綴。
JS避免不必要的Dom操作。
盡量使用ID選擇器,ID選擇器是快的。
渲染優(yōu)化
瀏覽器只有在確定了頁面編碼后才能正確的渲染頁面,所以在繪制頁面或執(zhí)行任何的JS代碼前,大部分的瀏覽器都會(huì)緩沖一定字節(jié)的數(shù)據(jù)來從中查找編碼信息。所以需要做一些如下的優(yōu)化:
減少Dom節(jié)點(diǎn)。Dom節(jié)點(diǎn)太多影響頁面的渲染,應(yīng)盡量減少Dom節(jié)點(diǎn)。
動(dòng)畫優(yōu)化。
后端性能優(yōu)化
在我們的網(wǎng)站越來越龐大之后,網(wǎng)站后端的系統(tǒng)架構(gòu)應(yīng)該逐步向高性能、高可用、高伸縮等特性進(jìn)行完善,后端架構(gòu)的完善對(duì)網(wǎng)站的性能也起著至關(guān)重要的作用。改善性能的一些方法如下:
應(yīng)用、數(shù)據(jù)、文件分離。將應(yīng)用程序、數(shù)據(jù)庫、文件各自部署在獨(dú)立的服務(wù)器上,并且根據(jù)服務(wù)器的用途配置好不同的硬件。
添加代理服務(wù)器。當(dāng)用戶請(qǐng)求達(dá)到時(shí)首先訪問代理服務(wù)器,代理服務(wù)器將緩存的數(shù)據(jù)返回給用戶,如果沒有緩存才會(huì)繼續(xù)向應(yīng)用服務(wù)器獲取,這樣降低了獲取數(shù)據(jù)的成本。
部署CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))。將數(shù)據(jù)內(nèi)容緩存到運(yùn)營商的機(jī)房,用戶訪問時(shí)先從最近的運(yùn)營商獲取數(shù)據(jù),這樣大大減少了網(wǎng)絡(luò)訪問的路徑。
使用集群改善應(yīng)用服務(wù)器性能。業(yè)務(wù)服務(wù)器作為網(wǎng)站的入口,會(huì)承擔(dān)大量的請(qǐng)求,往往通過業(yè)務(wù)服務(wù)器集群來共同分擔(dān)請(qǐng)求數(shù)。集群也就是部署多臺(tái)服務(wù)器。
數(shù)據(jù)庫讀寫分離。 隨著用戶量的增加,數(shù)據(jù)庫成為更大的瓶頸,改善數(shù)據(jù)庫性能常用的手段是進(jìn)行讀寫分離,讀寫分離就是將數(shù)據(jù)庫分為讀庫和寫庫。
將業(yè)務(wù)服務(wù)器進(jìn)行業(yè)務(wù)拆分。隨著業(yè)務(wù)的擴(kuò)展,應(yīng)用程序會(huì)變得非常臃腫,這時(shí)我們需要將應(yīng)用程序進(jìn)行業(yè)務(wù)拆分。每個(gè)業(yè)務(wù)負(fù)責(zé)相對(duì)獨(dú)立的業(yè)務(wù)運(yùn)作。業(yè)務(wù)之間可以通過消息進(jìn)行通信或者共享數(shù)據(jù)庫。
使用分布式文件存儲(chǔ)系統(tǒng)。用戶量增加,產(chǎn)生的文件也會(huì)越來越多,單臺(tái)的文件服務(wù)器已經(jīng)不能滿足需求,這時(shí)就需要分布式文件存儲(chǔ)系統(tǒng)來進(jìn)行支撐。
移動(dòng)端性能優(yōu)化
性能對(duì)于移動(dòng)端的用戶體驗(yàn)上更是尤其的重要,以下是針對(duì)移動(dòng)端性能優(yōu)化的總結(jié)內(nèi)容。
啟動(dòng)速度優(yōu)化
APP的啟動(dòng)會(huì)分為三中不同的狀態(tài):
冷啟動(dòng)。App沒有啟動(dòng)過或App進(jìn)程被killed, 系統(tǒng)中不存在該App進(jìn)程。在這個(gè)過程中,屏幕會(huì)顯示一個(gè)空白的窗口(顏色基于主題),直至首屏完全啟動(dòng)
熱啟動(dòng)。熱啟動(dòng)意味著你的App進(jìn)程只是處于后臺(tái),系統(tǒng)只是將其從后臺(tái)帶到前臺(tái),展示給用戶
溫啟動(dòng)。介于冷啟動(dòng)和熱啟動(dòng)之間。a用戶back退出了App,然后又啟動(dòng)。b用戶退出App后,系統(tǒng)可能由于內(nèi)存原因?qū)pp殺死
由此可見,啟動(dòng)優(yōu)化其實(shí)就是針對(duì)冷啟動(dòng)進(jìn)行的優(yōu)化。
UI布局優(yōu)化
布局的優(yōu)化遵循一個(gè)原則就是,盡量減少布局層級(jí)和復(fù)雜度,細(xì)節(jié)方面也是一些代碼層級(jí)的優(yōu)化。iOS與安卓端細(xì)節(jié)不同,此處就不做詳細(xì)闡述了。
頁面響應(yīng)速度優(yōu)化
避免“操作無響應(yīng)”的情況。原則是:不在主線程里面做繁重的操作。
消除頁面卡頓
用戶感覺到的卡頓,主要來源于界面的刷新。而界面的性能主要是依賴于設(shè)備的UI渲染能力。如果我們的UI設(shè)計(jì)過于復(fù)雜,或是實(shí)現(xiàn)不夠好,設(shè)備又不給力,界面就會(huì)像卡住了一樣,給用戶卡頓的感覺。消除頁面的卡頓應(yīng)該做到如下方面:
避免過于復(fù)雜的布局。
避免過度繪制(每屏每幀上,每個(gè)像素點(diǎn)應(yīng)該只被繪制一次,如果有多次繪制就是過度繪制了)。
電量優(yōu)化(針對(duì)于安卓設(shè)備)
對(duì)于用戶來說,App的電量損耗是用戶體驗(yàn)的一個(gè)方面,特別是當(dāng)今人們對(duì)移動(dòng)設(shè)備的依賴度越來越高的前提下,電量也是用戶特別關(guān)注的一個(gè)點(diǎn)。從我們手機(jī)的電池詳情統(tǒng)計(jì)可以簡單看出,手機(jī)中最耗電的模塊肯定是屏幕了,接著就是網(wǎng)絡(luò)相關(guān)。對(duì)于電量方面的優(yōu)化有以下幾種:
優(yōu)化網(wǎng)絡(luò)請(qǐng)求。
監(jiān)聽手機(jī)充電狀態(tài)。監(jiān)聽電池狀態(tài),可以將一些操作放在充電或是電量足夠的情況下進(jìn)行,例如用戶數(shù)據(jù)同步,數(shù)據(jù)上傳,下載更新包等。
及時(shí)關(guān)閉GPS,減少更新頻率。GPS或網(wǎng)絡(luò)可二選一,這樣會(huì)降低電量損耗。
網(wǎng)絡(luò)請(qǐng)求優(yōu)化
App的網(wǎng)絡(luò)連接對(duì)于用戶來說,影響很多,直接影響用戶對(duì)這個(gè)App的使用體驗(yàn)。其中較為重要的幾點(diǎn):
流量。流量是花錢買的,如果一個(gè)APP會(huì)浪費(fèi)掉用戶大量的流量,勢(shì)必會(huì)嚴(yán)重影響用戶體驗(yàn)
電量。電量現(xiàn)在對(duì)于用戶體驗(yàn)來說也是重要的一環(huán)
用戶等待。果App請(qǐng)求等待時(shí)間長,會(huì)給用戶網(wǎng)絡(luò)卡,應(yīng)用反應(yīng)慢的感覺,如果有替代品,我們的App很可能就會(huì)被用戶無情舍棄。
以下方面可以優(yōu)化網(wǎng)絡(luò)請(qǐng)求:
減少網(wǎng)絡(luò)數(shù)據(jù)獲取的頻次。
減少獲取數(shù)據(jù)包的大小。
加入網(wǎng)絡(luò)緩存與本地緩存。
打包網(wǎng)絡(luò)請(qǐng)求。
數(shù)據(jù)壓縮。
延時(shí)加載tab頁面。
優(yōu)化算法。
弱網(wǎng)測(cè)試與優(yōu)化。
數(shù)據(jù)庫優(yōu)化
和WEB端一樣,數(shù)據(jù)庫方面的優(yōu)化也會(huì)提升APP的使用性能。比如:
數(shù)據(jù)庫重構(gòu)。
查詢語句的優(yōu)化。
數(shù)據(jù)庫分庫。
服務(wù)器和客戶端的交互優(yōu)化
除了同WEB相似的服務(wù)器優(yōu)化,在服務(wù)器與客戶端交互方面可做如下優(yōu)化:
客戶端盡量少請(qǐng)求。
服務(wù)端盡量多做邏輯處理。
通信協(xié)議的優(yōu)化。
以上就是關(guān)于WEB與移動(dòng)端性能優(yōu)化方面的小總結(jié),性能優(yōu)化絕大多數(shù)是需要開發(fā)哥哥們來完成的,所以,好好善待開發(fā)哥哥們吧!
網(wǎng)頁標(biāo)題:APP開發(fā)整套軟件性能優(yōu)化流程
當(dāng)前地址:http://www.rwnh.cn/news/91394.html
網(wǎng)站建設(shè)、網(wǎng)絡(luò)推廣公司-創(chuàng)新互聯(lián),是專注品牌與效果的網(wǎng)站制作,網(wǎng)絡(luò)營銷seo公司;服務(wù)項(xiàng)目有App開發(fā)等
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容