前端性能優(yōu)化總結(jié)

????????在實(shí)際的項(xiàng)目開(kāi)發(fā)中,不管是前端也好璧榄,后端也好,都需要?dú)q其性能進(jìn)行優(yōu)化吧雹,今天主要講講在前端常見(jiàn)的性能優(yōu)化方式:

一骨杂、減少請(qǐng)求資源大小或者次數(shù) 

1、盡量和并和壓縮css和js文件雄卷。(將css文件和并為一個(gè)搓蚪。將js合并為一個(gè))

原因:主要是為了減少http請(qǐng)求次數(shù)以及減少請(qǐng)求資源的大小

打包工具:webpack、gulp丁鹉、grunt....

2妒潭、盡量所使用的字體圖標(biāo)或者SVG圖標(biāo)來(lái)代替?zhèn)鹘y(tǒng)png圖

因?yàn)樽煮w圖標(biāo)或者SVG是矢量圖,代碼編寫(xiě)出來(lái)的揣钦,方大不會(huì)變形雳灾,而且渲染速度快

3、采用圖片的懶加載(延遲加載)

目的為了冯凹,減少頁(yè)面第一次加載過(guò)程中http的請(qǐng)求次數(shù)

具體步驟:

1谎亩、頁(yè)面開(kāi)始加載時(shí)不去發(fā)送http請(qǐng)求,而是放置一張占位圖

2、當(dāng)頁(yè)面加載完時(shí)团驱,并且圖片在可視區(qū)域再去請(qǐng)求加載圖片信息

4摸吠、能用css做的效果,不要用js做嚎花,能用原生js做的寸痢,不要輕易去使用第三方插件。

避免引入第三方大量的庫(kù)紊选。而自己卻只是用里面的一個(gè)小功能

5啼止、使用雪碧圖或者是說(shuō)圖片精靈

把所有相對(duì)較小的資源圖片,繪制在一張大圖上兵罢,只需要將大圖下載下來(lái)献烦,然后利用

圖片定位來(lái)講小圖展現(xiàn)在頁(yè)面中(background-position:百分比,數(shù)值)

6卖词、減少對(duì)cookie的使用(最主要的就是減少本地cookie存儲(chǔ)內(nèi)容的大泄恰),因?yàn)榭蛻舳?i>操作cookie的時(shí)候此蜈,這些信息總是在客戶端和服務(wù)端傳遞即横。如果上設(shè)置不當(dāng),每次發(fā)送

一個(gè)請(qǐng)求將會(huì)攜帶cookie

7裆赵、前端與后端進(jìn)行數(shù)據(jù)交互時(shí)东囚,對(duì)于多項(xiàng)數(shù)據(jù)盡可能基于json格式來(lái)進(jìn)行傳送。相對(duì)于使用xml

來(lái)說(shuō)傳輸有這個(gè)優(yōu)勢(shì)

目的:是數(shù)據(jù)處理方便战授,資源偏小

8页藻、前端與后端協(xié)商,合理使用keep-alive

9植兰、前端與服務(wù)器協(xié)商份帐,使用響應(yīng)資源的壓縮

10、避免使用iframe

不僅不好管控樣式钉跷,而且相當(dāng)于在本頁(yè)面又嵌套其他頁(yè)面弥鹦,消耗性能會(huì)更大。因?yàn)檫€回去加載這個(gè)嵌套頁(yè)面的資源

11爷辙、在基于ajax的get請(qǐng)求進(jìn)行數(shù)據(jù)交互的時(shí)候彬坏,根據(jù)需求可以讓其產(chǎn)生緩存(注意:這個(gè)

緩存不是我們常看到的304狀態(tài)碼膝晾,去瀏覽器本地取數(shù)據(jù))栓始,這樣在下一次從相同地址獲取是數(shù)據(jù)

時(shí),取得就是上一次緩存的數(shù)據(jù)血当。(注意:很少使用幻赚,一般都會(huì)清空禀忆。根據(jù)需求來(lái)做)

二、代碼優(yōu)化相關(guān)

1落恼、在js中盡量減少閉包的使用

原因:使用閉包后箩退,閉包所在的上下文不會(huì)被釋放

2、減少對(duì)DOM操作佳谦,主要是減少DOM的重繪與回流(重排)

關(guān)于重排(回流)的分離讀寫(xiě):如果需要設(shè)置多個(gè)樣式戴涝,把設(shè)置樣式全放在一起設(shè)置,不要一條一條的設(shè)置钻蔑。使用文檔碎片或者字符串拼接做數(shù)據(jù)綁定(DOM的動(dòng)態(tài)創(chuàng)建)

3啥刻、在js中避免嵌套循環(huán)和"死循環(huán)"(一旦遇到死循環(huán),瀏覽器就會(huì)直接卡掉)

4咪笑、把css放在body上可帽,把js放在body下面

讓其先加載css(注意:這里關(guān)于優(yōu)化沒(méi)有多大關(guān)系)

5、減少css表達(dá)式的使用

6窗怒、css選擇器解析規(guī)則所示從右往左解析的映跟。減少元素標(biāo)簽作為對(duì)后一個(gè)選擇對(duì)象

7、盡量將一個(gè)動(dòng)畫(huà)元素單獨(dú)設(shè)置為一個(gè)圖層(避免重繪或者回流的大卸嫡场)

注意:圖層不要過(guò)多設(shè)置申窘,否則不但效果沒(méi)有達(dá)到反而更差了

8弯蚜、在js封裝過(guò)程中孔轴,盡量做到低耦合高內(nèi)聚。減少頁(yè)面的冗余代碼

9碎捺、css中設(shè)置定位后路鹰,最好使用z-index改變盒子的層級(jí),讓盒子不在相同的平面上

10收厨、css導(dǎo)入的時(shí)候盡量減少@import導(dǎo)入式晋柱,因?yàn)锧import是同步操作,只有把對(duì)應(yīng)的樣式導(dǎo)入后诵叁,才會(huì)繼續(xù)向下加茲安雁竞,而link是異步的操作

11、使用window.requestAnimationFrame(js的幀動(dòng)畫(huà))代替?zhèn)鹘y(tǒng)的定時(shí)器動(dòng)畫(huà)

如果想使用每隔一段時(shí)間執(zhí)行動(dòng)畫(huà)拧额,應(yīng)該避免使用setInterval碑诉,盡量使用setTimeout

代替setInterval定時(shí)器。因?yàn)閟etInterval定時(shí)器存在弊端:可能造成兩個(gè)動(dòng)畫(huà)間隔時(shí)間

縮短

12侥锦、盡量減少使用遞歸进栽。避免死遞歸

解決:建議使用尾遞歸

13、基于script標(biāo)簽下載js文件時(shí)恭垦,可以使用defer或者async來(lái)異步加載

14快毛、在事件綁定中格嗅,盡可能使用事件委托,減少循環(huán)給DOM元素綁定事件處理函數(shù)唠帝。

15屯掖、在js封裝過(guò)程中,盡量做到低耦合高內(nèi)聚襟衰。減少頁(yè)面的冗余代碼

16懂扼、減少Flash的使用

三、存儲(chǔ)

1右蒲、結(jié)合后端阀湿,利用瀏覽器的緩存技術(shù),做一些緩存(讓后端返回304瑰妄,告訴瀏覽器去本地拉取數(shù)據(jù))陷嘴。(注意:也有弊端)可以讓一些不太會(huì)改變的靜態(tài)資源做緩存。比如:一些圖片间坐,js灾挨,cs

2、利用h5的新特性(localStorage竹宋、sessionStorage)做一些簡(jiǎn)單數(shù)據(jù)的存儲(chǔ)劳澄,避免向后臺(tái)請(qǐng)求數(shù)據(jù)或者說(shuō)在離線狀態(tài)下做一些數(shù)據(jù)展示。

四蜈七、其他優(yōu)化

1秒拔、避免使用iframe不僅不好管控樣式,而且相當(dāng)于在本頁(yè)面又嵌套其他頁(yè)面飒硅,消耗性能會(huì)更大砂缩。因?yàn)檫€回去加載這個(gè)嵌套頁(yè)面的資源

2、頁(yè)面中的是數(shù)據(jù)獲取采用異步編程和延遲分批加載三娩,使用異步加載是數(shù)據(jù)主要是為了避免瀏覽器失去響應(yīng)庵芭。如果你使用同步,加載數(shù)據(jù)很大并且很慢

那么雀监,頁(yè)面會(huì)在一段時(shí)間內(nèi)處于阻塞狀態(tài)双吆。目的:為了解決請(qǐng)求數(shù)據(jù)不耽擱渲染,提高頁(yè)面的

渲染效率会前。解決方法:需要?jiǎng)討B(tài)綁定的是數(shù)據(jù)區(qū)域先隱藏好乐,等數(shù)據(jù)返回并且綁定后在讓其顯示

延遲分批加載類似圖片懶加載。減少第一次頁(yè)面加載時(shí)候的http請(qǐng)求次數(shù)

3回官、頁(yè)面中出現(xiàn)音視頻標(biāo)簽曹宴,我們不讓頁(yè)面加載的時(shí)候去加載這些資源(否則第一次加載會(huì)很慢)

解決方法:只需要將音視頻的preload=none即可。

目的:為了等待頁(yè)面加載完成時(shí)歉提,并且音視頻要播放的時(shí)候去加茲安音視頻資源

4笛坦、盡量將一個(gè)動(dòng)畫(huà)元素單獨(dú)設(shè)置為一個(gè)圖層(避免重繪或者回流的大星)

注意:圖層不要過(guò)多設(shè)置,否則不但效果沒(méi)有達(dá)到反而更差了

本文轉(zhuǎn)載于https://www.cnblogs.com/lanxiansen/p/10972802.html版扩;

分類: 原生JS废离;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市礁芦,隨后出現(xiàn)的幾起案子蜻韭,更是在濱河造成了極大的恐慌,老刑警劉巖柿扣,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肖方,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡未状,警方通過(guò)查閱死者的電腦和手機(jī)俯画,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)司草,“玉大人艰垂,你說(shuō)我怎么就攤上這事÷窈纾” “怎么了猜憎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)搔课。 經(jīng)常有香客問(wèn)我胰柑,道長(zhǎng),這世上最難降的妖魔是什么辣辫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任旦事,我火速辦了婚禮,結(jié)果婚禮上急灭,老公的妹妹穿的比我還像新娘。我一直安慰自己谷遂,他們只是感情好葬馋,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著肾扰,像睡著了一般畴嘶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上集晚,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天窗悯,我揣著相機(jī)與錄音,去河邊找鬼偷拔。 笑死蒋院,一個(gè)胖子當(dāng)著我的面吹牛亏钩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播欺旧,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姑丑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辞友?” 一聲冷哼從身側(cè)響起栅哀,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎称龙,沒(méi)想到半個(gè)月后留拾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲫尊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年间驮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片马昨。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竞帽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸿捧,到底是詐尸還是另有隱情屹篓,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布匙奴,位于F島的核電站堆巧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泼菌。R本人自食惡果不足惜谍肤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哗伯。 院中可真熱鬧荒揣,春花似錦、人聲如沸焊刹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)虐块。三九已至俩滥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贺奠,已是汗流浹背霜旧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儡率,地道東北人挂据。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓以清,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親棱貌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玖媚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)站的劃分一般為二:前端和后臺(tái)。我們可以理解成后臺(tái)是用來(lái)實(shí)現(xiàn)網(wǎng)站的功能的婚脱,比如:實(shí)現(xiàn)用戶注冊(cè)今魔,用戶能夠?yàn)槲恼掳l(fā)表評(píng)...
    ConRon閱讀 759評(píng)論 0 0
  • 先說(shuō)總結(jié),前端優(yōu)化核心邏輯就是:減少請(qǐng)求數(shù)(或同時(shí)間請(qǐng)求數(shù))與請(qǐng)求資源大小障贸,減少重繪與回流 減少請(qǐng)求數(shù)(或者同一時(shí)...
    blossom_綻放閱讀 663評(píng)論 0 0
  • (1)減少HTTP請(qǐng)求次數(shù) 盡量合并圖片错森、CSS、JS篮洁。 Expires和Cache-Control (多由服務(wù)器...
    woow_wu7閱讀 667評(píng)論 0 0
  • 主要考慮的方面:從內(nèi)容上壓縮涩维,在請(qǐng)求上減少,頁(yè)面加載更快袁波,響應(yīng)更及時(shí)瓦阐,更好的用戶體驗(yàn)。 減少http請(qǐng)求方面: 用...
    阿金的故事閱讀 751評(píng)論 0 0
  • 一篷牌、PC端優(yōu)化策略 主要包括網(wǎng)絡(luò)加載類睡蟋、頁(yè)面渲染類、CSS優(yōu)化類枷颊、JavaScript執(zhí)行類戳杀、緩存類羽峰、圖片類秦士、架構(gòu)...
    puxiaotaoc閱讀 23,430評(píng)論 6 56