2009-09-17 5 views
1

나는 브라우저에 자바 스크립트 소스 파일을 제공하는 웹 서비스를 가지고있다. javascript 파일은 PHP가 실시간으로 컴파일 한 파일입니다. 결과 파일은 하루에 몇 번만 변경됩니다. 그것은 브라우저에 제공되기 전에 아파치에 의해 gzipped입니다.gzipped 파일을 저장하기 위해 memcached를 사용하여 크기 조정

memcached를 사용하여 디스크 및 CPU 부하 파일을 피하고 gzip을 반복하지 않도록 메모리에서 제공하고 싶습니다.

내 질문에 내가 어떻게 gzip 및 memcached 자바 스크립트 파일을 저장할 수 있으며 (PHP)에서 제공합니까?

파일이 저장소에 없다면 include로 파일을 가져와 출력 버퍼를 가져 와서 gzip으로 memcached에 저장해야합니다. 나 맞아? 출력 결과에 추가해야하는 헤더가 있습니까? 아니면 현재 아파치가 제공하는 gzipped 파일과 호환되도록 결과를 내야합니까?

업데이트 : 파일에 다양한 def 파일이 포함되도록하는 url 매개 변수로 제어되는 여러 변형이 있다고 언급하지 않았습니다. 각 변형은 위에 설명 된 것처럼 다소 정적입니다.

답변

3

이 아마도 적합한 솔루션가 어떤 가상의 읽기 성능 이점을 부정 웹 서버 자체에 Apache 자체의 캐싱 기능을 사용하십시오.

어쨌든 다양한 변형이 있거나 자주 바뀌지 않는 것 같습니다. 농장의 각 서버가 수시로 자체 복사본을 생성하면 큰 영향을받지 않을 것입니다.

Apache의 캐싱은 출력에 "Expires"헤더 등을 사용하므로 해당 URI에 대해 간단하게 설정하고 적절한 헤더를 출력하기에 충분합니다.

memcached의 "장점"은 memcached 서버가 단일 캐시처럼 보이고 모든 웹 노드에서 공유 할 수있는 풀을 형성한다는 것입니다. 매우 적은 수의 항목 만있는 경우에는 관련이 없습니다 (이 경우에는 하나 또는 몇 개가있는 것처럼 들립니다).

+0

만료 된 헤더가 Apache에 의해 존중된다는 것을 알지 못했습니다. 나는 그들이 브라우저 캐시를위한 것이라고 생각했다. 나는 이것이 내가 필요로하는 해결책이라고 생각한다. 감사! – Nir

5

설계된 작업에 적절한 도구를 사용하는 것이 가장 좋습니다.

경우에 따라 천천히 변하는 파일이 정적으로 제공됩니다. 그것이 쿼리에 의존하지 않는다는 것을 의미하지만 유효 시간 동안 모든 쿼리에 대해 동일합니다.

이렇게하려면 캐싱 웹 서버를 사용하거나 캐시 /로드 밸런서를 서버 앞에 놓습니다. 오징어, 바니시 또는 NginX 중 하나를 사용하십시오. 사실, 이들 중 하나는 memcached와 똑같은 속도로 정적 파일을 제공 할 수 있습니다. 그냥 파일을 직접 gzipping하고 그것을 제공해야합니다.

memcached는 서면 속도가 아닌 서면 속도로 처리합니다. 쿼리 매개 변수로 변경되는 내용에 대한 최상의 대답이므로 끊임없이 생성되고 만료되어야합니다.

zip/write time은 파일을 몇 번 밖에 압축하지 않고 쓸 수 있기 때문에 zip/write time은 무의미합니다. 그 후에 많은 수준의 캐시가 최상의 성능을 제공합니다.

또한 mencached은 웹 서버가 아니므로,이 캐시는 적절한 웹 캐시로 클라이언트에 '가까운'로, 안 그래주의 것,

+0

고마워요! 파일에 여러 def 파일이 포함되도록하는 url 매개 변수로 제어되는 여러 변형이 있다고 언급하지 않았습니다. 각 변형은 위에 설명 된 것처럼 다소 정적입니다. 부하 분산 장치를 사용할 여유가 없다고 가정 할 때 LAMP를 사용하여이 작업을 자동으로 수행 할 수 있습니까? 필자는 파일의 각 변형을 수동으로 압축하지 않으려합니다. – Nir

관련 문제