23

Zauważyłem, że za każdym razem, gdy używam Google's Closure Compiler Service, pozostawia ona kilka niepotrzebnych spacji w skompilowanym kodzie widocznym po prawej stronie. Odpowiadają one podziałom linii w hostowanej wersji skompilowanego kodu.Dlaczego Google Closure Compiler pozostawia kilka niepotrzebnych spacji lub linii?

Na przykład (zwróć uwagę na podziały wierszy, z których każdy wydaje się niepotrzebny):

http://troy.onespot.com/static/stack_overflow/closure_spaces.js

do tej pory, właśnie został usuwając je ręcznie, ale jestem ciekaw, dlaczego oni tam . Czy ograniczenie długości linii hostowanej wersji kodu jest bardziej czytelne? Czy kompilator może być wystarczająco inteligentny, aby go zostawić lub wstawić celowo, aby zmaksymalizować wysiłki kompresji GZIP?

Wiem, że mają one niewielki wpływ na rozmiar pliku, ale przy tak wielkim wysiłku przechodzącym na minimalizowanie wszystkich ostatnich bajtów w skrypcie źródłowym, jest to sprzeczne z intuicją, dlaczego tak się dzieje.

+0

Nie mam dostępu do pliku [default.js] (http://closure-compiler.appspot.com/code/jsc39ddc01a5a74a754148a33d2d8f1444/default.js), link zwraca stronę z "Content-Length" z 0. Czy możesz wkleić (część) kodu w swoim pytaniu? –

+0

Przepraszam za to - założyłem, że Google hostował skompilowany kod w nieskończoność, ale najwyraźniej tak nie jest. Zaktualizowałem link w powyższym pytaniu. – Bungle

+0

Najbardziej szaloną rzeczą jest Google PageSpeed ​​Insights narzeka na kilka bajtów (<1 KB) i kiedy pobieram zoptymalizowane pliki, js ma 180K długich linii, ale nie ma sposobu, aby polecić kompilatorowi zamknięcia (API lub aplikacji JAVA), aby złamać linie o dowolnej długości (np. 180K) –

Odpowiedz

38

Cytowanie Closure Compiler FAQ:

Dlaczego istnieją losowo linia zasila w skompilowane skrypty?

Kompilator zamykający celowo dodaje znaki końca wiersza co 500 znaków. Zapory ogniowe i serwery proxy czasami uszkadzają lub ignorują duże pliki JavaScript z bardzo długimi liniami. Dodanie podziałów linii co 500 znaków zapobiega temu problemowi. Usunięcie linii podziału nie ma wpływu na semantykę skryptu. Wpływ na rozmiar kodu jest mały, a kompilator optymalizuje rozmieszczenie linii, aby kara była jeszcze mniejsza, gdy pliki są spakowane gzip.

Wiedziałeś, że to mądre! :)

+1

Awesome, to rozwiązuje! Nie widziałem FAQ - dziękuję za link i doceniam odpowiedź. – Bungle

+0

Najbardziej szaloną rzeczą jest Google PageSpeed ​​Insights narzeka na kilka bajtów (<1 KB), a kiedy pobieram zoptymalizowane pliki, js ma 180K długich linii, ale nie ma sposobu, aby polecić kompilatorowi zamknięcia (API lub aplikacji JAVA), aby złamać linie o dowolnej długości (np. 180K) –

+1

@JoseNobile Ostatnio miałem do czynienia z tym problemem z błędem linii z aplikacją Java. Pracowałem nad tym, usuwając ręcznie linie podziału wprowadzone przez kompilator zamykający. – Stephan