2012-04-07 6 views
0

모든 것이 잘 작동하지만 유일한 문제는 매우 느리게로드된다는 것입니다. 265 개의 이미지가 포함 된 페이지를로드하는 데 7 초가 걸립니다. 이미지는 원격 서버에 있지 않으며 미리보기 이미지입니다. 실제 높이/너비로 표시되기 때문에 서버는 크기를 조정할 필요가 없습니다.PHP 스크립트가 몹시 천천히

이미지의 이전 반복에도 모든 이미지에도 getimagesize() 함수가 있고 문제없이로드 된 getimagesize()가 없어야합니다.

문제가 될 수있는 유일한 점은 데이터베이스입니다. |

:

TABLE 앨범 :이 설정입니다 이드 | naam | urlnaam | 행동 |


TABLE의 사진을 보시려면 :

| 이드 | url | ext | 설명 | 앨범 |

따라서 사진의 앨범 ID는 앨범의 ID와 연결됩니다. 나는 이미지 자체 동적으로도 생성되지 않습니다 받아

$album = mysql_real_escape_string($_GET['fx2']); 
mysql_select_db('user_fotos'); 
$i = 0; 
$sql = mysql_query("SELECT a.naam, b.url, b.ext, b.description, b.id FROM albums AS a LEFT JOIN fotos AS b ON a.id = b.albumid WHERE a.urlnaam = '$album'"); 
while($row = mysql_fetch_assoc($sql)){ 
    if($i == 0){ 
     echo "Album: {$row['naam']}<br />"; 
     echo "<table><tr>"; 
    } 
    if($i % 4 == 0){echo "</tr><tr>";} 
    echo "<td align='center'>"; 
    $photourl = "http://www.mysite.com/fotos/$album/thumbs/" . $row['url'] . $row['ext']; 
    $dimensions = getimagesize($photourl); 
    $breedte = $dimensions[0]; 
    $lengte = $dimensions[1]; 
    if($breedte == '120'){$aspect="width='120px' height='{$lengte}px'";}else{$aspect="height='120px' width='{$breedte}px'";} 
     echo "<div class='imageHolder' style='width:{$breedte}px; height:{$lengte}px;' onClick=\"parent.location='$album/{$row['id']}'\" /><img $aspect src='http://www.mysite.com/fotos/$album/thumbs/" . $row['url'] . $row['ext'] . "' alt='{$row['description']}' /></div>"; 
     echo "</td>"; 
     $i++; 
} 
echo "</tr></table>"; 
+1

"이미지가 원격 서버에 없으며 미리보기 이미지입니다." - getimagesize에 HTTP URI를 전달하기 때문에, HTTP 서버는 그 서버에 연결하여 HTTP를 통해 해당 이미지를 다운로드해야합니다. – DCoder

+1

너무 오래 걸리는 이유는 각 사진을 URL에서 가져 와서 크기를 조정 한 다음 원본 크기를 출력해야하므로 imagesize() 및 style = 'width : {$ breedte} px; 높이 : {$ lengte} px; ''부분 다음 이미지는 크기를 확인하는 시간/리소스/대역폭을 낭비하지 않으면 서 원래 크기가 될 것이므로 결과와 결과도 캐시해야합니다. –

+0

@DCoder - 잘 발견되었습니다. 이미지가 원격이 아닌 경우 로컬 파일 시스템을 통해 액세스해야합니다. – halfer

답변

2

원격 URL에서 imagesize()를 가져 오는 과정에서 스크립트가 느려지는 이미지를 가져 오는 것이 포함됩니다. 실제 크기를 사용하여 실제로 크기를 가져올 필요가 없으므로 앨범 변수에 XSS 문제가있을 수 있습니다. 시도해보십시오. 동일한 결과를 얻지 만 속도는 훨씬 빠릅니다.

<?php 
    $album = mysql_real_escape_string($_GET['fx2']); 
    mysql_select_db('user_fotos'); 

    $sql = mysql_query(" 
    SELECT a.naam, b.url, b.ext, b.description, b.id 
    FROM albums AS a 
    LEFT JOIN fotos AS b ON a.id = b.albumid 
    WHERE a.urlnaam = '$album'"); 

    $i = 0; 
    while($row = mysql_fetch_assoc($sql)){ 
     if($i == 0){ 
      echo "<p>Album: {$row['naam']}</p>"; 
      echo "<table><tr>"; 
     } 
     if($i % 4 == 0){echo "</tr><tr>";} 
     echo "<td align='center'>"; 
     echo "<div class='imageHolder' onClick=\"parent.location='".htmlentities($album)."/{$row['id']}'\" /><img src='./fotos/".htmlentities($album)."/thumbs/" . $row['url'] . $row['ext'] . "' alt='{$row['description']}' /></div>"; 
     echo "</td>"; 
     $i++; 
    } 
    echo "</tr></table>"; 
    ?> 
+0

그 나이가 많이 빨라지지만 'imageHolder 's의 크기가 적절하지 않습니다 ... – jdepypere

+0

또한 ' halfer

+0

imageHolder 클래스의 크기가 적절하지 않은 경우 CSS를 약간 조정해야 할 수 있습니다. – Cheeso

0

: 다음 코드인가? 이미지가 데이터베이스에로드 될 때 getimagesize()을 수행 한 다음 비싼 파일 작업을 저장하기 위해 너비/높이 열을 만드는 것이 좋습니다. 또한 html 캐싱을 수행하십시오.

은 폭과 높이가 PHP 코드와 실행에 const를 꼭 확인

:

+0

이상한 점은 이전 반복에서 getimagesize()를 사용했기 때문에 느린 문제가 없었습니다. 나는 그것을 할 수있을 것 같아요.하지만 여전히 문제가 무엇인지 알기를 원합니다. – jdepypere

0

는 ($의 photourl) 만들기 스크립트

쿼리가

쉽게 스크립트를 확인할 수 있습니다 정상 느리게 getimagesize 할 수있다 스크립트가 다시 실행되면 스크립트가 느리게 실행되는 줄을 알 수 있습니다.

관련 문제