几乎每个前端开发人员都知道,我们需要在不影响质量的情况下向用户提供尽可能小的图像。我们都知道如何实现这一目标。但这是一件没人喜欢做的苦差事。同样从商业角度来看,这需要时间,而时间就是金钱。所以,“足够好”就够了。
让我分享一下我们如何改进和自动化完美图像交付,而不会给开发人员带来更多工作。
通常是如何完成的
也许不是你,但有很多人——可能是我们大多数人。
您以 2 倍预期尺寸导出 PNG 图片,以满足高密度屏幕的需求,并将其用于 中。标签。如果您愿意多花 30 秒(或更长时间),您可以做得更好:将其转换为 WebP 并将两个版本放在 中。元素,让浏览器选择最好的一个(好吧,不是最好的,只是最新支持的并且浏览器最喜欢的格式)。
这就是“足够好”,而且通常确实如此。
但这并不完美。新的 iPad 很大,可以使用 2.5 倍甚至 3 倍的图像。另一方面,标准的企业 Lenovo ThinkPad 不需要额外的细节,1× 图像就完美了。
老实说,这一切对于手工工作来说都很好。没有人可以在一张照片上花费 15 分钟。
自动化至完美
对于我的完美主义大脑来说,“足够好”并不是这句话所说的那样。此外,我们的一些客户处于竞争激烈的领域,因此我们开始研究选择。没过多久。我们已经知道浏览器会发送 HTTP 标头来指示它们支持的图像格式。
我们需要的是找出元素可以根据给定屏幕的像素密度加载图像。这是服务器端渲染很难做到的事情,并且由于多种原因,通过 JavaScript 调整 src 是不可能的。
有了这个,我们就拥有了所需的一切:
- 服务器可以提供的格式。
- 前端开发者请求的图片尺寸。
- 显示屏的像素密度。
过程
以下是我们如何自动化图像优化过程:
-
接受任何图片上传
我们让开发者和管理员上传并保存他们想要的任何图片(当然开发者需要更加小心)。我们的系统可以处理任何事情 - 甚至是直接来自 DSLR 相机的 250 MB JPEG,我们成功地对其进行了转换和调整大小,然后当我们看到日志时放声大笑。
自动转换和压缩
上传图片后,我们的系统会自动:
- 将其转换为多种格式:PNG、WebP 和 AVIF。
- 使用 90% 质量 设置压缩每个版本。
为什么是90%?因为最后 10% 的质量往往会导致收益大幅递减。您可以节省大量存储空间和带宽,而且视觉质量不会出现任何明显差异。
-
生成多个分辨率
对于每个图像,我们根据像素密度乘数生成多个尺寸:
- 1×
- 1.5×
- 2×
-
3×
这可确保具有高分辨率屏幕的设备获得清晰的图像,而其他设备则接收适当大小的图像。
为了面向未来,我们只需添加或更改数字,一切都会自动处理(我们还没有制作 VR / AR 内容,但我怀疑这就是它会派上用场的技术)。
-
动态图像服务
在我们的 HTML 模板中,我们指定所需的图像尺寸(宽度或高度)。然后我们的服务器端代码:
- 检查优化图像是否存在。
- 如果没有,请将它们排队等待处理。
-
生成适当的具有像素密度 srcset 的元素。
浏览器会根据设备的功能自动选择最佳图像。
结果如下所示:
<picture> <source srcset="/Upload/2024/03/11/tn-w200-frantisek.webp 1x, /Upload/2024/03/11/tn-w300-frantisek.webp 1.5x, /Upload/2024/03/11/tn-w400-frantisek.webp 2x, /Upload/2024/03/11/tn-w600-frantisek.webp 3x"> <img src="/static/imghwm/default1.png" data-src="/Upload/2024/03/11/frantisek.jpg" class="lazy" style="max-width:90%" style="max-width:90%" loading="lazy" alt="Video poster"> </source></picture>
处理大图像
如果我们作为开发人员避免完美地调整图片大小和转换图片,我们就不能指望普通管理员或客户能够做到这一点。因此,我们让人们上传他们想要的内容,然后我们对其进行处理(良好的用户体验和客户关系)。
最初,我们没想到调整大小会如此频繁,因此我们几次完全终止了演示服务器。所以我们开发了这种方法:
- 我们在专用于图像处理的独立低端 VPS 上构建了一个简单的 API 服务。
- 我们的制作服务器将图像和所需的格式/尺寸发送到此服务。
- 处理后的图像被返回并存储以供服务。
结果
- 用户很高兴:图像加载速度快,并且在任何设备上看起来都很棒。
- 管理员很高兴:他们不必担心在上传之前调整图像大小或优化图像。
- 开发人员很高兴:该过程是自动化的,不需要额外的工作。
- 服务器很高兴:减少了服务图片的带宽消耗和 CPU 负载。
我知道我们可以使用任何公共商业服务来调整图片大小,但说实话,这是一个下午的工作(意思 - 更便宜),我们已经控制了所有方面。
我们是否将其商业化发布?
我们对此解决方案非常满意,因此我们正在考虑完善此调整大小和转换服务并使其可供您使用。这样的服务有兴趣吗?让我知道。也许我们可以削减很多。
对于开发者,由开发者 - 在这一点上可能是一个模因,但在这种情况下是残酷的事实。
代码(简化)
我无法分享调整大小的方面,但我可以向您展示选择和创建。我们使用 PHP 工作,这就是我们的工作方式。
生成元素
<picture> <source srcset="/Upload/2024/03/11/tn-w200-frantisek.webp 1x, /Upload/2024/03/11/tn-w300-frantisek.webp 1.5x, /Upload/2024/03/11/tn-w400-frantisek.webp 2x, /Upload/2024/03/11/tn-w600-frantisek.webp 3x"> <img src="/static/imghwm/default1.png" data-src="/Upload/2024/03/11/frantisek.jpg" class="lazy" style="max-width:90%" style="max-width:90%" loading="lazy" alt="Video poster"> </source></picture>
我们使用自定义模板系统,其中 HTML 与 PHP 混合(我知道这并不常见,但它最适合我们的需求)。
<div> <p>这段代码展示了一个逻辑。我们实际上做的是我们有一个文件及其变体的数据库,因此我们使用数组和对象而不是路径。但是,正如我所说,这完美地展示了我们所做工作的逻辑。</p> <p>正如你所看到的,如果前端开发人员编写了这段代码或 <img alt="Web 图像:完美(自动)调整大小和转换" >;标签,谁关心花费的时间。</p> <h2> 让我们指出问题 </h2> <p>此方法的构建不会在现实世界中引起任何问题。但它有两个需要改进的地方,我迫不及待地想确定(再次,只是出于完美主义者的角度)。</p> <ol> <li> <p><strong>双重排队</strong></p> <p>在前端首次加载该图像后,它会排队等待调整大小。如果网站流量大的话,其实可以排队两次。在现实世界中使用 - 没问题;所以它处理两次。这种情况在高流量网站上一年只发生两次。</p> </li> <li> <p><strong>大图初始显示</strong></p> <p>如果管理员上传大图片,则需要 5-10 分钟来调整大小和转换,因为这是在计划任务中进行的。同时,大图片也显示在他们的网页上。在实际使用中 - 通常只有管理员才能看到它,因为新内容在用户访问之前通常需要一些时间。在高流量网站上,我们将此计时器缩短至 1 分钟,因此这不是问题。</p> </li> </ol> <h2> 存储注意事项 </h2> <p>您可能会指出,现在我们有各种尺寸和格式的多个图像,这可能会占用大量存储空间。如果您的网站充满了图片和画廊,并且您需要每个图片和画廊的缩略图和详细图像,是的,它将使用大量存储空间。</p> <p>但磁盘空间是当今最便宜的组件。性能和用户体验方面的好处通常远远超过成本。这样,您就降低了 CPU 和整个基础设施的负载。</p> <p><strong>旁注 -</strong> 为什么关心基础设施?其他人正在处理这个问题,对吗?这是我经常听到的。简单的事实是,这不是真的。如果托管公司由于负载增加而没有更多客户而必须添加硬件以获得更高的带宽,他们将无法维持下去,并会很乐意将这些成本转嫁给服务器租用者。</p> <h2> 我们的实际结果和经验 </h2> <p>在 Google Search Console 中,Core Web Vitals 比以往任何时候都更加环保,加载时间通常要短得多,并且访问者会话时间更长(几个百分点,但我会接受!)。开发人员或管理员不需要额外的工作 - 一切都很顺利。</p> <p>我强烈建议每个开发者都使用这样的东西。它为我们做了很多事情,而我们实际上可能会忘记这个东西在后台存在并完成它的工作。事实上,我写这篇文章的时间比设置和完善所有系统的时间还要长。</p> <h2> 结论 </h2> <p>通过自动化图像优化,我们实现了:</p> <ul> <li>针对每个设备量身定制的完美图像交付。</li> <li>改进了页面加载时间和用户体验。</li> <li>减少开发人员的手动工作。</li> </ul> <p>如果您厌倦了图像优化的繁琐工作,请考虑自动化该过程。这对每个参与者来说都是双赢的。</p> <p><strong>你的图像使用了一些系统性的解决方案吗?</strong></p> <p><strong>还是手动转换它们?</strong></p> <p><strong>您尝试过 AVIF 吗?它们对较大图像有惊人的好处。</strong></p> </div>
以上是Web 图像:完美(自动)调整大小和转换的详细内容。更多信息请关注PHP中文网其他相关文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你应该关心DependencyInjection(DI),因为它能让你的代码更清晰、更易维护。1)DI通过解耦类,使其更模块化,2)提高了测试的便捷性和代码的灵活性,3)使用DI容器可以管理复杂的依赖关系,但要注意性能影响和循环依赖问题,4)最佳实践是依赖于抽象接口,实现松散耦合。

是的,优化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)优化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,并避免使用

theKeyStrategiestosiminificallyBoostphpapplicationPermenCeare:1)useOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)优化AtabaseInteractionswithPreparedStateTemtStatementStatementSandProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。