JavaScript 캐 시 함수
3342 단어 JavaScript
무엇으로 시험 해 볼 까요?그 피 보 나치 수열 을 가 져 가세 요. IE6 가 사 레 들 릴 것 같 아 요. 보통 5 초 동안 연산 하지 못 하면 가짜 로 죽 어 요.우 리 는 먼저 시간 을 소모 하 는 것 을 보고 결 과 를 보 자.
직접 재 귀적 으로 실현:
function fib(n){
if (n == 0 || n == 1)
return 1;
return fib(n-1) + fib(n-2);
}
function fib(n){
if (n == 0 || n == 1)
return 1;
return fib(n-1) + fib(n-2);
}
var time1 = new Date
var b = fib(30)
var time2 = new Date - time1
alert(time2)
alert(b)
실행 코드
캐 시 함 수 를 다시 봅 니 다.국내 에서 도 많은 실현 이 있 었 다. 모두 realazy 의 이 스티커 인 에서 거품 이 일 었 다!
function Memoize(func, obj){
var obj = obj || window,
func = obj[func],
cache = {};
return function(){
var key = Array.prototype.join.call(arguments, '_');// , 1,2,3,
// 1_2_3 key, value
if (!(key in cache))
cache[key] = func.apply(obj, arguments);
return cache[key];
}
}
var fib = {
fib: function(n){
if (n == 0 || n == 1)
return 1;
return this.fib(n-1) + this.fib(n-2);
},
fib_memo: function(n){
if (n == 0 || n == 1)
return 1;
return this.fib_memo(n-1) + this.fib_memo(n-2);
}
}
fib.fib_memo = Memoize('fib_memo', fib);
function Memoize(func, obj){
var obj = obj || window,
func = obj[func],
cache = {};
return function(){
var key = Array.prototype.join.call(arguments, '_');
if (!(key in cache))
cache[key] = func.apply(obj, arguments);
return cache[key];
}
}
var fib = {
fib: function(n){
if (n == 0 || n == 1)
return 1;
return this.fib(n-1) + this.fib(n-2);
},
fib_memo: function(n){
if (n == 0 || n == 1)
return 1;
return this.fib_memo(n-1) + this.fib_memo(n-2);
}
}
fib.fib_memo = Memoize('fib_memo', fib);
var time1 = new Date
var b = fib.fib_memo(30)
var time2 = new Date - time1
alert(time2)
alert(b)
실행 코드
간소화: 어차피 매개 변수 가 하나 밖 에 없 으 니 배열 로 바 꾸 세 요.
var memoize = function(fn) {
var cache = [];
return function(i) {
return (i in cache) ? cache[i] :
(cache[i] = fn.call(arguments.callee, i));
};
}
var fib2 = new memoize(function(i) {
if (i == 0 || i == 1)
return 1;
return this(i-1) + this(i-2);
})
var memoize = function(fn) {
var cache = [];
return function(i) {
return (i in cache) ? cache[i] :
(cache[i] = fn.call(arguments.callee, i));
};
}
var fib2 = new memoize(function(i) {
if (i == 0 || i == 1)
return 1;
return this(i-1) + this(i-2);
})
var time1 = new Date
var b = fib2(30)
var time2 = new Date - time1
alert(time2);
alert(b)
실행 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.