2012-12-19 15 views
15

Poszukuję porad na temat najlepszego sposobu przechowywania moich funkcji JavaScript (jQuery).Jak/kiedy/gdzie dodać zewnętrzne javascript

Pracuję w MVC/maszynce do golenia i dlatego mam stronę układu. Załączam tutaj moją bibliotekę jQuery i zewnętrzny plik JavaScript, aby była dostępna na każdej stronie.

Działa to dobrze, ale teraz zdaję sobie sprawę z tego, że dodaję prawie 300 linii JS do KAŻDEJ strony, gdzie może połowa z nich jest używana na którejkolwiek z tych stron.

Jedna funkcja nie znajduje się w pliku zewnętrznym i zamiast tego znajduje się w kodzie HTML, ponieważ potrzebuję użyć zmiennych ustawionych w moim kodzie.

mam kilka pytań wokół tej aranżacji:

  • jest umieszczenie wewnątrz JS HTML ogólnie akceptowalnym kiedy ustawić za pomocą brzytwy używane są zmienne? Wydaje się, że nie ma czystej metody przekazywania zmiennej do zewnętrznego pliku js.
  • Czy powinienem podzielić moje funkcje na pojedyncze pliki JS i uwzględnić tylko to, co jest potrzebne dla każdej strony w witrynie?
  • Jeśli miałbym podzielić je na wiele plików, jak by to działało z jQuery's (document).ready? Czy muszę go użyć, jeśli ma być używany cały JavaScript, który dołączam?

Jestem pewien, że będzie to bardziej kwestia opinii niż czarno-biała odpowiedź, ale chcę rozważyć wszystkie moje opcje, zanim przejdę dalej. Mimo że działa dobrze, jak jest, nie mogę pomóc, ale czuję, że jest lepszy/czystszy sposób.

Odpowiedz

12

Pamiętaj, że gdy użytkownik znajdzie się na Twojej stronie głównej i załaduje plik javascript, zostanie on zbuforowany w przeglądarce, aby kolejne strony nie pobiegły ponownie.

Zdecydowanie zachowałbym oddzielne js, na każdej stronie mógł istnieć fragment kodu inicjujący JS, którego potrzebuje ten widok. Umieścić coś jak poniżej w widoki, które trzeba uruchomić JS

$(document).ready(function() { 
    mysite.mypage(); 
}); 

wtedy mysite.mypage function() może być zdefiniowane w zewnętrznym pliku JS. 300 linii nie jest końcem świata, powiedziałbym, że prawdopodobnie jest zbyt wcześnie, aby martwić się optymalizacją.

Zawsze można rozważyć zminimalizowanie pliku JS w celu zmniejszenia rozmiaru. Szybki i łatwy sposób, aby to zrobić jest tutaj:

http://www.minifyjavascript.com/

+2

Dzięki za to - cały kod jest minified po wdrożeniu, plus nie brałem pod uwagę buforowanie (nie wspominając o większej liczbie żądań http, jeśli użyłem 4 zewnętrznych plików zamiast 1). –

+1

/zgadzam się. Jeśli masz tylko 300 linii, trzymam to wszystko na jednej stronie. Jeśli martwisz się, że uruchomisz wszystkie te funkcje na każdej stronie, możesz podzielić je na sekcje i sprawdzić stronę, na której się znajdujesz, a następnie uruchomić tylko te funkcje, które są potrzebne na tej stronie. Zwykle podaję nazwę mojego js i dostarczam init dla każdego z nich i umieszczam go w instrukcji if: if ($ ('# Homepage') {MySite.Homepage.init()} – Syon

+2

@Syon: Nie jesteś "prowadzący wszystkie te funkcje na każdej stronie ", po prostu je dodajesz. Również oddzielenie każdego modułu JS w innym pliku ma sens dla lepszego zarządzania twoimi plikami, ale pod względem wydajności zawsze umieszczałbym wszystko w jednym pliku. Użytkownik ładuje go raz i cache Reszta będzie prawdopodobnie najlepsza, logicznie rozdzielając moduły JS w różnych plikach i używając preprocesora do łączenia i minimalizowania kodu javascript – Amberlamps

3

Czy kiedykolwiek słyszał o require.js? http://requirejs.org/ Uważam, że to naprawdę przydatne.

Jest to program ładujący moduły, dzięki czemu można podzielić cały kod JS na pojedyncze pliki i załadować tylko te, które są potrzebne na każdej stronie.

Nie wiem o przekazywaniu zmiennej do zewnętrznego pliku JS, nie sądzę, że jest to możliwe/"właściwy" sposób.

Każdy zewnętrzny plik JS można przekształcić w funkcję akceptującą i zwracającą parametry.Następnie na stronie należy go użyć: - uwzględnij zależność od pliku - zadzwoń do funkcji

To, co robię, wydaje się być Twoją drugą sugestią.

dla $ (document.ready) pytanie to naprawdę zależy od Ciebie. Nie musisz go używać, ale jest przydatny w niektórych sprawach, sprawdź ten przegląd: http://docs.jquery.com/Tutorials:Introducing_ $ (dokument) .ready()

+0

Co jest tak trudnego w przekazywaniu zmiennej do zewnętrznego pliku JS. Będziesz musiał znać podpis funkcji zewnętrznych, aby poprawnie przekazywać wartości. Ale to samo dotyczy wewnętrznych funkcji. – Amberlamps

+0

@Amberlamps Czy masz przykład przekazywania zmiennej do zewnętrznego pliku js? Obecnie mam jedną funkcję wewnątrz mojego HTML, ponieważ używa zestawu varibale w moim MVC/maszynowym kodzie. –

+1

Myślę, że jest coś, czego nie dostaję, ponieważ jest zbyt proste. W momencie, gdy dokument jest w pełni załadowany, każda globalna funkcja i zmienna są dostępne dla dowolnej innej funkcji, niezależnie od lokalizacji. Jeśli masz zewnętrzny plik JS, zawiera on funkcję 'function sayName (name) {alert (name); } ', możesz wywołać' sayName ('Alan') 'z dowolnego miejsca. – Amberlamps

Powiązane problemy