前端面試題之性能優(yōu)化大雜燴2

JavaScript相關(guān)優(yōu)化

  1. 把腳本放在頁面底部
    放在前面js加載會造成阻塞,影響后面dom的加載

  2. 使用外部JavaScript和CSS
    在現(xiàn)實環(huán)境中使用外部文件通常會產(chǎn)生較快的頁面,因為 JavaScript 和 CSS 有機會被瀏覽器緩存起來兆旬。對于內(nèi)聯(lián)的情況听诸,由于 HTML 文檔通常不會被配置為可以進行緩存的妈橄,所以每次請求 HTML 文檔都要下載 JavaScript 和 CSS厦凤。所以枢纠,如果 JavaScript 和 CSS 在外部文件中肤寝,瀏覽器可以緩存它們当辐,HTML 文檔的大小會被減少而不必增加 HTTP 請求數(shù)量。

  3. 壓縮JavaScript和CSS
    壓縮文件是為了降低網(wǎng)絡(luò)傳輸量鲤看,減少頁面請求的響應(yīng)時間缘揪。

  4. 減少DOM操作
    操作dom會產(chǎn)生幾種動作,極大的影響渲染的效率。其中l(wèi)ayout(布局)和paint(繪制)是最大的找筝。

  5. js開銷縮短解析時間
    開銷:加載-》解析和編譯-》執(zhí)行
    js的解析和編譯蹈垢,執(zhí)行要花很長時間(谷歌開發(fā)工具中的performance中可以查看。選中main主線程中的某一段袖裕。)
    解決方案:

    • 代碼拆分按需加載
    • tree shaking代碼減重
    • 避免長任務(wù)
    • requestAnimationFrame和repuestIdleCallback進行時間調(diào)度
  6. v8編譯原理(代碼優(yōu)化)

    • 解析js代碼成抽象語法樹-》字節(jié)碼-》機器碼
      編譯過程會進行優(yōu)化
      運行時可能會發(fā)生反優(yōu)化
    • v8內(nèi)部優(yōu)化
      腳本流:邊下載邊解析
      字節(jié)碼緩存:常用的字節(jié)碼會存起來(這個文件用到其他的文件也用到的參數(shù))
      函數(shù)懶解析:先解析用到的
    • 對象優(yōu)化(迎合v8進行優(yōu)化)
      保證對象初始化順序一致(對象初始化時v8會生成隱藏屬性以便后續(xù)復(fù)用并且是按照順序排序的)
      不要直接賦值對象新屬性(追加的屬性需要通過描述數(shù)組間接查找)
      使用數(shù)組代替類數(shù)組(v8會對數(shù)組進行優(yōu)化)比如先將類數(shù)組轉(zhuǎn)化成數(shù)組
      避免讀取數(shù)組越界(比如for循環(huán)多查找1個下標會照成性能相差6倍)

造成undefined和數(shù)字比較
數(shù)組也是對象曹抬,當找不到對應(yīng)下標的時候回沿著原型鏈向上找造成額外開銷
業(yè)務(wù)上無效

  1. js內(nèi)存,避免造成內(nèi)存泄漏
    通過變量是否能被訪問到來判斷內(nèi)存是否釋放急鳄。
  • 局部變量: 函數(shù)執(zhí)行完沒有閉包引用會被標記回收
  • 全局變量: 直到瀏覽器被卸載頁面釋放
  • 回收機制:
    引用計數(shù):每調(diào)用一次加一,當計數(shù)為0的時候進行回收谤民。缺點是不能解決循環(huán)引用(例如a對象依賴于b對象,標記清除(垃圾回收): 從根節(jié)點去訪問疾宏,當訪問到不能被訪問的對象就進行標記然后進行垃圾回收张足。(當a對象
    解決:避免意外的全局變量;避免反復(fù)運行引發(fā)的閉包坎藐;避免脫離的dom元素沒有被回收(所以react有ref這個api)为牍。

CSS 相關(guān)優(yōu)化

  1. 把樣式表放在<head>標簽中
    css放在head標簽中比css放在body標簽尾部少了一次構(gòu)建RenderTree, 一次計算布局和一次渲染網(wǎng)頁, 因此性能會更好。
  2. 不要使用CSS樣式表
  3. 使用<link>替代@import
  4. 不要使用filter
  5. 避免元素類型轉(zhuǎn)化(數(shù)組中放多種類型不利于v8引擎優(yōu)化代碼)
    • 降低css對渲染的阻塞(按需加載顺饮,放在dom前面加載)
    • 利用pu完成動畫(前面講到的復(fù)合)
    • 使用contain進行優(yōu)化(優(yōu)化強度大吵聪。例如: contan:layout告訴瀏覽器這個節(jié)點內(nèi)部的子元素和外面的使用font-display進行優(yōu)化:讓文字更早的顯示在頁面上,減輕文字閃動的問題

html 相關(guān)優(yōu)化

  1. 減少iframes使用
  2. 壓縮空白符
  3. 避免嵌套層次太深
  4. 避免使用table布局
  5. 減少沒必要的注釋
  6. 刪除元素默認屬性(比如默認checkbox等)

開發(fā)內(nèi)容相關(guān)優(yōu)化

  1. 減少HTTP請求數(shù)
  2. 減少DNS重定向
  3. 緩存AJax請求
  4. 延遲加載
  5. 預(yù)加載
  6. 減少DOM元素的數(shù)量
  7. 劃分內(nèi)容到不同域名
  8. 盡量減少使用iframe
  9. 避免404錯誤

服務(wù)器相關(guān)優(yōu)化

  1. 使用CDN
  2. 添加Expires或Cache-Control響應(yīng)頭
  3. 啟用Gzip
  4. 配置Etag
  5. 盡早輸出緩沖
  6. Ajax請求使用GET方法
  7. 避免圖片src為空
  8. 傳輸加載優(yōu)化
    服務(wù)器啟用gzip
  9. keep Alive(持久TCP連接)
    keepalive_requests 100;請求100次后開啟http的keepAlive有keepalive_timeout 65;65秒后關(guān)閉兼雄。
  10. http緩存
    最好是用no-cache(要用的時候需要在服務(wù)器那邊Etag驗證下)
  11. service workers
    • 加速重復(fù)訪問
    • 離線支持

Cookie相關(guān)優(yōu)化

  1. 減少cookie大小
  2. 靜態(tài)資源使用無cookie域名

首屏加載優(yōu)化

  1. 資源壓縮吟逝、傳輸壓縮、代碼拆分赦肋、tree shaking块攒、http緩存
  2. 路由懶加載、預(yù)渲染佃乘、inlineCss囱井、虛擬列表
  3. prefetch和preload調(diào)整加載順序js內(nèi)存管理
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市趣避,隨后出現(xiàn)的幾起案子庞呕,更是在濱河造成了極大的恐慌,老刑警劉巖程帕,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件住练,死亡現(xiàn)場離奇詭異,居然都是意外死亡愁拭,警方通過查閱死者的電腦和手機讲逛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岭埠,“玉大人盏混,你說我怎么就攤上這事蔚鸥。” “怎么了许赃?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵止喷,是天一觀的道長。 經(jīng)常有香客問我图焰,道長启盛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任技羔,我火速辦了婚禮,結(jié)果婚禮上卧抗,老公的妹妹穿的比我還像新娘藤滥。我一直安慰自己,他們只是感情好社裆,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布拙绊。 她就那樣靜靜地躺著,像睡著了一般泳秀。 火紅的嫁衣襯著肌膚如雪标沪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天嗜傅,我揣著相機與錄音金句,去河邊找鬼。 笑死吕嘀,一個胖子當著我的面吹牛违寞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偶房,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼趁曼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棕洋?” 一聲冷哼從身側(cè)響起挡闰,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掰盘,沒想到半個月后摄悯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡庆杜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年射众,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晃财。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡叨橱,死狀恐怖典蜕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罗洗,我是刑警寧澤愉舔,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伙菜,受9級特大地震影響轩缤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贩绕,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一火的、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淑倾,春花似錦馏鹤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碍讨,卻和暖如春治力,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勃黍。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工宵统, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉躲。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓榜田,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锻梳。 傳聞我的和親對象是個殘疾皇子箭券,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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