변환 된 버전의 사용자 업로드 이미지 (회전, 잘라 내기 및 워터 마크)를 제공하는 MVC 애플리케이션을 작성 중입니다. 변환이 지정되면 변경, 그래서 생성 된 출력을 적극적으로 캐시하고 가능한 효율적으로 제공하고 싶습니다.ASP.NET MVC에서 생성 된 이미지를 효율적으로 캐싱
변환 옵션은 데이터베이스에 저장되며 필요에 따라 이미지를 만들기 위해 이미지 서버에서 사용됩니다. 원래 업로드 만 영구적으로 저장됩니다. 생성 된 이미지를 로컬 디렉터리에 캐시하면 IIS 7이 ASP.NET 프로세스를 건드리지 않고 즉 경로를 일치시킴으로써 IIS 7을 픽업 할 수 있습니다. images/
의 정적 이미지가 동적 MVC 경로 /images/{id}.jpg
보다 우선합니다.
이 시점에서 사용자가 실제로 변형 옵션을 변경하면 이미지가 다시 생성되어야하지만 이미지를 수동으로 삭제하지 않아도됩니다. 마지막으로 수정 한 필드를 데이터베이스에 저장하므로 해당 타임 스탬프를 URL에 추가 할 수 있습니다 (예 : http://images.example.com/images/153453543.jpg?m=123542345453
. 캐시 캐싱이 매개 변수 m
에 의해 출력 캐시를 변경할 수 있지만, 대량의 이미지를 처리해야하므로 오히려이를 피하는 것이 좋습니다.
일부 조건이 충족되는 경우 정적 파일을 지우는 지능적인 방법이 있습니까?
데이터베이스 행을 업데이트 할 때 캐싱 된 파일을 삭제해야 할 수도 있지만 결국 두 가지 문제를 분리하여 보관하는 것이 좋습니다. 내 "멍청한"이미지 옵션 모델은 내 캐싱 메커니즘에 대해 알 필요가 없어야합니다. 오래된 이미지의 흔적을 남기려면 큰 문제가됩니다. 또한 이미지 옵션은 이미지가 업로드 된 직후 실제로 변경됩니다. 변경 사항은 점진적으로 커밋되기 때문에 (ajax 이상). –
이미지 옵션 모델에 OnTransformationUpdate 이벤트를 추가하지 않는 이유는 무엇입니까? 그런 다음 캐시 솔루션이 이벤트에 연결하여 적절한 캐시 이미지를 삭제할 수 있습니다. – ebrown
ebrown : 캐시 솔루션이 다른 서버에서 실행되고 이미지 업로드 및 데이터베이스 옵션 업데이트를 처리하는 웹 서버가 ASP 클래식과 ASP.NET을 혼합하여 실행하며 구조적으로 불건전합니다. 이 부분들을 분리하여 보관하고 싶습니다. –