Nuxt 페이지 급 캐 시 구현
vue SSR 가이드 에서 캐 시 는 두 가지 가 있 는데 페이지 급 캐 시 와 구성 요소 급 캐 시 로 나 뉜 다.이번 에는 페이지 캐 시 를 말 합 니 다.내용 이 사용자 가 지정 하지 않 고 상대 적 으로 짧 은 시간 안에 페이지 내용 을 업데이트 할 필요 가 없습니다.우 리 는 페이지 캐 시 를 사용 할 수 있다.페이지 급 캐 시 에 대해 서 는 이 koa 서버 의 코드 를 통 해 캐 시 방향 을 대충 알 수 있 습 니 다.
const microCache = LRU({
max: 100,
maxAge: 1000 // : 1 。
})
const isCacheable = req => {
// , (user-specific)。
// (non-user-specific)
}
server.get('*', (req, res) => {
const cacheable = isCacheable(req)
if (cacheable) {
const hit = microCache.get(req.url)
if (hit) {
return res.end(hit)
}
}
renderer.renderToString((err, html) => {
res.end(html)
if (cacheable) {
microCache.set(req.url, html)
}
})
})
흐름 도 는 다음 과 같다.위의 코드 는 vue 의 ssr 렌 더 링 에 방안 을 제공 합 니 다.그러나 nuxt 프레임 워 크 를 사용 하 는 학생 들 에 게 비계 로 초기 화 되 었 습 니 다.프레임 워 크 는 vue 서버 에 렌 더 링 된 res.end()함수 에 대해 고도 로 패 키 징 되 었 습 니 다.다음 그림 nuxt 에서 요청 을 받 은 후에 렌 더 링 하 는 절 차 를 통 해 알 수 있 듯 이 nuxt 는 주로 nuxtMiddleware 를 통 해 renderRoute()를 호출 하여 렌 더 링 합 니 다.
그러면 우 리 는 renderRoute()라 는 api 를 다시 써 서 내부 렌 더 링 논 리 를 차단 하고 렌 더 링 하기 전에 캐 시 를 추가 할 수 있 습 니까?nuxt-ssr-cache 플러그 인 은 이미 이렇게 했다.이 nuxt 모듈 의 핵심 부분의 소스 코드 를 살 펴 보 겠 습 니 다.
const renderer = nuxt.renderer;
const renderRoute = renderer.renderRoute.bind(renderer);
renderer.renderRoute = function(route, context) {
// hopefully cache reset is finished up to this point.
tryStoreVersion(cache, currentVersion);
const cacheKey = (config.cache.key || defaultCacheKeyBuilder)(route, context);
if (!cacheKey) return renderRoute(route, context);
function renderSetCache(){
return renderRoute(route, context)
.then(function(result) {
if (!result.error) {
cache.setAsync(cacheKey, serialize(result));
}
return result;
});
}
return cache.getAsync(cacheKey)
.then(function (cachedResult) {
if (cachedResult) {
return deserialize(cachedResult);
}
return renderSetCache();
})
.catch(renderSetCache);
};
이 코드 에 서 는 renderer 의 원래 renderRoute 코드 를 저장 한 다음 renderRoute 코드 를 다시 써 서 cache 캐 시 를 통 해 캐 시 내용 을 가 져 오 는 논 리 를 되 돌려 줍 니 다.cache 는 promise 를 되 돌려 주 었 습 니 다.resolve 이 고 캐 시 내용 이 있 으 면 캐 시 내용 을 되 돌려 줍 니 다.캐 시 내용 이나 reject 가 없 으 면 renderSetCache()를 실행 합 니 다.그리고 renderSetCache()에 서 는 원래 의 renderRoute()처리 논 리 를 되 돌려 주 었 습 니 다.마찬가지 로 renderRoute()가 되 돌아 온 promise 가 resolve 되면 cache 의 setAsync 방법 으로 캐 시 를 한 다음 렌 더 링 결 과 를 되 돌려 줍 니 다.사용 방법 은 git 의 readme 문 서 를 참고 하 십시오.여 기 는 말 하지 않 겠 습 니 다.
다음은 이 모듈 의 효능 이 도대체 어떤 지 본 떠 보 자.우 리 는 ab 명령 을 통 해
ab -n 4000 -c 50 -s 120 -r http://localhost:3000/
압력 측정 을 진행 합 니 다:첫 번 째 상황 은 페이지 캐 시 를 추가 하지 않 고 약 10 초 동안 요청 을 했 습 니 다.3600 개의 요청 을 실 행 했 을 때 오류 가 발생 하여 더 이상 요청 하지 않 습 니 다.
로 그 를 통 해 어떤 오류 가 있 는 지 알 아 보 겠 습 니 다.
FATAL ERROR 라 는 말 을 볼 수 있 습 니 다.JavaScript heap out of memory.메모리 더 이상 할당 할 방법 이 없어 서 프로 세 스 가 종료 되 었 습 니 다.
종료 하기 전에 프로 세 스 모니터 를 통 해 node 프로 세 스 가 1.7GB 메모리 에 표 시 된 것 을 볼 수 있 습 니 다.
두 번 째 상황 은 페이지 캐 시 를 추 가 했 습 니 다.server 엔 드 로 그 를 통 해 백 엔 드 api 데이터 인터페이스 만 요청 한 것 을 알 수 있 습 니 다.캐 시가 페이지 요청 을 성공 적 으로 차단 했다 는 것 을 설명 합 니 다.요청 데 이 터 는 다음 과 같 습 니 다.
2 초 만 에 4000 개의 요청 이 순조롭게 끝 났 고 메모리 에 뚜렷 한 파동 이 없 으 며 최적화 효과 가 뚜렷 하 다.
여기 서 Nuxt 페이지 급 캐 시 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Nuxt 페이지 급 캐 시 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Nuxt 구성 Element-UI 필요에 따라 도입Nuxt가create-nuxt-app을 사용하여 프로젝트를 만들 때 Element-UI를 기본 구성 요소 라이브러리로 선택하면 Nuxt가 Element-UI의 필요에 따라 설정을 도입하지 않고 스스로 설정해야 합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.