애플리케이션 캐시

네트워크를 효율적으로 사용하기 위해 개발된 애플리케이션을 배포서버에서 매번 내려받지 않고 캐시 기술을 사용합니다.

캐시의 종류

지원하는 캐시의 종류는 아래와 같습니다.

캐시 상태

설명

none

캐시 기능을 사용하지 않습니다.

dynamic

서버로부터 내려받은 파일이 갱신되었을 때만 수신합니다.

서버 상의 파일이 갱신되지 않은 경우는 로컬 캐시(Local Cache) 파일을 재사용합니다.

session

엔진을 기동할 때, 단 한번만 수신하고 해당 엔진이 종료될 때까지 로컬 캐시 파일만을 사용합니다. (엔진 기동 시 로컬 캐시 파일과 일치하면 재사용합니다.)

static

서버로부터 한번이라도 내려받은 파일은 엔진 재실행과 상관없이 로컬 캐시 파일만 사용합니다. (단, Type Definition에 지정된 서비스 그룹의 버전이 변경된 경우에는 다시 내려받습니다.)

cachelevel 속성값을 지정하지 않았을 경우 기본 캐시 속성은 Dynamic으로 적용됩니다.

속성값이 static이면 캐시 파일을 로컬저장소에 저장하게 되는데 웹브라우져의 기능 제약으로 로컬저장소를 사용하지 못합니다. 그래서 HTML5 버전을 사용하는 경우에는 속성값이 static인 경우에도 session으로 동작합니다.

HTML5 버전을 사용하는 경우에는 속성값이 none이면 브라우저에서 캐시를 사용하지 않는 것이 정상입니다. Firefox를 사용하는 경우에는 브라우져 캐시를 사용하는 증상이 있는데 이 증상은 Firefox 버그입니다.

https://bugzilla.mozilla.org/show_bug.cgi?id=1129500

HTML5 버전 애플리케이션이 MS 인터넷 익스플로러에서 실행되는 경우 넥사크로플랫폼 내부에서 이용하는 캐시메모리보다 인터넷 익스플로러의 캐시가 우선 동작하는 경우가 있습니다. 웹브라우저 캐시옵션이 "자동으로 확인(default)"일 때 서버에서 변경된 자바스크립트 파일(*.js)이 갱신되지 않는 현상은 제약사항입니다.


웹브라우저를 새로 실행하거나 새로고침하는 경우에는 제품에서 관리하는 메모리상의 캐시가 모두 제거되기 때문에 속성값을 session, dynamic, static으로 설정한 경우 설정한 값과 무관하게 브라우저 동작에 의존하게 됩니다.

넥사크로 스튜디오에서 [Launch Project] 또는 [Quick View] 메뉴를 사용해 Runtime을 실행하는 경우에는 typedefinition에 설정된 Service-cachelevel 값을 무시하고 none으로 동작합니다.

(cachelevel 속성의 설정값이 변경되는 것은 아닙니다)

넥사크로플랫폼에서 이미지를 처리할 때는 이미지 표현 관련 기능(size, stretch 등)과 성능상의 이유로 사용 브라우저의 캐시 설정에 따른 동작을 하도록 설계됐습니다.

(프로젝트 service 그룹에 설정된 cachelevel과는 별개의 동작입니다)

ExcelImportObject 또는 ExcelExportObject를 사용해 엑셀 파일을 가져오거나 내보내는 경우에는 지정한 cachelevel 속성값과 관계없이 무조건 none으로 동작합니다.

캐시 적용 방법

cachelevel

다음은 Type Definition 편집기에 대한 설명입니다.

  1. 캐시는 등록된 서비스 그룹에만 적용됩니다.

  2. "./Base/' 폴더 아래 등록된 모든 파일에 대해 캐시가 적용됩니다.

  3. 캐시의 종류를 선택합니다.

  4. 서비스 버전을 설정하면 Static 상태에서 파일을 다시 내려받을 수 있습니다.

Script

application.services["Base"].set_cachelevel("none" )

checkversion

ADL의 checkversion 속성값을 true로 설정하면 제품버전이나 지정된 version 값을 변경하는 시점에 강제적으로 캐시를 적용하지 않도록 할 수 있습니다.

checkversion 속성값을 true로 설정한 경우에는 generate 시 생성되는 코드가 일부 변경됩니다.

제품 버전값은 별도로 입력하지 않습니다.

설치된 넥사크로 스튜디오 버전을 기준으로 설정됩니다.

<meta http-equiv="pragma" content="no-cache">  
  	<script type="text/javascript" 
		src="./nexacro14lib/framework/SystemBase.js?version=14.0.1.1210"></script>
...
  <script type="text/javascript">
    function oninitframework()
    {
		application.load("Hello_nexacro", 
			"Hello_nexacro.xadl.quickview.js?version=1.0.1");