前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >万万没想到,一张图片也能引发网站崩溃!

万万没想到,一张图片也能引发网站崩溃!

作者头像
程序员鱼皮
发布2024-07-10 13:40:21
820
发布2024-07-10 13:40:21
举报
文章被收录于专栏:鱼皮客栈

大家好,我是程序员鱼皮。前段时间收到一位朋友的紧急求助,他的声音中透着焦急:“老鱼皮救救我啊,最近我的网站突然变得极其缓慢,有时候甚至完全打不开,你能帮忙看看吗?”

我说:行,你把网站发我看下吧。

事故

结果看了他的网站后,不到 30 秒我就发现了问题,真是哭笑不得!

首先,我打开浏览器的网络控制台,分析网站加载的所有资源的大小和加载时长,一眼就发现,竟然有一个大小为 10 MB 的图片资源!光是这一张图片,就加载了近 60 秒!

这样会导致每次有人访问网站时,服务器都要花费大量时间加载这张图片。不仅影响当前用户的访问体验,还会占用大量的网络带宽和服务器资源,导致其他用户的请求无法得到及时响应,进而影响了整个网站的性能。

其实这是一个前端新手常犯的错误,哦不,别说新手了,没搞过线上网站的同学可能都会疏忽这点。

解决这个问题的方法也很简单,直接让他用图片压缩工具手动压缩图片,再更新到网站上,加载速度就恢复正常了。

我开玩笑地说:不错,你动动手指,就把网站性能优化了近百倍!

一般来说,我建议单张图片的文件大小不要超过 200 KB,当然,具体情况具体分析。

网站图片优化方案

其实我们 编程导航网站 也遇到过类似的情况,因为文章列表页需要加载多篇文章和封面图,一旦有用户上传了较大的图片,就会影响网站的加载速度。

我们经过一系列地策略,成功优化了网站图片的加载,下面给大家分享我们网站图片优化的方案。

主要是以下几个方法,大家可以挑战一下,看看你能想到几种?如果能想到最后一个,那你真的很棒!

1、图片限制

上传图片时,尽量控制图片尺寸和大小在合理的范围内,比如限制图片大小不能超过 1 MB,从而避免过大的图片加载。尤其是允许用户自己上传图片的网站,一定要做限制!

图片限制的实现方案很简单,前端和后端都要判断上传图片的大小,超过则拒绝。

2、图片压缩

对于站内的静态图片(比如网站的图标、Logo、首页 Banner 图等),使用网上的图片压缩工具人工处理一下就好了。

但如果是用户自主上传的图片,比如文章封面图、用户个人头像等,可以采用后端自动压缩的策略,将图片压缩到合适的尺寸和大小。

还可以更改图片的格式,比收入 Google 的 WebP 格式或者 AVIF 格式,能够在保持相似图片质量的情况下,提供更小的文件体积。

对于 Java 程序,可以使用 webp-imageio 库,将图片转为 WebP 格式并进行压缩。

3、图片懒加载

图片懒加载是指进入页面时先不加载图片,等到用户滚动到图片所在位置时才进行加载。这样可以明显减少初始页面加载时间,提高用户体验,并且节省资源。

HTML5 中引入了 loading 属性,可以用于图片懒加载。该属性的值可以是 lazy(懒加载)或 eager(预加载,默认值)。比如:

代码语言:javascript
复制
<img src="path/to/image.jpg" loading="lazy" alt="Lazy Loaded Image">

但其实一般情况下我们都会使用组件库开发前端,组件库的图片组件基本都会内置懒加载支持,不太需要自己写。

4、异步加载

和懒加载类似的还有异步加载,是一种在不阻塞页面其他内容加载的情况下加载资源(如 JavaScript、CSS 文件等)的技术。它可以提高页面初始加载速度,并优化用户体验。一般异步加载主要应用于数据请求,有些用户看不到的数据可以不用加载,也就能减少服务器的带宽占用。

5、图片渐进加载

个人感觉渐进加载是一种比懒加载更高级的技术,具体是指在图像逐步加载的过程中逐渐提高图像质量。

比如在网速较慢的情况下,用户可能刚开始看到的图片比较模糊,之后逐渐变清晰。

和这个有些相似的技术还有骨架屏和 PWA(渐进式 Web 应用),都能在用户网速较慢的时候先渲染出一部分内容,提高用户体验。

现在很多组件库也支持图片渐进加载,不用自己实现了。

6、CDN 加速

将图片等静态资源存放在 CDN 内容分发网络上,而不是每次访问图片都要从服务器加载,能够有效提高加载速度,并减轻服务器的压力。

CDN 可以说是前端性能优化的利器,能静态化的页面就静态化,然后放到 CDN 上,不用再占用自己的服务器带宽,可谓美滋滋。但缺点就是 CDN 要按照流量等因素计费,而且还可能会。。。你懂的。

7、缩略图

最后这个方案是我认为最巧妙的,不需要复杂的技术,更多的是业务上的一个思考。

比如由于文章列表页的封面图展示区域比较小,用户其实不需要看到很高清的封面图。这种情况下,我们可以针对每张文章封面图生成一个尺寸极小的缩略图,在列表页展示缩略图而不是高清原图,能够大幅节约图片加载消耗的资源。

总结

OK 以上就是本期分享,通过以上策略,不仅能优化网站体验,还能大大地节约成本!希望我的分享能够帮助到更多的开发者和站长,避免因为图片导致网站崩溃等类似问题的发生。

记住,每一个细节都可能影响到整体的用户体验,优化工作不容忽视!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员鱼皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事故
  • 网站图片优化方案
    • 1、图片限制
      • 2、图片压缩
        • 3、图片懒加载
          • 4、异步加载
            • 5、图片渐进加载
              • 6、CDN 加速
                • 7、缩略图
                • 总结
                相关产品与服务
                内容分发网络 CDN
                内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档