【发布时间】:2022-01-24 18:39:21
【问题描述】:
我有一个网站部署在下面的 Netlify 上: https://hungry-mclean-362570.netlify.com/
Github: https://github.com/shindosu/mutsuki-portfolio-client
为了提供一点背景知识,该应用由 React JS 提供支持。在<div id="right-side"> 的主页中,我有两个正在渲染的 React 组件。它们每个都由三个 JS 提供支持,它通过 GSAP 在两张图片之间无限交替,并带有图像过渡动画。所以总的来说,我在右侧渲染了 4 张图像。图片的大小总共约为 13MB(更多图片即将推出)
我还有一个滑块,如果值达到>=50,那么样式和图像将会改变,让用户知道他们正在查看的图像的“类别”。
现在,它还没有完成,所以不要介意不完整。困扰我的是图像的加载时间(由三个 JS,GSAP 处理)加载时间非常长,我认为这也会影响其他元素的加载时间。
如何加快加载过程? 我尝试减小图像大小(之前是 60MB,现在是 13MB!);我正在尝试切碎更多,但我能做到的最多是 600~KB/img 左右,而不会损失任何实质性的质量。
还有其他方法可以解决这个问题吗?这将是一个投资组合网站,因此项目页面中将有更多图像,所以我假设如果我继续我现在正在做的方式,结果将与我的页面一样或更差正在努力。
感谢您的宝贵时间!
【问题讨论】:
-
您拥有的那些巨大的 PNG 图像应该是 JPEG。即使是 PNG,通过 OxiPNG 运行它们也可以节省大约 33% 的大小。
-
除了找到减小图像大小的方法(我认为它们可能仍然太大),您可以研究的一些技术是:1)在进入站点之前预加载器?在您进入网站时,至少所有主要资产都会被加载。 2)仅加载您首先看到的滑块图像,推迟其他图像。 3)也许在加载期间使用占位符资产? 4)您可以进一步优化图像,例如使用 webp 格式?
-
给你一个使用 JPEG 而不是 PNG 的 PR:github.com/shindosu/mutsuki-portfolio-client/pull/9
-
那里还有 three.js 和 gsap.js 的完整副本;如果有更小的版本只包含您需要的功能,那就更好了。
-
您还使用了 1200 x 1800 的图像,但显示的尺寸要小得多。控制台会向您发出警告
THREE.WebGLRenderer: Texture has been resized from (1198x1800) to (1024x1024).,因此您可以考虑使用二次方的图像以避免浪费带宽。
标签: reactjs image three.js gsap