搜索
首页web前端css教程根据React中的网络和设备约束来优化图像

Optimize Images According to Network and Device Constraints in React

网络连接技术自互联网诞生以来发生了翻天覆地的变化。我们早已告别了拨号上网的时代,如今可以在移动网络上用智能手机观看高清视频。但并非所有移动网络连接都一样——老一代网络(3G、2G等)仍然占据主导地位,2020年全球近一半的连接都属于此类网络。

不幸的是,淘汰旧网络的过程非常缓慢,全球许多人仍然面临着页面加载缓慢的问题,这让人联想起家用互联网普及初期的情况。

现代网站变得资源密集型,包含大量图片和动画。对于使用低性能设备和不稳定网络连接的访问者来说,一个普通的网页可能需要一分钟才能完全加载。这主要是因为开发人员在处理用户硬件和网络状况时,往往会做出二元决策:设备要么属于台式机类别,要么属于智能手机类别;连接状态要么在线,要么离线。实际上,用户的环境往往更加细致复杂。

我们可以做得更好吗?

如何弥合那些使用低端设备和不稳定网络连接的用户之间的差距?首先,我们需要通过查看以下两个属性来快速评估他们的具体情况:

  • navigator.deviceMemory
  • navigator.connection

基于此,我们可以决定调整要提供的图像质量。然而,对于在服务器端渲染的Jamstack网站和应用程序来说,有一个问题——navigator对象以及任何其他浏览器API在渲染阶段都不可用。解决此问题的常用方法是添加大量响应式图像标记,但这带来了一个显著的痛点——低效的缩放。像ImageEngine这样的图像CDN可以帮助避免这个问题以及与响应式图像相关的其他陷阱,因为它通过对请求的资源进行即时自动智能调整来处理所有繁重的工作。

在适应用户网络限制方面,可以检测连接类型并指示图像CDN根据连接质量改变压缩率。以下是如何在React中实现这一点:

import React, { useState, useEffect } from 'react'

const useConnectionType = (defaultConnectionType) => {

  const isSupported = navigator?.connection?.effectiveType
    ? true
    : false

  const [connectionType, setNetworkStatus] = useState(
    isSupported
      ? navigator.connection.effectiveType
      : defaultConnectionType
  )

  useEffect(() => {
    if (isSupported) {
      const { connection } = navigator
      const updateConnectionType = () => {
        setNetworkStatus(connection.effectiveType)
      }

      connection.addEventListener('change', updateConnectionType)

      return () => {
        connection.removeEventListener('change', updateConnectionType)
      }
    }
  }, [])

  return [ connectionType, setNetworkStatus ]
}

const imageCDNHost = 'images.foo.com'

function ConnectionAwareComponent () {

  const [ connectionType ] = useConnectionType()

  let compressionLevel = 0

  switch (connectionType) {
    case 'slow-2g':
      compressionLevel = 65
      break
    case '2g':
      compressionLevel = 50
      break
    case '3g':
      compressionLevel = 30
      break
    case '4g':
      compressionLevel = 0
      break
  }

  return (
    <div>
      {/* 使用专用指令应用可变压缩 */}
      <img  src="%7B%60%24%7BimageCDNHost%7D/?imgeng?=cmpr_%24%7BcompressionLevel%7D%60%7D" alt="根据React中的网络和设备约束来优化图像" >
    </div>
  )
}

我们可以更进一步,为那些网络非常缓慢的用户提供模糊图像,并提供按需下载更高分辨率版本的选择。或者设计一个性能评分系统,并根据该系统调整发送的内容。

另一方面,用户使用“高速”4G连接并不一定意味着他们不关心节省数据,因为他们可能在漫游状态下访问网站。在网站上启用客户端提示将使网站所有者能够检测到数据节省标志的存在,并采取必要的步骤来适应用户的偏好。

更快图像的原因

中等CPU、适量的内存和低等级的连接并非虚构的限制。它们构成了真正的用户体验挑战,可能会影响全球数亿用户。一些公司开始将其产品融入包容性体验:像Netflix和Spotify这样的流媒体服务会根据您的网络状况调整流媒体质量,而许多其他公司则在幕后为用户进行自动图像优化。

在网络尚未普及的欠发达地区,可能并非目标市场。与此同时,如果为来自发达国家农村地区的用户提供网站的完整版本,他们可能会遇到令人不快的体验。我们可以通过一些小的调整来更体贴地调整发送/显示给用户的内容。

使用像ImageEngine这样的图像CDN可以简化图像优化过程,并自动响应网络限制的客户端提示。其结果是为网络受限的访问者提供更好的体验,并为开发人员提供优雅的工作流程。

以上是根据React中的网络和设备约束来优化图像的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
滑动页脚滑动页脚Apr 09, 2025 am 11:50 AM

刚刚推出了一个引人入胜的新网站。标语:Big Tech正在看着您。我们正在看大型技术。上升的出色工作。这

喜欢的页面喜欢的页面Apr 09, 2025 am 11:47 AM

前几天,我发布了有关在JavaScript中解析RSS提要的内容。我还发布了有关RSS设置的信息,讨论了Feedbin的核心。

重新创建Codepen Gutenberg嵌入块以进行理智。重新创建Codepen Gutenberg嵌入块以进行理智。Apr 09, 2025 am 11:43 AM

学习如何通过Chris Coyier实施WordPress的Gutenberg编辑器来创建一个自定义Codepen块,并为Sanity Studio提供预览。

如何使用CSS制作线路图如何使用CSS制作线路图Apr 09, 2025 am 11:36 AM

线,条和饼图是仪表板的面包和黄油,是任何数据可视化工具包的基本组成部分。当然,您可以使用SVG

编程SASS创建可访问的颜色组合编程SASS创建可访问的颜色组合Apr 09, 2025 am 11:30 AM

我们一直在寻求使网络更容易访问。颜色对比只是数学,因此Sass可以帮助涵盖设计师可能错过的边缘案例。

我们如何创建一个在SVG中生成格子呢模式的静态站点我们如何创建一个在SVG中生成格子呢模式的静态站点Apr 09, 2025 am 11:29 AM

格子呢是一块图案布,通常与苏格兰有关,尤其是他们时尚的苏格兰语。在Tar​​tanify.com上,我们收集了5,000多个格子呢

PHP模板的后续行动PHP模板的后续行动Apr 09, 2025 am 11:14 AM

不久前,我仅以PHP(基本上是Heredoc语法)发布了有关PHP模板的信息。我从字面上使用该技术来进行某种超级基础

使用Bootstrap组件创建模态图像库使用Bootstrap组件创建模态图像库Apr 09, 2025 am 11:10 AM

您是否曾经在网页上单击图像,该图像通过导航打开图像的较大版本以查看其他照片?

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境