对电商网站来说,糟糕的页面性能可能会增加交易放弃率。一直以来,人们会使用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制作滑珠图、哑铃图效果展示在较长时间周期内,很多参数都是在一定范围内浮动的,并不是一成不变的,为了直观表达各类别的浮动范围,使用“滑珠图”就是一个不错的选择,当滑珠图两侧均有珠子的时候,又称为…