2010-08-24 15 views
6

Helo,Usuwanie niechcianych funkcji jQuery

Biblioteka taka jak jQuery jest w pełni załadowana i zawiera wiele funkcji, których nie możemy używać w naszych skryptach. Zastanawiam się, czy istnieje sposób, aby powiedzieć, przeczytaj mój skrypt dowiedzieć się wszystkie funkcje jQuery, które używam i jego zależności, a następnie usunąć pozostałe funkcje z biblioteki jQuery. Może to być zastosowane do praktycznie dowolnej biblioteki i nie jest to właściwie pytanie specyficzne dla jQuery.

Poinformuj mnie o swoich przemyśleniach na temat tego, jak to osiągnąć. Wiem, że może to być ból głowy później, jeśli powiem dodać nową funkcję do mojego kodu, a funkcja nie istnieje w jQuery. Ale jestem gotowy podjąć to ryzyko.

+0

Dobry Boże, czy mogę zapytać, dlaczego? – jAndy

+0

Tak, możesz. Mamy oprogramowanie, które działa na tysiącach witryn, a kod jQuery jest dodawany wraz z naszym kodem. Ale w miarę, jak idziemy do przodu, chcemy usunąć niepotrzebne części (ponieważ prawie nie używamy żadnej z podstawowych funkcji jQuery oprócz kilku). Załadowaliśmy jQuery za pomocą CDN, ale nasi klienci tego nie lubią. Chcą wszystko hostować. Nie pytaj mnie, dlaczego nie wiem. –

+0

Jeśli masz sensowną strategię buforowania, możesz serwować lokalnie cały plik jQuery, ale buforuj go, aby nie musiał się martwić o koszt pobrania/dodatkowego żądania HTTP. [Samouczek dotyczący buforowania dla webmasterów i webmasterów] (http://www.mnot.net/cache_docs/) to świetny zasób. –

Odpowiedz

1

jQuery nie oferuje pakietów do pobrania takich jak Prototype i MooTools, a ich samodzielne budowanie będzie prawdopodobnie trudne, ponieważ będziesz musiał ręcznie rozwiązać wszystkie zależności - i znowu i znowu dla każdego nowego wydania jQuery.

Co więcej, obecnie rozmiar gzipped o wielkości 24 kb dla pełnej biblioteki, którą podałem do ciebie, nie ma znaczenia. Biblioteka zostanie wczytana tylko raz - jeśli załadujesz ją z CDN, zostanie ona centralnie zbuforowana, dzięki czemu będzie możliwa nawet dla wolnych połączeń modemowych.

0

To byłby zły pomysł.

Po pierwsze możesz chcieć usunąć, powiedzmy InArray, ponieważ możesz użyć bazowej javascript alternatywy, ale inne metody, które przechowujesz, mogą polegać na InArray.

Zasadniczo metody jQueries używają się wzajemnie do wykonywania zadań, jest to jeden ze sposobów, w jaki utrzymują rozmiar pakietu.

Jeśli naprawdę chcesz to zrobić, chciałbym zrobić tak:

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

i zacząć od zera!

2

Nawet jeśli nie mam pojęcia dlaczego, można to zrobić:

Przejdź do http://github.com/jquery/jquery/blob/master/Makefile

to jest makefile z lib jQuery. jQuery jest podzielony na kilka modułów, które są łączone. Te base files są zamówione w zależnościach, więc możesz pozbyć się modułów, których nie używasz ...

Nie jestem w 100% pewien, czy to działa, nigdy nie próbowałem go sam, ale możesz dać mu szansę .

+0

Nawet tam podzielone na kilka plików na etapy rozwoju nie oznacza, że ​​są one w stanie działać jako autonomiczne, to tylko zespół jquery organizuje tam pracowników, na przykład zespół danych pracowałby na 'data.js' i tak Wówczas mieliby grupę testerów, którzy testowaliby nowe metody/funkcjonalność. tak więc to tylko proces projektowania nic więcej - miłe odniesienie choć :) – RobertPitt

+1

@RobertPitt: Nie wiem, to wygląda dla mnie jako drzewo zależności. Kolejność ma sens. Naprawdę wierzę, że możesz po prostu usunąć "Wymiary" na przykład. – jAndy

+0

wymiary mogą być możliwe, ponieważ inne obiekty, takie jak 'css' działają z' elem.offsetWidth' i takie, ale usunięcie podpakietów takich jak css spowodowałoby wtedy ogromne kłopoty, ponieważ jest używane w całej bibliotece! - nie wspominając o dodanych nowych bibliotekach, cierpieliby również :( – RobertPitt

1

Jeśli Twój JavaScript nie jest wysoce dynamiczny, możesz dać Closure Compiler zdjęcie.

Zbierz wszystko JavaScript w jednym miejscu (w tym jQuery, wtyczek, innych bibliotek, wszystko) i doprowadzania go do gcc przy użyciu zaawansowanych opcji kompilacji.

Spowoduje to usunięcie wszystkich nieużywanych funkcji, które mogą potencjalnie złamać twój kod. Mogę to tylko polecić, jeśli masz albo przypadki testowe, albo twój JS jest wystarczająco mały, aby w pełni przetestować ręcznie.

Prostym przykładem tego rodzaju optymalizacji kompilator robi to:

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

hello(); 

będzie się zmniejszyć do:

alert("Hello, undefined"); 

ponieważ jest to wszystko, co jest w zasadzie dzieje.