2012-08-24 1 views
0

Jquery Mobile에서 프런트 엔드가 coldfusion8/mysql 5.0.88 인 사이트를 만들고 있습니다. 또한 photoswipe.js 플러그인을 사용하고 있습니다.이 플러그인을 사용하면 이미지를 확대하고 별도의보기 레이어에서 탐색 할 수 있습니다. 설치 photoswipeable 이미지에cfimage 및 cfxml을 사용할 때 메모리 누출을 방지 하시겠습니까?

, I 출력 할 필요가

<cfoutput> 
<a class="swipeMe" rel="external" href="#variables.imageSrc#"> 
    <img src="#variables.imageSrc#" class="adaptImg ui-li-thumb" /> 
</a> 
</cfoutput> 
문제는 imageSrc는 사용자가 제공하는, 그래서 나는/검증/잡아 표시하기 전에 이미지 크기를 조정해야하고 나는의 경로가 필요하다

photoswipe-link의 이미지.

나는 잠시 동안이 손보는 다음과 같은 솔루션을 함께했다되었습니다 내가 잃어버린거야 때문에,

// read img from user specs 
<cfimage name="myImage" source="#bildpfad##bilddateiname#" action="read" /> 
<cfif IsImage(myImage) is true> 
     // resize 
     <cfscript> 
      ImageSetAntialiasing(myImage,"on"); 
      variables.breite = 400; 
      ImageScaleToFit(myImage, variables.breite,"", "highestPerformance"); 
     </cfscript> 
     // write to xml, so I can get the path 
     <cfxml variable="imageXml"> 
      <cfimage quality=".5" action="writetobrowser" source="#myImage#" class="adaptImg ui-li-thumb"/ 
     </cfxml> 
     <cfset variables.imageSrc = imageXml.xmlRoot.xmlAttributes.src> 
     // output 
     <cfoutput> 
     <a class="swipeMe" rel="external" href="#variables.imageSrc#">#imageXml#</a> 
     </cfoutput> 
</cfif> 

이 꽤 많은 응용 프로그램을 포장 마차와 메모리뿐만 아니라 누출 보인다 작동하지만 점점 더 많은 메모리를 사용하고 있습니다.

질문 :
메모리 누수의 원인이되는 위의 코드에 명백한 문제가 있습니까? 이미지가 일종의 임시 디렉토리 (CFFileservelet?)에 쓰여지고 잠시 동안 내 기억을 차단하고 있다고 상상해보십시오. 그렇다면 이미지 검색에서이를 처리하기위한 대안적인 접근 방법은 무엇입니까?

감사합니다.

+0

관련이 있지만 해당 클래스 속성이 CFML에서 유효한 속성으로 나열되지 않습니다. do cs는 CFIMAGE 태그입니다. 이 코드는 작동합니까? 아니면 그냥 걸어? – Dpolehonski

+0

작동합니다. 클래스 외에도'id'와'title'과 커스텀'data-xyz' 속성을 설정하고 있습니다. 나는 어딘가에 cfimage에 속성을 추가 할 수 있다고 읽었습니다. 링크를 찾으면 알려주지. GOt it [here] (http://www.bennadel.com/blog/846-Styling-The-ColdFusion-8-WriteToBrowser-CFImage-Output.htm) – frequent

답변

2

왜 당신의 서버에/tmp에 폴더를 만들 수 없습니다, 그리고 같은이 조작 된 이미지를 쓰기 : 삭제

<cfoutput> 
    <a class="swipeMe" rel="external" href="/tmp/#newImageName#"><img src="/tmp/#newImageName#" class="..."></a> 
    </cfoutput> 

샘플 예약 된 작업 :

<cfset newImageName=CreateUUID()&".jpg"> 
<cfimage action="write" destination="/tmp/#newImageName#" source="#myImage#"> 

그런 다음 당신이 그것을 사용할 수 있습니다 임시 파일 :

<cfdirectory action="LIST" directory="#expandpath('tmp/')#" name="tempfiles" filter="*.jpg"> 
<cfloop query="tempfiles"> 
    <cfif dateadd('h',24,dateLastModified) lt now()> 
     <cffile action="DELETE" file="#expandpath('tmp/')##name#"> 
    </cfif> 
</cfloop> 
+0

또한 옵션이 될 수 있습니다. 나는 그 자체로 잠시 후에 이미지를 삭제했기 때문에 나의 해결책을 좋아했다. 이 작업을 수행 할 수있는 방법이 있습니까? 저장 한 이미지를 정리하거나 저장할 때 유효성을 설정하거나 수동으로 정리해야합니까? – frequent

+0

이미지의 이름이나 메타 데이터를 타임 스탬프 할 수 있습니다. 그리고 페이지의 머리 부분에서 특정 시간보다 오래된 이미지를 정리하는 CFTHREAD를 실행하십시오. CFthread를 사용하면 작업이 완료 될 때까지 기다리지 않아도됩니다. 화재와 잊기. – Dpolehonski

+0

Dpole은 파일의 생성 된 날짜/시간을 사용하여 X 시간보다 오래된 이미지를 정리할 것을 권장합니다. 그렇게하면 파일 논리를 만들 수 있습니다. 즉, (image_resized가 존재하지 않는 경우) rezie가 이미지를 사용하므로 정리주기마다 한 번만 크기를 조정하면됩니다. – Paul

관련 문제