使用CSS隐藏动画GIF是否可以节省浏览器资源?

Badr Day

我有一个gif图片。它仅在非常特定的事件上显示,而不是经常显示。默认情况下,gif的html<img>标记使用隐藏display: none

现在,我们都知道,gif在计算机的cpu上可能很难。我不知道如何进行基准测试或检查隐藏的gif是否仍然使用CPU带宽。

我用开发人员工具检查了gif的重画-并没有按预期进行。那挺好的。FPS表也不会上升,内存使用也不会上升。但是我有功能强大的CPU和计算机。当gif出现时,这些也不会增加。

是否有人对如何进行基准测试有想法,或者对浏览器了解得更多?我不想让这个gif成为从未看过它的人的资源消耗。而且我也不想将其从DOM中删除。

西弗曼

“ display:none”是你的朋友

如果您display:none在GIF的html<img>标记上使用,则GIF根本不会呈现,也不会使用任何CPU或GPU资源。这个这个了解释。

使用Java脚本暂停动画GIF

如果由于某种原因display:none无法负担费用,免费的libgif-jsx-gif Javascript库都可以以编程方式暂停和重新启动动画GIF的播放。这些库还提供了许多您可能不感兴趣的其他功能。有关这些库的更多说明,请参见此SO问题的答案

在HTML5标签内使用MP4而不是动画GIF。

为了提高页面加载速度并减少CPU和GPU负载,请将动画GIF转换为MP4视频,这需要显着减小的内存占用和更低的CPU / GPU使用率。从文章,请参阅以下摘录“如何优雅的代码可以伤害HTML5性能”乔治·劳顿

动画GIF由于文件较小而在许多网站上越来越受欢迎。但是,应尽可能避免使用它们(...)将视频用作动画而不是GIF,以实现良好的性能。当浏览器尝试制作GIF动画时,它使用图像中的更改来渲染对象。尽管文件可能很小,但渲染它们会占用CPU和内存。例如,一个200 KB的动画GIF可能需要千兆字节的内部存储器才能呈现。视频格式更容易呈现,可以更好地利用GPU,并且在呈现帧数据后更容易丢弃帧数据。

根据文章“优化GIF动画通过转换为HTML5视频”比利·霍夫曼

如今,超过90%的桌面浏览器支持MP4视频...对于现代移动设备,支持率接近100%...

我们的研究发现,动画GIF通常比正确编码的MP4视频大5至10倍。这种差异意味着GIF不仅浪费大量带宽,而且加载速度更慢,并且会带来不良的用户体验。

实际上,将动画GIF转换为MP4视频是一种了不起的优化,当您上传动画GIF时,恰恰是Twitter,Facebook和imgur等网站所做的。他们无声地将其转换为MP4视频并显示。

您可以使用免费的实用程序ffmpeg将动画GIF转换为MP4视频。然后,从此修改HTML:

<img src="video.gif" alt="" width="400" height="300" />

对此:

<video autoplay="autoplay" loop="loop" width="400" height="300">
  <source src="video.mp4" type="video/mp4" />
  <img src="video.gif" width="400" height="300" /></video>

这将自动启动视频并循环播放,而不会显示任何视频控件。这提供了与动画GIF相同的体验,但速度更快,更小。注意,我们仍然<img>指向<video>标记内的原始动画GIF 这样,在不太可能的情况下,访问者的浏览器不支持MP4视频,仍会显示动画GIF,并且用户仍然可以体验内容。


如果您仍然想要证明

如果您真的想证明动画GIF不会导致CPU / GPU消耗,可以使用David Corvoysier在他的文章“使用CSS有效地测量浏览器帧速率”中描述的巧妙方法

原理很简单:-在页面中插入一个非常简单的CSS动画项目,-定期计算该项目的计算位置,-每隔一秒,计算该项目所占据的不同位置的数量。

挺蠢的,嗯?好吧,也许吧,但是它给出了令人惊讶的准确结果,实际上...

您可以在此处下载他的Javascript代码他的演示仅评估CSS动画的加载,但是您可以将GIF添加到<div>他的代码中创建的每个动画中,以查看其对测试的影响。

在执行动画基准测试时,可以通过禁用硬件加速来有意地对计算机造成一些障碍,这会将渲染活动从GPU移到CPU。这可以帮助您更轻松地注意到动画对性能的影响。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从浏览器中获取CSS动画并导出其GIF?

来自分类Dev

是否可以根据浏览器类型使用不同的CSS背景图像?

来自分类Dev

浏览器是否加载隐藏资产

来自分类Dev

在Google Chrome浏览器中暂停.gif动画

来自分类Dev

是否可以在浏览器中使用路径模块?

来自分类Dev

是否可以使用JNLP安装浏览器

来自分类Dev

CDN中的资源(js文件)是否可以在网站/浏览器标签之间共享?

来自分类Dev

HTML:您是否可以从浏览器查找(CTRL + F)中隐藏/忽略文本元素

来自分类Dev

HTML:您是否可以从浏览器查找(CTRL + F)中隐藏/忽略文本元素

来自分类Dev

是否可以检测到浏览器何时使用后备字体而不是CSS中指定的主要字体?

来自分类Dev

使用CSS将GIF大小调整为浏览器窗口尺寸

来自分类Dev

浏览器是否继续使用“ Cache-Control:max-age”发送资源请求?

来自分类Dev

使用 console.log 时,是否可以在浏览器控制台中隐藏输出为 VMxxxx:x(userscript.html) 的辅助文本正文?

来自分类Dev

是否需要为不同的浏览器设置javascript动画?

来自分类Dev

CSS3动画链无法在Webkit浏览器中使用

来自分类Dev

Chrome浏览器的宽度和图标是否隐藏?

来自分类Dev

调整浏览器大小时如何隐藏DIV中的部分HTML文本?使用 CSS)

来自分类Dev

CSS过渡/动画跨浏览器不起作用

来自分类Dev

CSS动画未在基于Webkit的浏览器中运行

来自分类Dev

SVG CSS变换动画,跨浏览器问题

来自分类Dev

CSS过渡/动画跨浏览器不起作用

来自分类Dev

如何使CSS动画端点位于浏览器的右边缘

来自分类Dev

WebRTC-是否可以从源到接收器都使用浏览器代理视频?

来自分类Dev

是否可以使用ionic在浏览器中使用Google Analytics(分析)?

来自分类Dev

动画gif在Safari浏览器或Firefox中不会循环播放

来自分类Dev

如何在Google Chrome浏览器中停止GIF动画?

来自分类Dev

浏览器中运行的代码是否可以通过 about:flags 更改浏览器的配置

来自分类Dev

如果调整了浏览器窗口的大小,是否可以重新计算使用的“ srcset”图像?

来自分类Dev

使用Casper.js,是否可以接受浏览器权限提示?

Related 相关文章

  1. 1

    如何从浏览器中获取CSS动画并导出其GIF?

  2. 2

    是否可以根据浏览器类型使用不同的CSS背景图像?

  3. 3

    浏览器是否加载隐藏资产

  4. 4

    在Google Chrome浏览器中暂停.gif动画

  5. 5

    是否可以在浏览器中使用路径模块?

  6. 6

    是否可以使用JNLP安装浏览器

  7. 7

    CDN中的资源(js文件)是否可以在网站/浏览器标签之间共享?

  8. 8

    HTML:您是否可以从浏览器查找(CTRL + F)中隐藏/忽略文本元素

  9. 9

    HTML:您是否可以从浏览器查找(CTRL + F)中隐藏/忽略文本元素

  10. 10

    是否可以检测到浏览器何时使用后备字体而不是CSS中指定的主要字体?

  11. 11

    使用CSS将GIF大小调整为浏览器窗口尺寸

  12. 12

    浏览器是否继续使用“ Cache-Control:max-age”发送资源请求?

  13. 13

    使用 console.log 时,是否可以在浏览器控制台中隐藏输出为 VMxxxx:x(userscript.html) 的辅助文本正文?

  14. 14

    是否需要为不同的浏览器设置javascript动画?

  15. 15

    CSS3动画链无法在Webkit浏览器中使用

  16. 16

    Chrome浏览器的宽度和图标是否隐藏?

  17. 17

    调整浏览器大小时如何隐藏DIV中的部分HTML文本?使用 CSS)

  18. 18

    CSS过渡/动画跨浏览器不起作用

  19. 19

    CSS动画未在基于Webkit的浏览器中运行

  20. 20

    SVG CSS变换动画,跨浏览器问题

  21. 21

    CSS过渡/动画跨浏览器不起作用

  22. 22

    如何使CSS动画端点位于浏览器的右边缘

  23. 23

    WebRTC-是否可以从源到接收器都使用浏览器代理视频?

  24. 24

    是否可以使用ionic在浏览器中使用Google Analytics(分析)?

  25. 25

    动画gif在Safari浏览器或Firefox中不会循环播放

  26. 26

    如何在Google Chrome浏览器中停止GIF动画?

  27. 27

    浏览器中运行的代码是否可以通过 about:flags 更改浏览器的配置

  28. 28

    如果调整了浏览器窗口的大小,是否可以重新计算使用的“ srcset”图像?

  29. 29

    使用Casper.js,是否可以接受浏览器权限提示?

热门标签

归档