죽은 JavaScript 코드를 찾으십니까?
우리는 레거시 웹 앱을 리팩토링하고 있으며 그 결과 상당히 많은 자바 스크립트 코드를 "죽이는"것이지만 확실하지 않기 때문에 죽은 코드라고 생각하는 것을 삭제하는 것이 두렵습니다. JavaScript에서 죽은 코드를 확실하게 식별하는 도구 / 기술이 있습니까?
있다 GREP은 . 이를 사용하여 함수 호출을 찾습니다. 라는 메서드가 있다고 가정합니다 dostuff(). grep -r "dostuff()" * --color프로젝트의 루트 디렉토리에서 사용하십시오 . 정의 이외의 것을 찾지 않는 한 안전하게 지울 수 있습니다.
ack 는 또한 grep 의 주목할만한 대안 입니다.
너무 복잡한 것을 찾지 않고 :
- JSLint (실제로는 정적 분석기는 아니지만 연결된 개발 코드를 제공하면 최소한 분명한 범위 지정 컨텍스트에서 호출되지 않는 메서드를 볼 수 있습니다)
- Google 클로저 컴파일러
- Google Closure Linter
코드에서 "eval"을 사용하는 경우 코드가 어딘가에 모호한 수단으로 문자열을 어셈블하지 않고이를 평가하여 죽은 코드를 호출하지 않는다는 보증을 받기가 매우 어렵습니다. (그리고 정말로 불쾌한 것은 eval을 포함하는 문자열에서 eval을 호출 할 수 있습니다 ...).
또한 코드 외부 에서의 호출에 대해 걱정 해야합니다. 많은 웹 페이지는 HTML "on"속성을 사용하여 JavaScript 코드를 호출합니다.
그래서 당신이해야 할 일은 죽은 것처럼 보이는 메서드 / 선언을 찾고, 모든 평가 호출을 찾아서 검사하고, 모든 "on"속성을 찾아서 검사하는 것입니다.
다른 사람들이 제안한대로 테스트 커버리지를 사용하는 것은 아마도 죽은 코드의 초기 목록을 얻는 방법입니다. 죽은 후보를 제거하기 위해 가능한 한 많은 기능을 사용하고, 나머지 후보를 검색하여 코드에 호출이 있는지 확인하려고합니다. 평가 및 이벤트를 찾는 것은 코드에서 그러한 것들을 검색하는 문제입니다.
이름 목록을 하나씩 살펴보고 올바른 검색을 입력하고 출력에서 오 탐지가 아닌 것을 추측하고 편집기에서 하나씩 검사하는 것이 고통 스러울 수 있지만 Grep은 작동 할 가능성이 높습니다.
당신은 우리의 볼 수있는 SD 소스 코드 검색 엔진 (SCSE) 다양한 종류와 자바 스크립트의 HTML 페이지를 포함하여 많은되는 언어의, 언어 별 검색을 수행 할 수 있습니다. 나머지 후보 및 / 또는 평가에 대해 JavaScript 코드의 함수 호출 만 검사 (예 : 주석 및 문자열 무시)하도록 SCSE를 쉽게 제한하고 HTML 페이지의 "on *"속성 만 검사 (예 : HTML 페이지의 다른 모든 텍스트는 무시하십시오). GUI를 사용하여 검색 쿼리를 수락하고, 히트를 표시하고, 쉽게 검사 할 수 있도록 히트가 포함 된 소스 텍스트를 가져옵니다. 필요한 경우 히트시 편집자로 이동합니다.
정적 분석 솔루션의 경우 코드를 구문 분석하고 어떤 이름이 어떤 엔터티를 참조하는지 확인할 수있는 도구가 필요합니다. 범위가 중요합니다. 그런 다음 코드를 통해 그럴듯한 실행 경로를 결정할 수 있어야하며, 동적 개체 구조와 이러한 불쾌한 평가를 모듈로 할 수 있어야합니다. 이를 위해 당신은 꽤 정교한 엔진이 필요하고 누군가가 이런 일이 일어나지 않는 한 아마도 약간의 엔지니어링이 필요합니다.
우리 DMS 소프트웨어 재 설계 Toolkit은 바로 그러한 엔진이며, 전체 자바 스크립트가 있습니다 (및 HTML) 파서. JavaScript 용으로 DMS를 사용하지는 않았지만 DMS를 사용하여 Java 용 죽은 코드 제거기를 구축했습니다. Java 코드를 제공하면 클래스, 메서드 및 필드의 "죽은 것처럼 보임"목록을 생성합니다 (dead의 전 이적 폐쇄 포함 : 클래스 A가 죽고 B를 참조하는 경우 A의 참조는 계산되지 않음). B에 실시간 참조)로 하고 모두와 코드의 수정 된 버전은 "죽은"물건을 제거. 보고서를 믿는지 결정합니다. 그렇게하면 코드를 유지합니다. 그렇지 않은 경우 코드를 수정하여 죽은 것이 죽지 않았는지 확인하고 다시 실행합니다.
JetBrains의 WebStorm IDE는 프로젝트에서 데드 코드 및 사용되지 않는 변수를 강조 표시 할 수 있습니다.
코드 최적화 프로그램을 Google Closure Compiler 로 사용할 수 있지만 코드 를 최소화하는 데 자주 사용됩니다.
function hello(name) {
alert('Hello, ' + name);
}
function test(){
alert('hi');
}
hello('New user');
결과는
alert("Hello, New user");
예를 들면.
할 수있는 또 다른 일은 Chrome의 개발자 도구 (또는 Firebug)를 사용하여 모든 함수 호출을 보는 것입니다. 아래 프로필 당신이 기능은 시간이 지남에 불러되지 않는되고있는 볼 수 있습니다.

Chrome은 개발자가 코드 범위 , 즉 실행 된 코드 라인을 볼 수있는 새로운 기능을 제공합니다 .
이것은 확실히 원 스톱 솔루션은 아니지만 개발자가 코드 통찰력을 얻는 데 도움을 줄 수 있습니다.
자세한 내용은 이 링크 를 확인 하십시오.
Chrome 59 릴리스 와 별도로 출시
이 작업을 자동화하고 싶다면 https://github.com/joelgriffith/navalia를 살펴 보겠습니다. https://github.com/joelgriffith/navalia 는이를 수행하기위한 자동화 된 API를 제공합니다.
const { Chrome } = require('navalia');
const chrome = new Chrome();
chrome.goto('http://joelgriffith.net/', { coverage: true })
.then(() => chrome.coverage('http://joelgriffith.net/main.bundle.js'))
.then((stats) => console.log(stats)) // Prints { total: 45913, unused: 5572,
percentUnused: 0.12135996340905626 }
.then(() => chrome.done());
더보기 : https://joelgriffith.github.io/navalia/Chrome/coverage/
참고 URL : https://stackoverflow.com/questions/4136738/find-dead-javascript-code
'Program Club' 카테고리의 다른 글
| 브라우저 시간 초과 (0) | 2020.12.09 |
|---|---|
| x86_64에서 정적 라이브러리를 컴파일 할 때 gcc가 암시 적으로 -fPIC 플래그를 제공하지 않는 이유 (0) | 2020.12.09 |
| C ++ 14에서 new 및 delete가 여전히 유용합니까? (0) | 2020.12.09 |
| Mac / PC에서 글꼴 렌더링 / 줄 높이 문제 (요소 외부) (0) | 2020.12.09 |
| _BSMachError XCode 7 베타 (0) | 2020.12.09 |
