2010-08-24 2 views
6

Helo,원하지 않는 jQuery 함수를 제거하십시오.

jQuery와 같은 라이브러리는 완전히로드되어 있으며 스크립트에서 사용할 수없는 많은 기능이 있습니다. 내 스크립트가 내가 사용하는 모든 jQuery 함수와 그 종속성을 찾은 다음 jQuery 라이브러리에서 나머지 함수를 제거한다고 말하는 방법이 있는지 궁금하다. 이것은 거의 모든 라이브러리에 적용될 수 있으며 실제로 jQuery 관련 질문이 아닙니다.

달성 방법에 대한 의견을 보내주십시오. 나중에 코드에 새 함수를 추가하고 해당 함수가 jQuery에 존재하지 않는다면 나중에 두통이 될 수 있음을 알고 있습니다. 그러나 그 위험을 기꺼이 감수해야합니다.

+0

맙소사, 왜 물어 봐도 될까요? – jAndy

+0

예, 가능할 수 있습니다. 우리는 수천 개의 사이트에서 실행되는 소프트웨어를 가지고 있으며 jQuery 코드가 우리 코드와 함께 추가되었습니다. 그러나 우리가 앞으로 나아갈 때 우리는 불필요한 부분을 제거하기를 원합니다. (몇몇을 제외하고는 핵심 jQuery 함수를 거의 사용하지 않기 때문에). 우리는 CDN을 사용하여 jQuery를로드하고 있지만 고객은 그것을 좋아하지 않습니다. 그들은 모든 것을 자기 주인으로하고 싶어합니다. 왜 내가 모르는 지 물어 보지 마라. –

+0

합리적인 캐싱 전략을 생각해 내면 전체 jQuery 파일을 로컬에서 제공 할 수 있지만 캐시하여 다운로드/추가 HTTP 요청 비용에 대해 걱정할 필요가 없습니다. [웹 작성자 및 웹 마스터를위한 캐싱 자습서] (http://www.mnot.net/cache_docs/)는 훌륭한 리소스입니다. –

답변

2

당신은 당신이 원하는 것을 할 것 같다 closure compiler

사용할 수 있습니다.

1

jQuery는 Prototype 및 MooTools와 같은 패키지 다운로드를 제공하지 않으므로 수동으로 모든 종속성을 정렬해야하기 때문에 어려울 수 있습니다. 새로운 jQuery 릴리스마다 계속해서 다시 정렬해야하기 때문입니다.

또한 전체 라이브러리의 경우 현재 24kb gzipped 크기로 작성 했으므로 크기는 중요하지 않습니다. 라이브러리는 한 번만로드됩니다. CDN에서로드하면 중앙 집중식으로 캐시되므로 느린 모뎀 연결에서도 가능합니다.

0

이것은 좋지 않은 아이디어입니다.

우선 기본 자바 스크립트 대체품을 사용할 수 있으므로 InArray라고 말하면됩니다.하지만 계속 유지하는 다른 방법은 InArray에 의존 할 수 있습니다.

기본적으로 jQuery 메소드는 작업을 완료하는 데 서로를 사용합니다. 이는 패키지 크기를 줄이는 방법 중 하나입니다.

당신이 정말로 이렇게하려면 내가 그렇게 좋아 할 것 :

$M = MyjQuery = function(element,context) 
{ 
    this.fn = {} 
    this.extend = function(base,new) 
    { 
     //Extend them here 
    } 
} 

을 그리고 처음부터 다시 시작!

2

나는 당신이 할 수있는 이유는, 단서가없는 경우에도 :

이동을 jQuery를 lib 디렉토리에서 메이크입니다 http://github.com/jquery/jquery/blob/master/Makefile

에 있습니다. jQuery는 여러 모듈로 나뉘어져 있으며, 여러 모듈이 함께 있습니다. 그 base files는 dependencys에서 주문됩니다. 그래서 당신은 사용하지 않는 모듈을 껍질을 벗길 수 있습니다.

그게 효과가 없다면 100 % 확신 할 수는 없지만 그걸 시도해 볼 수는 있습니다. .

+0

심지어 개발 단계를 위해 몇 개의 파일로 나뉘어져 있어도 독립 실행 형으로 실행할 수 없다는 것을 알지 못합니다. 예를 들어 jquery 팀이 작업자를 구성합니다. 예를 들어 데이터 팀은'data.js'를 작업 할 것입니다. 그럼, 그들은 새로운 방법/기능을 테스트하는 테스터들을 많이 가질 것입니다. 그래, 음침한 그 디자인 과정은 아무것도 아니야 - 멋진 참고 자료 야. – RobertPitt

+1

@RobertPitt : 나도 모르겠다. 내게 의존성 트리처럼 보인다. 순서가 맞습니다. 그래서 저는 예를 들어 "Dimensions"를 제거 할 수 있다고 생각합니다. – jAndy

+0

차원은'css'와 같이'elem.offsetWidth'와 같은 다른 엔테이트가 가능할 수도 있습니다. 그렇지만 css와 같은 하위 패키지를 제거하면 라이브러리 전반에 걸쳐 큰 문제가 발생할 것입니다! - 추가 된 새 라이브러리는 말할 것도없고, 그들은 역시 고통을 겪을 것입니다 :( – RobertPitt

1

JavaScript가 본질적으로 매우 역동적이지 않은 경우 Closure Compiler 샷을 제공 할 수 있습니다.

를 수집 모든 (jQuery를, 플러그인, 다른 라이브러리, 모든 것을 포함) 및 고급 컴파일 옵션을 사용하여 지금 gcc를 공급 한 곳에서 자바 스크립트.

이 코드을 손상시킬 수있는 사용하지 않는 기능을 모두 제거합니다. 테스트 사례가 있거나 JS가 수동으로 완전히 테스트 할 수있을만큼 작은 경우에만이 방법을 권합니다.

컴파일러가하는 최적화의 종류의 간단한 예는 다음과 같습니다

function hello(name) { 
    alert('Hello, ' + name); 
} 

hello(); 

가 감소 얻을 것이다 : 즉 기본적으로 일어나고있는 모든 것을 이후

alert("Hello, undefined"); 

입니다.