는 DB

2012-06-04 2 views
2
나는 데이터베이스에서 9 이미지의로드를하고있어

을에서 이미지로드를 가속화 내 구문은 다음과 거의 같습니다는 DB

<img src="image_loader.php?id=4"></img> 

image_loader.php에 대한 나의 PHP가 보이는 같은 :

<?php 
    /* I set up my connection using mysql_connect and mysql_select_db */ 

    $query = sprintf("SELECT ... FROM ... WHERE id='".$_GET["id"]."'"); 
    $result = mysql_query($query, $con); 
    mysql_close($con); 

    if (!$result) { 
     // no result 
    } 
    else { 
     $row = mysql_fetch_row($result); 
     header('Content-type: image/png'); 
     echo $row[0]; 
     mysql_free_result($result); 
     } 
?> 

각 이미지는 약 10-13k이지만 묶음이 매우 느리게로드되는 것 같습니다. 브라우저가 한 번에 실행할 수있는 요청 수가 많지만 기다리는 시간은 아무런 문제가없는 것처럼 보입니다.

데이터베이스에서 이미지를 빠르게로드하는 방법에 대한 제안 사항이 있으십니까?

또한이 질문은 거의 별개의 질문이지만 브라우저 (또는 서버)에 현재 .gif/.png/.jpg srcs로 이미지를 캐시하도록 지시 할 수 있습니까? Firefox는 그렇지만 Chrome은 그렇지 않은 것으로 보이지만 확실하지 않습니다.

enter image description here

+0

캐시 헤더가 올바르게 설정되어 있고 URL이 변경되지 않으면 이미지를 캐싱해야합니다. 대역폭에 문제가 있고 동일한 이미지를 자주 보내는 경우 서버에 대한 쿼리가 하나만 있도록 이미지를 결합해야합니다 (실제로는 이미지에 따라 달라 지지만 예를 들어 12 개의 작은 이미지를 지불하는 경우). –

+0

브라우저가 질의 문자열을 가지고 있기 때문에 이미지를 캐싱하지 않았을 가능성이 있으며'image_loader \ 4.jpg '와 URL 재 작성을 연결하는 것을 고려할 수 있습니다. dystroy가 하나의 윤곽선 [여기] (http://www.guistuff.com/css/css_imagetech1.html)과 유사한 기술을 사용하여 제안 할 때 이미지를 "타일링"할 수도 있습니다. – jedwards

+1

나는 또한 데이터베이스에 이미지를 저장하는 것이 가장 합리적인지 고려할 것입니다. 그러나 각 이미지에 파일 시스템의 고유 한 파일 이름을 부여하고 ***을 데이터베이스에 저장하는 것이 더 빠를 수도 있으므로 심각하게 고려해야 할 수도 있습니다.'fopen()'을 수행하는 일반 PHP 스크립트를 요청하는 것과는 반대로 클라이언트로부터 파일 ***을 직접 요청할 수 있다면 추가 속도를 얻을 것입니다. – jedwards

답변

1

내가 먼저 데이터베이스에 이미지를 저장하는 것이 가장 의미가 있는지 생각 하는데요. 각 이미지에 파일 시스템에 고유 한 파일 이름을 부여하고 데이터베이스에 을 저장하면 데이터베이스에있는이 자주 빠를 수 있으므로 심각하게 고려해야 할 수도 있습니다. fopen() 스타일 추상화의 일종을 수행하는 PHP 스크립트를 요청 반대로 클라이언트에서 해당 파일 직접을 요청할 수 있다면

당신은 추가로 속도를 얻을 것입니다.

지연 원인을 좁히려면 데이터베이스가 웹 서버와 동일한 서버에서 호스팅되는지 확인하는 것이 좋습니다. 로컬로 호스팅되지 않지만 원격 데이터베이스 서버에서 호스팅한다는 표시는 mysql_connect() 호출에서 제공하는 호스트 문자열을 확인하는 것입니다. localhost은 지역 정보를 제안 할 것이고, 다른 정보는 그렇지 않다고 제안 할 것입니다. 참고로 많은 공유 호스팅 서비스 (예 : GoDaddy)는 데이터베이스 서버를 웹 서버에서 분리합니다.

지연 원인을 더 잘 이해하려면 image_loader.php 코드에 지연을 찾기 위해 타임 스탬프를 사용하는 것이 좋습니다. 내 추측에 의하면 쿼리에 포함될 것입니다.

쿼리에 인 경우 쿼리 수를 제한해야합니다. 9 대신 하나의 쿼리를 만들 수있는 전략을 사용하면 웹 서버 간 데이터베이스 지연에 미치는 영향을 제한 할 수 있습니다.