借助Early Hints和HarperDB改善網頁性能

對電商網站來說,糟糕的頁面性能可能會增加交易放棄率。一直以來,人們會使用CDN進行緩存從而縮短頁面加載時間,但即便實施了強大的緩存,消費者在通過移動網絡訪問這些網站時可能仍然會需要頻繁等待。

最近誕生了一種名為“早期提示”(Early Hints)的全新行業標準,目前該標準已被最流行的網絡瀏覽器所采用。這項技術可以幫助網絡瀏覽器在渲染網站時預載網站資產(例如圖片縮略圖和CSS數據)。為此,必須對網站的托管基礎設施進行配置,以便向瀏覽器告知應檢索哪些資產。為了支撐這種流量,Akamai邊緣服務器也開始支持早期提示功能。

本文將概括介紹一種可提高大型電商零售商網頁性能的架構。該架構的特點是在Akamai邊緣服務器和一系列核心計算區域間,以協同工作的方式提供服務。具體來說,該架構會依靠Akamai?EdgeWorkers來智能地處理請求,并依靠HarperDB來存儲資產URL。這些服務被配置為可返回整個網站頁面上出現的所有圖片縮略圖URL的早期提示。在移動網絡上測試實施情況時,我們發現頁面渲染時間可從3秒以上縮短到2秒,提高了1/3。

早起提示和HarperDB工作流

  1. 用戶對電商網站上的頁面提出請求,請求由Akamai邊緣服務器處理。
  2. 邊緣服務器上的EdgeWorker將請求中的頁面URL發送到HarperDB集群。該數據庫維護著每個頁面的縮略圖URL記錄(不是縮略圖本身,而是這些縮略圖的URL)。
  3. EdgeWorker從HarperDB接收頁面的縮略圖URL。
  4. 邊緣服務器向用戶瀏覽器發送HTTP 103響應。
  5. 用戶瀏覽器收到103響應后,用收到的URL請求縮略圖。

克服挑戰

· 延遲敏感性

找出造成高延遲的來源,并盡量減少這些組件對延遲的影響。

當瀏覽器渲染網頁時,會對頁面內容提出初始請求,然后對頁面上出現的資產(如圖片、樣式表和JavaScript)提出一系列后續請求。如果初始請求需要時間讓源進行處理(也稱為“服務器思考時間”),那么瀏覽器就需要等待,因為在收到響應前,瀏覽器無法針對后續需要的資產提出請求。

有了早期提示,邊緣基礎設施就會以異步的方式通知瀏覽器,讓瀏覽器知道自己應該在源處理初始請求的同時提前去獲取這些資產。為此,邊緣基礎設施會為這些資產發送HTTP 103響應。該響應包含資產的URL,瀏覽器可以提前開始處理后續請求,同時繼續等待源處理初始請求完成后返回HTTP 200響應。或者,瀏覽器也可以從自己的緩存中加載這些資產(如果存在的話)。

這種工作流程與另一種類似的技術“服務器推送”(Server Push)其實并不相同。服務器推送是由邊緣直接向瀏覽器推送重要資產,同時等待源服務器的“思考時間”。無論瀏覽器本地緩存中是否已經存儲了這些資產,服務器推送都會發送相關響應,這樣就會產生不必要的流量。

在實施EdgeWorkers和HarperDB集群時,對這兩個服務之間的連接進行調整可以進一步降低延遲。例如,在測試中,對Global Traffic Management的路由行為而言,優先考慮地理位置的近似性而非負載因素,是一種更有益的做法。這可以通過調整Load Imbalance Factor實現。

· 擴展電商產品目錄

在維持低延遲的同時擴大電商產品目錄的規模。

這個解決方案需要支撐的電商產品目錄規模可達數百萬項,這也給早期提示功能的配置帶來了挑戰。因為在為特定頁面請求分配早期提示URL的EdgeWorker中,不可能容納如此多的項目。因此,我們決定將此記錄保存在另一個支持現有源基礎設施的數據庫集群中。之所以選擇HarperDB,是因為它可以支持網站的擴展和速度要求。

早期提示和HarperDB設計示意圖

該解決方案使用Akamai EdgeWorkers配置早期提示,并創建了一個分布在10個Akamai核心計算區域的HarperDB集群。該HarperDB集群維護著電商網站每個頁面的產品縮略圖URL記錄。Akamai邊緣服務器負責將這些縮略圖URL返回給用戶的瀏覽器。

1.用戶請求訪問電商網站上的產品頁面。該請求的URL可能如下:

https://www.example.com/products/example-product/

2.請求由Akamai邊緣服務器處理。在請求生命周期的不同階段,Akamai EdgeWorker可對請求執行邏輯處理。在本解決方案中,EdgeWorker由onClientRequest事件觸發。

3.邊緣服務器還為電商網站保留了頁面內容和資產的緩存,緩存中的內容不會從電商網站源站點檢索。

4.處理請求:

  • EdgeWorker向HarperDB集群發出HTTPS子請求。該請求將通過Akamai Global Traffic Management路由到與Akamai邊緣服務器延遲最低的HarperDB實例。請求會將原始URL(如https://www.example.com/products/example-product/)作為參數傳遞。
    Akamai邊緣服務器會向用戶瀏覽器返回一個HTTP 103響應。該響應包含產品縮略圖的URL以及頁面上使用的關鍵JS和CSS文件列表。用戶瀏覽器會對這些資產提出額外請求。
  • 任何存儲在邊緣服務器緩存中的頁面內容和資產都會在HTTP 200響應中返回給瀏覽器。如果頁面請求與緩存中的內容相匹配,則不會使用早期提示來預載資產。取而代之的是使用標準的預加載鏈接元素。

5.HarperDB集群中的縮略圖URL記錄會根據電商網站源的新信息定期更新。

· 系統和組件

1.Akamai邊緣服務器:距離用戶最近的Akamai邊緣服務器。該邊緣服務器會緩存電商網站的頁面內容和資產。這些服務器上運行的EdgeWorkers負責對請求和響應執行邏輯處理。

2.Akamai EdgeWorkers:在請求及響應的生命周期內,負責在Akamai邊緣服務器上執行可配置的JavaScript。在本解決方案中,EdgeWorker負責檢索特定電商網站頁面的縮略圖URL。EdgeWorker可以借助Akamai Early Hints API以編程方式通知邊緣服務器,并將縮略圖的HTTP 103響應發送到用戶瀏覽器。

3.HarperDB集群:安裝在10個核心計算區域內的分布式數據庫集群。該集群將電商頁面URL映射到特定頁面上出現的圖片縮略圖URL。該集群充當了EdgeWorker縮略圖URL請求的源。

4.Global Traffic Management:將EdgeWorker的早期提示子請求路由到HarperDB集群。

5.電商基礎設施:電商網站的現有源Web服務器。

總結

作為一種HTTP狀態碼,早期提示(Early Hint)的目的是在服務端完全生成響應前,向客戶端發送部分提示信息,從而加速網頁加載。這個技術在提升用戶體驗和優化網絡性能方面有顯著價值,可顯著優化網頁加載性能,特別適合對加載速度敏感的場景,是一種現代Web性能優化的重要工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91155.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MEMS陀螺如何成為無人機穩定飛行的核心?

在無人機自主翱翔、靈活機動并適應多變環境的背后,對其運動狀態——尤其是姿態——的精確感知是基石。作為飛行控制系統(飛控)的“內耳”,陀螺儀實時捕捉機體繞X、Y、Z三軸的旋轉角速度。這一核心數據是飛控進行姿態解算和維持飛行…

騰訊云拉取docker鏡像失敗怎么辦

ps:我直接按照步驟1和2就解決了 以下內容來自豆包 在騰訊云服務器上拉取 Docker 鏡像失敗,可以按照以下步驟排查和解決: 一、檢查網絡連接 確認服務器網絡正常 bash ping www.baidu.com # 測試公網連通性如果無法 ping 通,檢查服務器防火墻…

Apache FOP實踐——pdf模板引擎

文章目錄 基本概念設計思想具體實踐完整應用 基本概念 Apache FOP(Formatting Objects Processor)是一個基于Java的開源工具,用于將 XSL-FO(XSL Formatting Objects) 文檔轉換為PDF、圖像等格式。 設計思想 將內容&…

WebRTC核心組件技術解析:架構、作用與協同機制

引言:WebRTC的技術定位與價值 WebRTC(Web Real-Time Communication)作為一項開源實時通信標準,已成為瀏覽器原生音視頻交互、P2P數據傳輸的技術基石。自2011年開源以來,其標準化進程由W3C(API層&#xff0…

OmniParser:提升工作效率的視覺界面解析工具

OmniParser:基于視覺的用戶界面解析工具在現代軟件開發中,用戶界面的自動化處理變得愈發重要。OmniParser 是一個強大的工具,旨在將用戶界面的截圖解析為結構化的、易于理解的元素,從而顯著提升了大型語言模型(如GPT-4…

C#程序員計算器

使用C#語言編寫程序員計算器,使其能夠進行加減乘除和與或非等邏輯運算。 calculator.cs 代碼如下 using System; using System.Numerics; using System.Globalization;namespace Calculator1 {public enum CalcBase { Bin 2, Oct 8, Dec 10, Hex 16 }public en…

國產音頻DA轉換芯片DP7361支持192K六通道24位DA轉換器

產品概述 DP7361 是一款立體聲六通道線性輸出的數模轉換器,內含插值濾波器、Multi-Bit 數模轉換 器、模擬輸出濾波器,支持主流的音頻數據格式。 DP7361 片上集成線性低通模擬濾波器和四階 Multi-Bit Δ-∑調制器,能自動檢測信號頻率和主時鐘頻…

【C51單片機四個按鍵控制流水燈】2022-9-30

緣由C51,四個按鍵控制流水燈-嵌入式-CSDN問答 #include "REG52.h" sbit k1P3^0; sbit k2P3^1; sbit k3P3^2; sbit k4P3^3; unsigned char code lsd[]{127,191,223,239,247,251,253,254};//跑馬燈 void jsys(unsigned char y,unsigned char s){unsigned c…

Python 腳本:獲取公網 IPv4 和 IPv6 地址

本方案適合撥號寬帶網絡環境,當檢測到公網IP地址變更時,可聯動自動觸發MQTT消息推送或郵件通知,實現動態IP的實時監控與告警。 0x01 代碼import re import time import requestsdef extract_ip(html):"""用正則提取 IP&…

數字化轉型-制造業未來藍圖:“超自動化”工廠

超自動化:2040年未來工廠的顛覆性藍圖工業革命250年后的新一輪范式革命 (埃森哲:未來的制造:超自動化工廠藍圖有感)🔄 從機械化到超自動化:制造業的第五次進化 自18世紀工業革命始,…

Java 15 新特性解析與代碼示例

Java 15 新特性解析與代碼示例 文章目錄Java 15 新特性解析與代碼示例引言1. 密封類(Sealed Classes)1.1. 什么是密封類?1.2. 為什么使用密封類?1.3. 語法1.4. 與傳統方法的對比1.5. 使用場景1.6. 示例:結合模式匹配2.…

Vue 3 入門教程 - 1、基礎概念與環境搭建

一、Vue 3 簡介 Vue.js 是一款流行的 JavaScript 前端框架,用于構建用戶界面。Vue 3 作為其最新版本,帶來了諸多令人矚目的新特性與性能優化,為開發者打造了更為高效、靈活的開發體驗。 1.1 Vue 3 的優勢 性能提升:對虛擬 DOM …

SpringBoot之多環境配置全解析

SpringBoot之多環境配置全解析一、多環境配置的核心思路二、3種配置文件格式詳解2.1 properties格式(傳統格式)1. 基礎配置文件(application.properties)2. 環境專屬配置文件2.2 yaml/yml格式(推薦)1. 單文…

uvm-tlm-nonblocking-get-port

前文展示了使用本質為阻塞性質的uvm_blocking_get_port TLM端口的示例,其中接收方會停滯等待發送方完成get任務。類似地,UVM TLM還提供非阻塞類型的uvm_nonblocking_get_port,發送方需通過try_get來檢測get是否成功,或通過can_get…

【NCS隨筆】如何在hello_world添加藍牙功能(一)

如何在hello_world添加藍牙功能(一)環境準備 硬件:nRF54L15DK 軟件版本:NCS3.0.2 例程:hello_world 宏的配置 # Config loggerCONFIG_LOGyCONFIG_USE_SEGGER_RTTyCONFIG_LOG_BACKEND_RTTyCONFIG_LOG_BACKEND_UARTnONFI…

機器學習——KNN實現手寫數字識別:基于 OpenCV 和 scikit-learn 的實戰教學 (超級超級超級簡單)

用KNN實現手寫數字識別:基于 OpenCV 和 scikit-learn 的實戰教學在這篇文章中,我們將使用 KNN(K-Nearest Neighbors)算法對手寫數字進行分類識別。我們會用 OpenCV 讀取圖像并預處理數據,用 scikit-learn 構建并訓練模…

【Git】分支

文章目錄理解分支創建分支切換分支合并分支刪除分支合并沖突分支管理策略分支策略bug 分支刪除臨時分支小結理解分支 本章開始介紹 Git 的殺手級功能之一(注意是之一,也就是后面還有之二,之三……):分支。分支就是科幻…

【32】C# WinForm入門到精通 ——打開文件OpenFileDialog 【屬性、方法、事件、實例、源碼】

WinForm 是 Windows Form 的簡稱,是基于 .NET Framework 平臺的客戶端(PC軟件)開發技術,是 C# 語言中的一個重要應用。 .NET 提供了大量 Windows 風格的控件和事件,可以直接拿來使用。 本專欄內容是按照標題序號逐漸…

Wan2.2開源第1天:動態燈光功能開啟創意氛圍新境界

在開源軟件蓬勃發展的今天,每一次新版本的發布都如同在創意的星空中點亮了一顆璀璨的新星。今天,(通義萬相國際版wan)Wan2.2正式開源,它帶著令人眼前一亮的動態燈光功能驚艷登場,為所有追求創意與氛圍營造的…

Excel制作滑珠圖、啞鈴圖

Excel制作滑珠圖、啞鈴圖效果展示在較長時間周期內,很多參數都是在一定范圍內浮動的,并不是一成不變的,為了直觀表達各類別的浮動范圍,使用“滑珠圖”就是一個不錯的選擇,當滑珠圖兩側均有珠子的時候,又稱為…