當面試官問你:如何進行性能優化?

来源:https://www.cnblogs.com/a609251438/archive/2020/01/09/12173776.html
-Advertisement-
Play Games

問題背景 在開發好頁面後,如何讓頁面更快更好的運行,是區分一個程式猿技術水平和視野的一個重要指標。所以面試時,面試官總會問你一個問題,如何進行性能優化呢? 性能優化是什麼 從前端的角度來說,性能優化可以分為兩個方向。從用戶角度來看,一個是頁面載入的很快,另一個是頁面使用起來很流暢。因此,對性能優化的 ...


問題背景

在開發好頁面後,如何讓頁面更快更好的運行,是區分一個程式猿技術水平和視野的一個重要指標。所以面試時,面試官總會問你一個問題,如何進行性能優化呢?

性能優化是什麼

從前端的角度來說,性能優化可以分為兩個方向。從用戶角度來看,一個是頁面載入的很快,另一個是頁面使用起來很流暢。因此,對性能優化的探索,我們可以分為頁面載入時間跟頁面運行效率兩個方向來進行研究

從瀏覽器打開到頁面渲染完成,花費了多少時間

瀏覽器解析->查詢緩存->dns查詢->建立鏈接->伺服器處理請求->伺服器發送響應->客戶端收到頁面->解析HTML->構建渲染樹->開始顯示內容(白屏時間)->首屏內容載入完成(首屏時間)->用戶可交互(DOMContentLoaded)->載入完成(load)如果我們要進行載入時間的優化,我們需要從這裡的每一個步驟都去思考,去總結,而避免東湊一點,西湊一點。

頁面載入時間監控

在對這些環節進行優化之前,我們需要知道如何監控這些環節花費了多少時間。

可以獲取到很多頁面載入相關的數據。比較常用的有

  • DNS解析時間: domainLookupEnd - domainLookupStart
  • TCP建立連接時間: connectEnd - connectStart
  • 白屏時間: responseStart - navigationStart
  • dom渲染完成時間: domContentLoadedEventEnd - navigationStart
  • 頁面onload時間: loadEventEnd - navigationStart

如果不使用該API,可以以伺服器渲染返回的時間,或是SPA路由跳轉離開的時間為起點,domContentLoaded,load等事件為結束點進行記錄。或是直接上google analytics。方法很多,就不細說了。

伺服器部分優化要點

後端部分可以對緩存,dns查詢時間,鏈接時間,處理請求時間,響應時間等進行優化。

dns查詢時間可以使用httpdns或是dns預載入,功能變數名稱收斂等手段優化。

建立連接的重點是長連接和鏈接復用,keep-alive,long-polling,http-straming,websocket或是自己寫過別的協議,更好的是直接上http2。為了優化鏈接的環節,前端這裡還需要對資源使用cdn,雪碧圖,代碼合併等手段。

伺服器處理請求這裡可以優化的點也不少,值得註意的就是移動端訪問PC端頁面需要跳轉到移動端頁面時,要再伺服器端使用302跳轉,不要在前端進行跳轉。還有就是啟用hsts,要求瀏覽器在之後的訪問使用https,減少無謂的http跳轉https,同時還可以防止ssl剝離攻擊,提升安全性。

伺服器發送響應環節,可以使用Transfer-Encoding=chunked,多次返迴響應,具體操作查詢bigpipe。還有就是減小cookie的體積等等。

推薦閱讀:

swoole通往大神之路——swoole任務中心說明及進程任務架構搭建


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • DOM盒模型和位置 client offset scroll 和滾動的關係 概覽 在dom裡面有幾個描述盒子位置信息的值, pading border margin width height client clientWidth 不要border clientHeight 不要border offs ...
  • 在spring實例化 之前bean對象封裝成 beanDefinition 對象 想瞭解詳情的請參考上一篇文章 好了 我們聊聊 Bean 的實例化過程的幾個重要角色 BeanDefinitionRegistryPostProcessor 介面 Refresh().invokeBeanFactoryP ...
  • 具體的LinkedList數據結構參考這個鏈接 隊列用法主要來自於Deque,而Deque又繼承自Queue 先從下麵一段代碼說起吧 如果對於隊列的數據結構不瞭解的話,對上面的註釋內容會比較迷糊。Queue介面主要是使LinkedList具有隊列的能力。隊列類似於我們生活中的排隊;特點就是先進先出, ...
  • 一、冒泡排序 1.也就是依次選出最大的放在最後面 package com.bjpowernode.java_learning; ​ public class D70_1_BubbleSort { public static void main(String[] args) { /* * 冒泡排序演算法 ...
  • 本系列筆記主要基於《深入理解Java虛擬機:JVM高級特性與最佳實踐 第2版》,是這本書的讀書筆記。 jstat命令用來查看JVM統計信息,可以查看類載入信息、垃圾收集的信息、JIT編譯信息等等,功能非常豐富。 所有的JDK工具都可以在Oracle官網的 "Java Tools Reference" ...
  • Spring整合單元測試 在前面的案例中我麽需要自己創建ApplicationContext對象,然後在調用getBean來獲取需要測試的Bean Spring提供了一種更加方便的方式來創建測試所需的ApplicationContext,並且可以幫助我們把需要測試的Bean直接註入到測試類中 添加依 ...
  • 固定資產管理系統是對高校固定資產的一個信息化管理系統,基本功能包括:對固定資產的購進、接觸、銷毀,對物品的使用狀態、借出狀態、庫存狀態等進行標識,對各類物品進行編號,根據編號進行查詢,根據名稱進行查詢等。本系統結構如下:(1)系統登錄: 用戶登錄模塊:登錄功能 重置(2)系統用戶管理: 對系統用戶的 ...
  • Redis 是一個開源的使用 ANSI C 語言編寫、支持網路、可基於記憶體亦可持久化的日誌型、Key-Value 資料庫,並提供多種語言的 API。從 2010年 3 月 15 日起,Redis 的開發工作由 VMware 主持。從 2013 年 5 月開始,Redis 的開發由 Pivotal 贊 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...