界面如何設(shè)計(jì)才能避免不必要的性能浪費(fèi)
頁(yè)面卡頓、加載慢,真的是代碼鍋?其實(shí)設(shè)計(jì)也有責(zé)任!這篇文章教你怎么從界面設(shè)計(jì)入手,避開(kāi)性能陷阱,讓產(chǎn)品又美又快。
在比對(duì)設(shè)計(jì)方案時(shí),我們經(jīng)常聽(tīng)開(kāi)發(fā)說(shuō),你這個(gè)設(shè)計(jì)方案會(huì)影響性能,不太合適。
設(shè)計(jì)為什么會(huì)影響性能,那該怎樣設(shè)計(jì)才能不造成性能浪費(fèi)?
首先,設(shè)計(jì)之所以會(huì)影響性能,主要表現(xiàn)在為交互添加監(jiān)聽(tīng)事件上。例如,輸入框在默認(rèn)和滾動(dòng)時(shí)的圓角不一致,開(kāi)發(fā)需要時(shí)時(shí)監(jiān)聽(tīng),而圓角監(jiān)聽(tīng)對(duì)于業(yè)務(wù)上其實(shí)沒(méi)有實(shí)際的大的變化,對(duì)于界面美觀影響也微乎其微,這其實(shí)就是過(guò)度監(jiān)聽(tīng),對(duì)開(kāi)發(fā)性能造成了一定的浪費(fèi)。
當(dāng)一個(gè)頁(yè)面充斥著成百上千的事件監(jiān)聽(tīng)器時(shí),哪怕每個(gè)監(jiān)聽(tīng)器只消耗一點(diǎn)點(diǎn)資源,累積起來(lái)也會(huì)成為性能的沉重負(fù)擔(dān)。因此該如何為我們的監(jiān)聽(tīng)事件“瘦身”,實(shí)現(xiàn)性能與體驗(yàn)的完美平衡?
一、識(shí)別不必要的監(jiān)聽(tīng)事件
并非所有交互都需要實(shí)時(shí)監(jiān)聽(tīng)。我們首先需要區(qū)分必要監(jiān)聽(tīng)與過(guò)度監(jiān)聽(tīng)。
必要監(jiān)聽(tīng)指直接影響用戶(hù)體驗(yàn)的核心交互,如表單驗(yàn)證、按鈕點(diǎn)擊、手勢(shì)操作等。而過(guò)度監(jiān)聽(tīng)往往體現(xiàn)在:
- 在數(shù)百個(gè)列表項(xiàng)上綁定獨(dú)立點(diǎn)擊監(jiān)聽(tīng)器
- 在滾動(dòng)事件中執(zhí)行復(fù)雜的DOM操作
- 在鼠標(biāo)移動(dòng)事件中頻繁觸發(fā)重渲染
- 對(duì)隱藏或不可見(jiàn)元素仍保持事件綁定
舉個(gè)例子,我們經(jīng)常在電商網(wǎng)站上看到復(fù)雜的篩選器,如果每個(gè)過(guò)濾器選項(xiàng)(價(jià)格、品牌、顏色等)都有獨(dú)立的change監(jiān)聽(tīng)器,每次變化都觸發(fā)完整的產(chǎn)品過(guò)濾和重新渲染,用戶(hù)快速調(diào)整多個(gè)過(guò)濾器時(shí)連續(xù)觸發(fā)多次昂貴操,且界面出現(xiàn)明顯卡頓和閃爍。
解決的辦法:防抖處理+批量更新。也就是在所有的篩選項(xiàng)都選擇完畢后,在統(tǒng)一執(zhí)行篩選,這樣就能避免不必要的性能浪費(fèi)。
再比如,多行輸入框過(guò)度輸入監(jiān)聽(tīng),在默認(rèn)高度和滾動(dòng)高度時(shí)的圓角不一致。
二、頻率控制:給事件加上“節(jié)流閥”
某些事件(如滾動(dòng)、調(diào)整窗口大小、鼠標(biāo)移動(dòng))會(huì)以極高頻率觸發(fā),如果不加控制,極易導(dǎo)致性能問(wèn)題。
1.防抖(Debounce)
等到事件停止觸發(fā)后再執(zhí)行,適用于搜索框輸入等場(chǎng)景。
2.節(jié)流(Throttle)
保證在一定時(shí)間內(nèi)只執(zhí)行一次,適用于滾動(dòng)事件等。比如如果一個(gè)社交媒體頁(yè)面,每滾動(dòng)一小段距離就加載新內(nèi)容,同時(shí)每個(gè)帖子都有獨(dú)立的點(diǎn)贊、評(píng)論和分享監(jiān)聽(tīng)器。隨著用戶(hù)滾動(dòng),帖子數(shù)量不斷增加,監(jiān)聽(tīng)器數(shù)量線性增長(zhǎng)。
使用事件委托,只在容器級(jí)別綁定一次事件監(jiān)聽(tīng)。
三、少即是多
性能優(yōu)化不是要?jiǎng)儕Z交互的豐富性,而是要找到體驗(yàn)與效率的最佳平衡點(diǎn)。在設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,時(shí)刻問(wèn)自己:這個(gè)監(jiān)聽(tīng)真的必要嗎?有更高效的方式嗎?這種設(shè)計(jì)會(huì)不會(huì)在低性能設(shè)備上造成問(wèn)題?只有這樣,我們才能創(chuàng)造出既功能豐富又性能卓越的用戶(hù)界面。
專(zhuān)欄作家
灰研走B,微信公眾號(hào):灰研走B,人人都是產(chǎn)品經(jīng)理專(zhuān)欄作家。專(zhuān)注于交互設(shè)計(jì)的新思路,新解法,為陪跑型SaaS企業(yè)提供項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自Unsplash,基于 CC0 協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒(méi)評(píng)論,等你發(fā)揮!