2012-06-06 3 views
1

PHP의 WideImage 라이브러리를 사용하여 심각한 성능 문제가 있습니다 - http://wideimage.sourceforge.net/. WideImage :: load()를 사용하여 2.2 MB의 .png 파일로드시 최대 메모리 사용량은 93 MB입니다! 또한 750KB .jpg의 파일 시스템으로 로딩, 크기 변경 및 쓰기 작업을 수행하는 데는 거의 30 초가 걸립니다. 유사한 벤치 마크를 두 개의 다른 서버에서 실행했습니다.PHP WideImage - 성능 문제

다른 누구도 이러한 문제에 부딪 혔습니까? WideImage가 리소스 호그가 되었습니까? WideImage 대신 직선 GD로 이미지 처리를 다시 작성하면 더 나은 성능을 기대할 수 있습니까? 몇 가지 간단한 벤치 마크 앤디

+0

무엇이 문제입니까? 작동하는 것 같습니다. 약 93MB 메모리로 얼마나 자주이 크기를 조정합니까? 이미지 당 한 번만? 나는 또한 어떤 라이브러리 또는 언어에 상관없이 큰 이미지를 조작하기 위해 93 MB가 괜찮다고 생각합니다. – powtac

+0

정말요? 2.2MB 이미지를 조작하기 위해 93MB의 메모리가 필요합니까? 1MB 미만의 jpg 크기를 조정하고 파일 시스템에 기록하려면 30 초가 필요합니까? 프로덕션 환경에서, 특히 PHP에 제한된 메모리가 할당 된 호스팅 환경에서 이러한 종류의 성능을 구현할 방법은 없습니다. 사용자가 jpg의 크기를 조정할 때까지 기다리는 동안 사용자가 일어나서 차를 만들 것을 기대할 수 없습니다. 저는 이런 종류의 일을 더 빠르고 가볍게 처리하는 많은 PHP 코드를 보았습니다. 가장 최근에는 내가 함께 작업하고 있던 WordPress 플러그인에서 사용했습니다. GD로 루틴을 다시 작성하고 성능을 비교해 보겠습니다. – siliconrockstar

+0

우리는 시스템/CPU에 관해서 아무 것도 모르기 때문에 ... – powtac

답변

2

를 실행 - 나는 PHP는 이미지 조작에 가장 적합한 언어가 아닙니다 알고 있지만, 차라리 C에서 뭔가를 컴파일 한 후 PHP :(시간에 대한

감사에서 호출 할 필요가 없습니다 것 나는 내가 그것을 알아 냈다고 생각 WideImage의 크기 조정 방법은 지속되지 않습니다 예 :..

$image = WideImage::load('path/to/file.png'); 
$image->getWidth(); <-- lets say that returns a width of 2000 pixels 
$image->resize(100, 100); 
$image->getWidth(); <-- that will still return a width of 2000 pixels, the original $image has not been altered 

WideImage 작업이 이미지의 새 인스턴스를 반환 그대로 이전 이미지 나뭇잎, 그래서 당신이 필요로하는 작업의 결과를 얻을 수 변수에 할당하려면

$image = WideImage::load('path/to/file.png'); 
$image->getWidth();  // 2000 px 
$resizedImage = $image->resize(100, 100); 
$image->getWidth();  // still 2000 px 
$resizedImage->getWidth(); // 100 px 

크기 조정 방법이 원본 이미지를 실제로 변경하지 않았으므로 생각보다 훨씬 큰 이미지로 이동했습니다.

+0

제쳐두고, PHP의 메모리 사용법이 동일한 크기와 파일 형식을 가지고있을지라도, 이미지간에 아주 다를 수 있다는 것을 배웠습니다. 나는 크기를 재조정 할 때 71MB의 메모리 사용량에서 최고 2.2MB의 .jpg를 가지지 만 단지 32MB로 최고 4MB의 .jpg를 자랑합니다. 이유는 모르겠다. – siliconrockstar

+0

또 다른 측면으로, WideImage가 이미지 처리에 최소한의 오버 헤드를 추가한다고 판단했습니다. 내가 시도한 가장 큰 이미지는 순수한 GD 기능을 사용할 때는 90.4MB의 메모리를 사용하고 WideImage를 사용할 때는 92.7MB를 사용했습니다. 바라기를이 모든 것은이 스레드를 우연히 발견하는 사람을 돕습니다. – siliconrockstar