CSS模糊滤镜性能

Tho*_* E. 14 performance css3

我正在创建一个网站,其中包含带有背景和CSS3模糊的:: after元素.我注意到应用CSS3模糊对性能有很大的不利影响.

应用CSS3模糊后,大约有10 - 20帧/秒的下降(从60fps).

我使用CSS3滤镜来应用模糊的原因是因为这是应用于我想要模糊的图像的通用代码,即我不想使用图像编辑器手动模糊图像.

.blur::after {
    background-image:url(dog.png);
    filter:blur(3px);
}
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,是否有使用过滤器的替代方法:在不使用图像编辑器的情况下模糊具有更好性能的元素及其背景?

ps,我不介意使用javascript,jquery,css或html元素.

dan*_*ine 10

我遇到了同样的问题.我决定尝试添加一个用于提高3d CSS翻译性能的CSS代码段.有效!不知道为什么 - 如果有人能开导我,我会很高兴.(可能只是片段引发了GPU光栅化?)

-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;
-webkit-transform: translate3d(0,0,0);
-webkit-transform: translateZ(0);
backface-visibility: hidden;
perspective: 1000;
transform: translate3d(0,0,0);
transform: translateZ(0);
Run Code Online (Sandbox Code Playgroud)

请注意,我将这些样式应用于覆盖模糊元素的元素.

我只进行了非常有限的测试; 如果有人想做一些严格的基准测试或对这个问题提供一些见解,我们将不胜感激.

  • 诸如“transform:translateZ(0);”之类的规则通知浏览器将工作转移到 GPU(如果可能),这会减轻 CPU 的负载 (6认同)
  • 我目前还想模糊导航/菜单下拉菜单的背景.在移动设备上你可以忘记模糊,除非你像你那样做,什么[在SmashingMagazine的这篇文章中解释](https://www.smashingmagazine.com/2016/12/gpu-animation-doing-it-对/).仍在审议这个帖子,但我认为你做对了,不是百分百肯定,查看文章,值得你花时间确定,如果你想知道更多如何以及为什么这样做. (2认同)

小智 7

@ericjbasti的评论很有用:

我加了

<canvas id="myFogCanvas"></canvas>
Run Code Online (Sandbox Code Playgroud)

然后在scss中

.canvaswrapper{position: relative;}

#myFogCanvas{
  position: absolute;
  top: 0;
  left: 0;
  margin: 0;
  width: 100%;
  height: 100%;
  background-color: transparent;
}
Run Code Online (Sandbox Code Playgroud)

然后在js

var canvas = document.getElementById("myFogCanvas");
var ctx = canvas.getContext('2d');
//all the drawing stuff for canvas ... moveTo, lineTo, etc.
ctx.filter = 'blur(15px)';
ctx.strokeStyle = 'rgba(255, 255, 255, 0.8)';
ctx.lineWidth = 5;
ctx.stroke();
Run Code Online (Sandbox Code Playgroud)

然后我就可以使用动画@keyframes在CSS中为.canvaswrapper div设置动画。您可以使用var image = new Image(); 在画布上,然后使其模糊。

与CSS中使用模糊效果相比,该性能要好WAAAYYYY,尤其是在动画方面。