2015-01-29 10 views
17

Pracuję nad dużym projektem angluar i oczywiście potrzebujemy sposobu na leniwy załadować nasze skrypty.Angularjs: ocLazyLoad vs Requirejs

Pracowałem wcześniej z require.js i jest całkiem niezły, ale problem polega na tym, że po połączeniu i minięciu naszych plików otrzymaliśmy plik 1.5M js.

Więc po prostu napotkałem OcLazyload i wygląda obiecująco, ale widziałem wiele przykładów w Internecie, które używają zarówno wymagać i ocLazyLoad, jestem trochę zdezorientowany, dlaczego chcesz używać obu. Czy oboje nie robią tego samego?

+1

pamiętać, że korzystanie RequireJS można załadować kilka plików na żądanie, czyli tylko wtedy, gdy rzeczywiście potrzebują ich (na przykład w dyrektywie lub podobnym). Więc utrzymuj swój "zminimalizowany" pakiet tylko z tym, co trzeba najpierw załadować. – floribon

+0

@floribon - ale OcLazyLoading robi to samo i może nawet zintegrować się z ui-routerem i załadować pliki według stanu – Tomer

+3

Odpowiedziałem na twoje obawy dotyczące rozmiaru pakietu. Ale nie wiedziałem o ocLazyLoading i brzmi to niesamowicie, ponieważ zawsze chciałem to zrobić. Nie są one wzajemnie wykluczające się, a ocLazyLoading potrzebuje silnika menedżera zależności, który domyślnie jest ustawiony na $ script.js, ale najwyraźniej możesz użyć RequireJS, więc moim rozwiązaniem byłoby użycie obu. – floribon

Odpowiedz

15

Potrzebujesz zarówno ocLazyLoad, jak i RequireJS, ponieważ teraz masz do czynienia z dwiema oddzielnymi koncepcjami modułów - modułami javascript i kątowymi modułami wewnętrznymi.

Po początkowym bootstrapie, angularjs nie pozwala już rejestrować nowych modułów i komponentów, takich jak dyrektywy i kontrolery (przynajmniej nie używając standardowego sposobu).

RequireJS tylko ładunki javascript pliki ale nie zarejestrować nowe moduły i komponenty kątowych w tym nowym kodem

Co ocLazyLoad ma pozwalają załadować dodatkowe pliki za pomocą modułu ładującego trzeci partii jak i RequireJS co ważniejsze - rejestruje kątowe nowe moduły i komponenty w leniwie załadowanym kodzie.

Podsumowując - można leniwie załadować kod za pomocą tylko RequireJS, ale nie można załadować modułów kątowych i komponentów tylko za pomocą RequireJS. Istnieje potrzeba dodatkowej pracy, takiej jak ta wykonywana przez ocLazyLoad.

+2

Czy nie obciąża zasobów samodzielnie? Po co używać obu, jeśli możesz po prostu użyć oclazyload? – rebelliard

+0

Nie musisz. Ale pytanie jest jedno do drugiego. –

30

Możesz używać RequireJS z ocLazyLoad, ale nie polecam, jest to możliwe, ponieważ ludzie poprosili mnie o zrobienie tego i było to łatwe do zintegrowania. Nie potrzebujesz RequireJS, ponieważ ocLazyLoad zawiera własne programy ładujące dla plików js/css/templates i może załadować dowolny rodzaj plików, a nie tylko moduły kątowe.

Jeśli chcesz leniwy załadować moduły kątowe, będziesz potrzebował lib, aby zarejestrować je w Angular (lub zaczekaj na Angular 1.5, który pozwoli ci to zrobić).

Konkluzja brzmi: można użyć RequireJS z ocLazyLoad, lub po prostu ocLazyLoad (zalecane), ale nie można używać tylko RequireJS

+0

Świetne wyjaśnienie. Ale miałem wątpliwości podczas implementowania programu oclazyload. Za pomocą programu oclazyload można go łatwo załadować. kiedy przychodzi załadować zależności, w wymaganiu js, jeśli wspomniałem o depsie w shimie, to automatycznie załaduje zależność. Ale w oclazyload muszę podać ręcznie każdą zależność dla każdego routingu. Czy istnieje jakikolwiek inny sposób ponownego użycia kodu, np. Requirejs do ładowania zależności? –

+0

Czy istnieje menedżer zależności? –

+0

Myślę, że requirejs utrzymuje zależności. Łatwo jest znaleźć się w kodzie zależności. OcLazyLoad z requirejs zapewni lepszą obsługę kodu i ponownego użycia. –