2016-10-07 3 views
3

내가 동적으로 런타임에 기능의 톤을 만들어 자바 스크립트 코드가 : 중복 기능이 많이있을 것 높은 가능성이있다자바 스크립트 기능 캐싱

f = new Function("a", "b", "something ..."); 

(동일한 매개 변수, 같은 몸을 의미).

질문 :경우에 따라 캐싱 알고리즘이나 JS 엔진 (V8)을 구현해야합니까?

사이드 질문 : IE에서 디버깅 할 때 - 동적으로 생성 된 코드가 표시됩니다 (중복 기능이 없음 - IE에서이 채팅을 권장 함). Chrome dev에 위와 같이 동적으로 생성 된 코드를 표시하는 방법을 알고 계십니까? 도구?

감사합니다.

+7

왜 함수를 많이 만들고 함수를 다시 사용하지 않아야합니까? 어쩌면이 숫자를 줄이는 방법이있을 것입니다. – IulianP

+0

어느 브라우저에서든 어떤 종류의 캐싱도 있을지 모릅니다. 새로운 함수 ('a', 'b', 'return a + b') console.log (f (f, === g)' –

+0

@ YuryTarabanko 두 개의 별개의 인스턴스를 생성한다는 것이 예상됩니다. 문제는 구문 분석 및 컴파일 목적으로 코드를 캐시하는지 여부입니다. – Bergi

답변

0

함수는 함수 객체입니다. 따라서 GC에 종속됩니다.

항상 동일한 참조 변수에 할당하는 경우 이전 버전을 GC로 휴지통에 버릴 수 있습니다.

그러나 이전에 정의 된 버전의 함수에 대한 참조가 수집되지 않도록 메모리 누수가 있는지주의해야합니다.

+0

그래서 내가해야 할 일은 해쉬를 문자열 (params와 body의 concat가 될 것입니다.)에서 계산하는 것입니다 -이 문자열을 함수로 캐시하십시오. 맞지? – user1038334

+0

BTW - 누구든지 크롬의 개발 도구에 이러한 동적 기능을 표시하는 방법을 알고 있습니까? – user1038334

+0

함수에 대한 고유 한 해시를 계산할 수있는 경우 전역 개체 fx = {}를 만들고 해당 개체 아래의 모든 함수를 해시로 저장할 수 있습니다. 다음에 함수를 만들 때, fx가 이미 그 키에 의해 무엇인가를 포함하고 있는지 확인하십시오. –