简单的jquery幻灯片导致高CPU使用率

时间:2014-09-28 07:25:11

标签: jquery slideshow cpu

所以我决定使用一个简单的1行jquery内容滑块,而不是选择膨胀的插件。我正在使用animated.css除了淡入/淡出幻灯片的jquery之外的文本淡入淡出。

HTML:

<section id="student-blocks">
    <div>
        <h2 class="animated fadeUp">News Item #1</h2>
        <p "animated fadeIn">lorem</p>
    </div>
    <div>
        <h2 class="animated fadeUp">News Item #2</h2>
        <p "animated fadeIn">lorem</p>
    </div>
    <div>
        <h2 class="animated fadeUp">News Item #3</h2>
        <p "animated fadeIn">lorem</p>
    </div>
</section>

JQuery的:

$(function ()
{

    $("#student-blocks > div:gt(0)").hide();

    setInterval(function ()
    {
        $('#student-blocks > div:first')
        .hide()
        .next()
        .fadeIn()
        .end()
        .appendTo('#student-blocks');
    }, 4000);
});

PAGE主页在这里:http://cloud69.comoj.com/pages/

问题

此幻灯片显示我的CPU使用率最高可达15%至20%。我尝试收集CPU配置文件,并定期查看尖峰(可能是幻灯片正在更改时)。

为什么CPU使用率如此之高?我该如何做得更好?

1 个答案:

答案 0 :(得分:3)

首先,在你的问题上,我怀疑你会通过优化发布的代码得到任何有意义的改进(20%-25%,你说这是一个非常高的数字!)。但是,让我们看看我们能做些什么。因此,在您的代码中,您在区间函数之外使用$('#student-blocks > div:first'),如:

var el $('#student-blocks > div:first');,并使用el元素变量。 好多了就是使用这个选择器:

var el = $("#student-blocks").find("div:first");

根据此article,**性能选择器**的最佳选择是:

$("#student-blocks div:first-of-type");

总之,我会按如下方式更改代码:(http://jsfiddle.net/csdtesting/104cuxxb/)

&#13;
&#13;
var studentsblocks = $("#student-blocks");
var el = studentsblocks.find("div:first-of-type");
$(studentsblocks).find("div:gt(0)").hide();
setInterval(function ()
{
    el
    .hide()
    .next()
    .fadeIn()
    .end()
    .appendTo(studentsblocks);
}, 4000);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section id="student-blocks">
  <div>
    <h2 class="animated fadeUp">News Item #1</h2>
    <p "animated fadeIn">lorem</p>
  </div>
  <div>
    <h2 class="animated fadeUp">News Item #2</h2>
    <p "animated fadeIn">lorem</p>
  </div>
  <div>
    <h2 class="animated fadeUp">News Item #3</h2>
    <p "animated fadeIn">lorem</p>
  </div>
</section>
&#13;
&#13;
&#13;

另一种方法是降低动画的帧速率,或进行更改以帮助浏览器呈现引擎(这可能是更改样式或dom等内容)。

只使用CSS而没有任何PU问题的替代解决方案

为了更好,我会使用只是一个简单的CSS 。 我为你的例子做了一个淡出效果: http://jsfiddle.net/csdtesting/104cuxxb/

仅CSS实施:

&#13;
&#13;
h1,
h2,
h3 {
  font-family: Tahoma, Arial, sans-serif;
  color: #fff;
  text-shadow: 1px 1px 0px #000000;
  filter: dropshadow(color=#000000, offx=1, offy=1);
}
a:hover {
  color: #0097bc;
}
.wrapper {
  width: 500px;
  margin: 25px auto;
}
.slogan {
  width: 500px;
  height: 90px;
  margin: 25px auto;
  overflow: hidden;
  position: relative;
  border: 1px solid #000;
  background-color: #222;
  -webkit-border-radius: 5px;
  border-radius: 5px;
  -webkit-box-shadow: inset 0px 2px 2px rgba(0, 0, 0, .5), 0px 1px 0px rgba(250, 250, 250, .2);
  box-shadow: inset 0px 2px 2px rgba(0, 0, 0, .5), 0px 1px 0px rgba(250, 250, 250, .2);
  -webkit-transition: background-color 350ms;
  -moz-transition: background-color 350ms;
  transition: background-color 350ms;
}
.slogan span {
  font-family: Tahoma, Arial, sans-serif;
  display: inherit;
  width: 100%;
  height: 100%;
  margin: 0;
  font-size: 75%;
  line-height: 5px;
  text-align: center;
  color: #cccccc;
}
.slogan p {
  position: absolute;
  font-family: Tahoma, Arial, sans-serif;
  width: 100%;
  height: 100%;
  margin: 0;
  line-height: 50px;
  text-align: center;
  color: #fff;
  text-shadow: 1px 1px 0px #000000;
  filter: dropshadow(color=#000000, offx=1, offy=1);
  transform: translateX(100%);
  -moz-transform: translateX(100%);
  -webkit-transform: translateX(100%);
}
.slogan p:nth-child(1) {
  animation: left-one 20s ease infinite;
  -moz-animation: left-one 20s ease infinite;
  -webkit-animation: left-one 20s ease infinite;
}
.slogan p:nth-child(2) {
  animation: left-two 20s ease infinite;
  -moz-animation: left-two 20s ease infinite;
  -webkit-animation: left-two 20s ease infinite;
}
.slogan.down p {
  transform: translateY(-100%);
  -moz-transform: translateY(-100%);
  -webkit-transform: translateY(-100%);
}
.slogan.down p:nth-child(1) {
  animation: down-one 20s ease infinite;
  -moz-animation: down-one 20s ease infinite;
  -webkit-animation: down-one 20s ease infinite;
}
.slogan.down p:nth-child(2) {
  animation: down-two 20s ease infinite;
  -moz-animation: down-two 20s ease infinite;
  -webkit-animation: down-two 20s ease infinite;
}
/*================================
	Move the slogan Downwards
==================================*/

/** Mozilla Firefox Keyframes **/

@-moz-keyframes down-one {
  0% {
    -moz-transform: translateY(-100%);
  }
  10% {
    -moz-transform: translateY(0);
  }
  40% {
    -moz-transform: translateY(0);
  }
  50% {
    -moz-transform: translateY(100%);
  }
  100% {
    -moz-transform: translateY(100%);
  }
}
@-moz-keyframes down-two {
  0% {
    -moz-transform: translateY(-100%);
  }
  50% {
    -moz-transform: translateY(-100%);
  }
  60% {
    -moz-transform: translateY(0);
  }
  90% {
    -moz-transform: translateY(0);
  }
  100% {
    -moz-transform: translateY(100%);
  }
}
/** Webkit Keyframes **/

@-webkit-keyframes down-one {
  0% {
    -webkit-transform: translateY(-100%);
  }
  10% {
    -webkit-transform: translateY(0);
  }
  40% {
    -webkit-transform: translateY(0);
  }
  50% {
    -webkit-transform: translateY(100%);
  }
  100% {
    -webkit-transform: translateY(100%);
  }
}
@-webkit-keyframes down-two {
  0% {
    -webkit-transform: translateY(-100%);
  }
  50% {
    -webkit-transform: translateY(-100%);
  }
  60% {
    -webkit-transform: translateY(0);
  }
  90% {
    -webkit-transform: translateY(0);
  }
  100% {
    -webkit-transform: translateY(100%);
  }
}
&#13;
<div class="wrapper">
  <h3>Cool fading text only with css .slogan down class</h3>
  <div class="slogan down">
    <p>News Item #1<span>lorem</span>
    </p>
    <p>News Item #2<span>lorem</span>
    </p>
    <p>News Item #3<span>lorem</span>
    </p>
    <p>News Item #4<span>lorem</span>
    </p>
  </div>
</div>
&#13;
&#13;
&#13;

希望你喜欢它,真的很有帮助!