웹 프론트엔드 CSS 튜토리얼 페이지 리플로우 및 다시 그리기를 줄이기 위한 CSS 최적화 팁

페이지 리플로우 및 다시 그리기를 줄이기 위한 CSS 최적화 팁

Jan 26, 2024 am 08:59 AM
CSS 리플로우 다시 그리기 최적화 잘못된 스타일 방지 스로틀링 및 흔들림 방지

페이지 리플로우 및 다시 그리기를 줄이기 위한 CSS 최적화 팁

불필요한 CSS 리플로우 및 다시 그리기를 방지하는 방법

프론트엔드 개발에서 CSS는 없어서는 안 될 부분입니다. 그러나 CSS를 부적절하게 사용하면 페이지 성능이 저하될 수 있으며, 가장 일반적인 문제는 불필요한 CSS 리플로우 및 다시 그리기입니다. 이 문서에서는 이러한 문제를 방지하고 페이지 성능을 향상시키는 데 도움이 되는 몇 가지 팁과 구체적인 코드 예제를 소개합니다.

  1. 잦은 스타일 업데이트 방지

리플로우 및 다시 그리기는 DOM 요소의 스타일 속성 변경에 따라 트리거되므로 스타일을 자주 업데이트하면 리플로우 및 다시 그리기 횟수가 늘어납니다. 이 문제를 방지하려면 스타일 업데이트를 단일 작업으로 집중하여 리플로우 및 다시 그리기 횟수를 줄일 수 있습니다. 예를 들어 요소의 여러 스타일 속성을 수정해야 하는 경우 속성을 하나씩 수정하는 대신 클래스를 추가할 수 있습니다. 샘플 코드는 다음과 같습니다.

// 不推荐的写法
element.style.width = '100px';
element.style.height = '200px';
element.style.background = 'red';

// 推荐的写法
element.classList.add('my-class');
로그인 후 복사
  1. 루프에서 스타일 수정을 피하세요

루프에서 스타일 속성을 수정하는 것은 일반적인 문제입니다. 수정할 때마다 리플로우와 다시 그리기가 발생하기 때문입니다. 이 문제를 방지하려면 스타일 속성의 계산 및 수정을 루프 외부로 이동할 수 있습니다. 샘플 코드는 다음과 같습니다.

// 不推荐的写法
for (let i = 0; i < elements.length; i++) {
  elements[i].style.width = i * 10 + 'px';
}

// 推荐的写法
let styles = '';
for (let i = 0; i < elements.length; i++) {
  styles += `#${elements[i].id} { width: ${i * 10}px; }`;
}
element.styleSheet
  ? element.styleSheet.cssText = styles // IE
  : element.innerHTML = styles; // Others
로그인 후 복사
  1. JavaScript 애니메이션 대신 CSS 애니메이션을 사용하세요

JavaScript를 사용하여 애니메이션을 구현하면 리플로우와 다시 그리기가 자주 발생할 수 있습니다. 대조적으로, CSS 애니메이션을 사용하는 것은 하드웨어 가속을 활용하기 때문에 더 효율적입니다. 샘플 코드는 다음과 같습니다.

/* CSS */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* JavaScript */
element.classList.add('spin');
로그인 후 복사
  1. CSS3 속성을 사용하여 성능 최적화

CSS3에는 리플로우 및 다시 그리기 성능을 최적화할 수 있는 몇 가지 속성이 도입되었습니다. 예를 들어 lefttop 대신 transform을 사용하여 요소의 위치를 ​​변경하거나 translate3d를 사용하여 하드웨어 가속을 활성화합니다. 샘플 코드는 다음과 같습니다. transform代替lefttop来改变元素的位置,或者使用translate3d开启硬件加速。示例代码如下:

/* 不推荐的写法 */
element.style.left = '100px';
element.style.top = '200px';

/* 推荐的写法 */
element.style.transform = 'translate(100px, 200px)';
로그인 후 복사
  1. 使用will-change属性

will-change属性可以告诉浏览器元素将要发生的变化,从而提前进行优化。使用will-change属性可以让浏览器知道哪些属性可能会触发回流或重绘,从而提前进行优化。示例代码如下:

.element {
  will-change: transform;
}
로그인 후 복사

总结

通过避免频繁更新样式、在循环中修改样式、使用CSS动画代替JavaScript动画、使用CSS3属性优化性能和使用will-changerrreee

    will-change 속성을 ​​사용하세요. 🎜🎜🎜 will-change 속성은 브라우저에 알릴 수 있습니다. 요소에 발생할 변경 사항을 사전에 최적화합니다. will-change 속성을 ​​사용하면 어떤 속성이 리플로우나 다시 그리기를 트리거할 수 있는지 브라우저에 알릴 수 있으므로 최적화가 미리 수행될 수 있습니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜요약🎜🎜스타일의 빈번한 업데이트 방지, 루프에서 스타일 수정, JavaScript 애니메이션 대신 CSS 애니메이션 사용, CSS3 속성을 사용하여 성능 최적화 및 will-changewill-change 사용 code> 속성을 ​​사용하면 불필요한 CSS 리플로우와 다시 그리기를 효과적으로 방지하고 페이지 성능을 향상시킬 수 있습니다. 물론 구체적인 최적화 방법도 프로젝트의 필요와 구체적인 상황에 따라 조정되고 최적화되어야 합니다. 🎜

위 내용은 페이지 리플로우 및 다시 그리기를 줄이기 위한 CSS 최적화 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

스크린 독자를 탈취시킵니다. 액세스 가능한 양식 및 모범 사례 스크린 독자를 탈취시킵니다. 액세스 가능한 양식 및 모범 사례 Mar 08, 2025 am 09:45 AM

이것은 우리가 양식 접근성에 대해 한 작은 시리즈의 세 번째 게시물입니다. 두 번째 게시물을 놓친 경우 "사용자 초점 관리 : Focus-Visible"을 확인하십시오. ~ 안에

Smart Forms 프레임 워크로 JavaScript 연락처 양식 작성 Smart Forms 프레임 워크로 JavaScript 연락처 양식 작성 Mar 07, 2025 am 11:33 AM

이 튜토리얼은 Smart Forms 프레임 워크를 사용하여 전문적인 JavaScript 양식을 작성하는 것을 보여줍니다 (참고 : 더 이상 사용할 수 없음). 프레임 워크 자체를 사용할 수 없지만 원칙과 기술은 다른 형태의 건축업자와 관련이 있습니다.

WordPress 블록 및 요소에 상자 그림자를 추가합니다 WordPress 블록 및 요소에 상자 그림자를 추가합니다 Mar 09, 2025 pm 12:53 PM

CSS Box-Shadow 및 개요 속성은 주제를 얻었습니다. 실제 테마에서 어떻게 작동하는지에 대한 몇 가지 예와 이러한 스타일을 WordPress 블록 및 요소에 적용 해야하는 옵션을 보자.

GraphQL 캐싱 작업 GraphQL 캐싱 작업 Mar 19, 2025 am 09:36 AM

최근에 GraphQL 작업을 시작했거나 장단점을 검토 한 경우 "GraphQL이 캐싱을 지원하지 않음"또는

첫 번째 맞춤형 전환을 만듭니다 첫 번째 맞춤형 전환을 만듭니다 Mar 15, 2025 am 11:08 AM

Svelte Transition API는 맞춤형 전환을 포함하여 문서를 입력하거나 떠날 때 구성 요소를 애니메이션하는 방법을 제공합니다.

고급스럽고 멋진 커스텀 CSS 스크롤 바 : 쇼케이스 고급스럽고 멋진 커스텀 CSS 스크롤 바 : 쇼케이스 Mar 10, 2025 am 11:37 AM

이 기사에서 우리는 스크롤 바의 세계로 뛰어들 것입니다. 너무 화려하게 들리지는 않지만 잘 설계된 페이지가 손을 잡고 있습니다.

쇼, 말하지 마십시오 쇼, 말하지 마십시오 Mar 16, 2025 am 11:49 AM

웹 사이트의 컨텐츠 프레젠테이션을 설계하는 데 얼마나 많은 시간을 소비합니까? 새 블로그 게시물을 작성하거나 새 페이지를 만들 때

NPM 명령은 무엇입니까? NPM 명령은 무엇입니까? Mar 15, 2025 am 11:36 AM

NPM 명령은 서버 시작 또는 컴파일 코드와 같은 것들에 대한 일회성 또는 지속적으로 실행되는 프로세스로 다양한 작업을 실행합니다.

See all articles