비동기 프로 그래 밍 솔 루 션 - 이벤트 게시 / 구독 모드
눈사태 문제 란 높 은 방 문 량, 큰 병발 량 의 상황 에서 캐 시가 효력 을 잃 는 상황 이다. 이때 대량의 요청 이 동시에 데이터 베이스 에 몰 려 들 면 데이터 베 이 스 는 이렇게 큰 조회 요 구 를 동시에 감당 하지 못 하고 사이트 의 전체적인 응답 속도 에 영향 을 미친다 ().
아 날로 그 데이터베이스 조회
var num = 0;
var select = function (callback) {
setTimeout(function() {
num++;
callback("test");
},2000)
}
select(function(res) {
console.log(res+1);
});
select(function(res) {
console.log(res+2);
});
select(function(res) {
console.log(res+3);
});
setTimeout(function() {
console.log(num);
},5000);
/*
test1
test2
test3
3
*/
이 코드 는 사이트 가 시작 되 었 을 때 캐 시가 존재 하지 않 는 것 을 모 의 했 습 니 다. 같은 sql (검색 은 test) 이 여러 번 실 행 됩 니 다.
접근 횟수 를 제한 하기 위해 상태 코드 를 증가 합 니 다.
num = 0;
var status = "ready";
var select = function(callback){
if (status === 'ready') {
status = "pending";
setTimeout(function() {
num++;
status = "ready";
callback("test");
})
}
}
select(function(res) {
console.log(res+1);
});
select(function(res) {
console.log(res+2);
});
select(function(res) {
console.log(res+3);
});
setTimeout(function() {
console.log(num);
},5000);
/*
test1
1
*/
이때 조회 횟수 는 1 회로 제한 되 었 지만 여러 번 selection 문 구 는 첫 번 째 로 만 유효 합 니 다.
이벤트 큐 도입
num = 0;
var events = require('events');
var proxy = new events.EventEmitter();
var status = "ready";
var select = function(callback){
proxy.once("selected", callback);
if (status === 'ready') {
status = "pending";
setTimeout(function() {
num++;
status = "ready";
proxy.emit("selected","test");
})
}
}
select(function(res) {
console.log(res+1);
});
select(function(res) {
console.log(res+2);
});
select(function(res) {
console.log(res+3);
});
setTimeout(function() {
console.log(num);
},5000);
/*
test1
test2
test3
1
*/
이때 모든 selection 문 구 는 조회 가 되 돌아 오 는 데 이 터 를 얻 었 고 조회 횟수 는 1 이 며 우리 가 기대 하 는 더 많은 상세 한 설명 을 얻 었 습 니 다.http://www.paradeto.com
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.