我正在try 优化一个2.4MB的图像(4514x5789)与Astro.

我试过:

<Image
  src={Image}
  alt="image"
  quality={80}
  format="webp"
  loading="lazy"
  widths={[390, Image.width]}
  sizes={`(max-width: 768) 390px, ${Image.width}px`}
  class="rounded-lg"
/>

不幸的是,根据PageSpeed Insights人的说法,这是不够的.我可以更改什么才能获得PageSpeed Insights分的性能分数?

推荐答案

根据Astro docs,您提供的widths属性将用于以HTML格式生成srcset.

以下是你的页面上的内容:

<img
  src="/_vercel/image?url=_astro%2Fdaniell.ewbYQu3K.jpg&amp;w=3840&amp;q=80" 
  alt="Daniell sitting"
  loading="lazy"
  widths="390,4514"
  sizes="(max-width: 768) 390px, 4514px"
  class="rounded-lg"
  width="4514"
  height="5789"
  decoding="async">

问题似乎是,你传递的是原始图像的宽度,作为srcset的潜在尺寸之一.在小于768px的设备上,将使用390px版本的图像.在大于768px的设备上,将使用完整的4514px图像.

此外,图像在页面上实际呈现的最大像素似乎是390px,因此您不需要比这更大的任何来源.要解决此问题,请try 从widthssizes中删除Image.width:

<Image
  src={Image}
  alt="image"
  quality={80}
  format="webp"
  loading="lazy"
  widths={[390]}
  sizes="390px"
  class="rounded-lg"
/>

Javascript相关问答推荐

有条件的悲剧

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

如何找出摆线表面上y与x相交的地方?

使用useEffect,axios和useParams进行react测试

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

在286之后恢复轮询

如何根据当前打开的BottomTab Screeb动态加载React组件?

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

如何在文本字段中输入变量?

如何将数据块添加到d3力有向图中?

以编程方式聚焦的链接将被聚焦,但样式不适用

MongoDB受困于太多的数据

按什么顺序接收`storage`事件?

将基元传递给THEN处理程序

Plotly.js栏为x轴栏添加辅助文本

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?

将Windows XP转换为原始数据以在html前端中显示

MUI-TABLE:MUI表组件中交替行的不同 colored颜色 不起作用

在Reaction Native中,ScrolltoIndex在结束时不一致地返回到索引0

如何在底部重叠多个div?