返回

跑马灯的优化之旅:巧妙调整,险些升职加薪

前端

回想上周,我灵机一动地优化了一段跑马灯代码,险些让我升职加薪。

最初的跑马灯代码有一个明显的痛点:长度太长,导致每个节点过长,即使限制为最多 50 个项目,整体长度依然令人望而生畏。

为了解决这个问题,我开始审视原有的代码:

<div id="marquee">
  <ul>
    <li>项目 1</li>
    <li>项目 2</li>
    <!-- ......省略 48 个项目 -->
  </ul>
</div>
#marquee {
  width: 100%;
  height: 50px;
  overflow: hidden;
  white-space: nowrap;
}

#marquee ul {
  display: inline-flex;
  animation: marquee 15s linear infinite;
}

@keyframes marquee {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-100%);
  }
}

问题一目了然:由于 ul 元素采用 inline-flex 布局,每个项目节点都会被渲染为独立的一行,导致整体长度过长。

于是,我决定将 ul 元素的布局改为 flex,并将 li 元素的宽度设置为固定值:

#marquee ul {
  display: flex;
  flex-direction: row;
  width: calc(50px * 50);
}

#marquee li {
  width: 50px;
}

通过这些调整,跑马灯的长度被成功缩短,每个项目节点也整齐排列在一行中。

接下来,我继续优化代码的性能。注意到动画效果是通过 CSS transform 属性实现的,我意识到可以使用 GPU 加速来提升性能。

#marquee ul {
  transform: translateX(-100%);
  animation: marquee 15s linear infinite;
}

@keyframes marquee {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-200%);
  }
}

通过将动画位移量增加一倍,我迫使浏览器使用 GPU 来渲染动画,从而显著提升了性能。

经过一系列巧妙的优化,跑马灯的长度和性能都得到了显著提升。不仅如此,代码也变得更加简洁高效。

领导对我的优化结果赞赏有加,并在之后的绩效评估中特别提到了这项改进。虽然最终没有直接升职,但这次优化经历让我收获了宝贵的经验,也为我的职业发展奠定了坚实的基础。