PHP 루프, 이렇게만 바꿔도 2배 빨라집니다!
반응형
PHP 루프 성능 최적화 팁
불필요한 반복을 줄여 속도 높이기
루프는 PHP에서 정말 자주 사용하는 구조입니다. 그런데 잘못 사용하면,
성능 저하의 주범이 되기도 하죠.
이번 글에서는 실무에서 자주 발생하는 비효율적인 루프 코드를
더 빠르고 효율적으로 바꾸는 팁을 알려드릴게요.
1. count()는 루프 밖에서 한 번만 계산하세요
// 비효율적인 코드
for ($i = 0; $i < count($items); $i++) {
// 처리
}
위 코드는 count($items)를 루프 돌 때마다 계속 호출하게 됩니다.
// 최적화된 코드
$length = count($items);
for ($i = 0; $i < $length; $i++) {
// 처리
}
또는 가능하다면 foreach를 사용하세요. 더 빠르고 깔끔합니다.
2. 루프 안에서 함수 호출은 최소화하세요
// 비효율적인 코드
foreach ($users as $user) {
$profile = getUserProfile($user['id']); // 매번 호출
}
이렇게 되면 루프를 도는 동안 계속 함수 호출이 발생해 성능이 떨어질 수 있습니다.
// 최적화된 코드
$profiles = getAllUserProfiles(); // user_id => profile 형태
foreach ($users as $user) {
$profile = $profiles[$user['id']] ?? null;
}
데이터는 미리 가져와서 메모리에 캐싱하는 습관을 들이세요.
3. 조건문을 루프 밖으로 빼는 것도 중요해요
// 비효율적인 코드
foreach ($items as $item) {
if ($mode === 'admin') {
// 처리
}
}
이렇게 매번 같은 조건을 검사하는 건 낭비입니다.
// 최적화된 코드
if ($mode === 'admin') {
foreach ($items as $item) {
// 처리
}
}
4. 중첩 루프는 정말 주의해야 합니다
// 비효율적인 코드
foreach ($orders as $order) {
foreach ($products as $product) {
if ($order['product_id'] === $product['id']) {
// 처리
}
}
}
이 코드는 데이터 수가 많아질수록 성능이 급격히 나빠집니다.
// 최적화된 코드
$productMap = [];
foreach ($products as $product) {
$productMap[$product['id']] = $product;
}
foreach ($orders as $order) {
$product = $productMap[$order['product_id']] ?? null;
// 처리
}
연관 배열로 바꾸면 중첩 없이도 빠르게 조회할 수 있습니다.
마무리 정리
불필요한 반복은 코드의 성능을 갉아먹습니다.
하지만 조금만 구조를 바꾸면, 큰 차이를 만들어낼 수 있습니다.
핵심 요약
- count()는 루프 밖에서 한 번만
- 함수 호출은 캐싱하듯 사용
- 조건문은 루프 밖으로
- 중첩 루프는 배열 맵핑으로 대체
반응형
'Programming > PHP' 카테고리의 다른 글
PHP 8의 새로운 기능 – 개발자라면 꼭 알아야 할 변화들 (1) | 2025.04.08 |
---|---|
함수 대신 연산자 사용으로 성능을 높이는 간단한 방법 (0) | 2025.04.08 |
[PHP] 현재 실행 경로 역추적 방법 (디버깅) (0) | 2025.03.06 |
[PHP] CURL 결과에서 HTTP 프로토콜 헤더 바디 분리 (0) | 2025.03.06 |
[PHP] 폴더 내 파일 목록 불러오는 한 줄 소스 (0) | 2025.03.06 |