🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
11 messages
11 total messages Started by Roman Tyczka Mon, 10 Sep 2018 11:15
Wczytywanie skryptów
#50439
Author: Roman Tyczka
Date: Mon, 10 Sep 2018 11:15
6 lines
105 bytes
Witam,

Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?

--
pozdrawiam
Roman Tyczka
Re: Wczytywanie skryptów
#50440
Author: rePeter
Date: Mon, 10 Sep 2018 11:50
15 lines
306 bytes
Mon, 10 Sep 2018 11:15:48 +0200      
Roman Tyczka <noemail@because.no>   napisał(a):

> Witam,
> 
> Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?
> 


IMHO, najlepiej na końcu strony przed samym </body>
jQuery i pozostałe skrypty.


-- 
pozdrawiam, Peter
Re: Wczytywanie skryptów
#50441
Author: Roman Tyczka
Date: Mon, 10 Sep 2018 13:24
16 lines
614 bytes
On Mon, 10 Sep 2018 11:50:46 +0200, rePeter wrote:

>> Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?
>
>
> IMHO, najlepiej na końcu strony przed samym </body>
> jQuery i pozostałe skrypty.

To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
się z kilku fragmentów, będących szablonami i w nich następują odwołania do
jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
załadowane, bo ładuje się na końcu i bach.. błąd.

--
pozdrawiam
Roman Tyczka
Re: Wczytywanie skryptów
#50442
Author: rePeter
Date: Mon, 10 Sep 2018 14:05
35 lines
1301 bytes
Mon, 10 Sep 2018 13:24:26 +0200      
Roman Tyczka <noemail@because.no>   napisał(a):

> On Mon, 10 Sep 2018 11:50:46 +0200, rePeter wrote:
> 
> >> Czy wczytywanie skryptów typu jQuery w sekcji <head> jest poprawne?  
> > 
> > 
> > IMHO, najlepiej na końcu strony przed samym </body>
> > jQuery i pozostałe skrypty.  
> 
> To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
> się z kilku fragmentów, będących szablonami i w nich następują odwołania do
> jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
> środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
> załadowane, bo ładuje się na końcu i bach.. błąd.
> 

Skrypty muszą zaczekać aż wczyta się cały DOM, 
czyli albo ładować się na końcu strony
albo, jeśli ładowane w header, czekać aż reszta strony się załaduje.
np. $(document).ready lub $(window).load
W przeciwnym wypadku skrypt może odwoływać się do elementu który jeszcze nie został
wczytany/utworzony.

-- 
pozdrawiam, Peter
Re: Wczytywanie skryptów
#50443
Author: Roman Tyczka
Date: Mon, 10 Sep 2018 15:56
43 lines
1422 bytes
On Mon, 10 Sep 2018 14:05:06 +0200, rePeter wrote:

>>> IMHO, najlepiej na końcu strony przed samym </body>
>>> jQuery i pozostałe skrypty.
>>
>> To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
>> się z kilku fragmentów, będących szablonami i w nich następują odwołania do
>> jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
>> środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
>> załadowane, bo ładuje się na końcu i bach.. błąd.
>>
>
> Skrypty muszą zaczekać aż wczyta się cały DOM,
> czyli albo ładować się na końcu strony
> albo, jeśli ładowane w header, czekać aż reszta strony się załaduje.
> np. $(document).ready lub $(window).load
> W przeciwnym wypadku skrypt może odwoływać się do elementu który jeszcze nie został
> wczytany/utworzony.

Aj noł...
Jeszcze raz, postaram się lepiej opisać.
Używam szablonów Mustache, one pozwalają osadzać jedne szablony w innych
przez składnię:

<html>
<head>
</head>
<body>
{{> szablon naglowka}}
{{> szablon menu}}
{{> szablon informacji X}}
{{> szablon stopki}}
{{> szablon z includami jQuery}}
</body>

I teraz za pomocą szablonu "szablon z includami jQuery" ładuję jQuery na
końcu.
Ale już w szablonie "szablon informacji X" już chcę przypisać zdarzenia
click do buttona. I nie mogę.
Jak to obejść?

--
pozdrawiam
Roman Tyczka
Re: Wczytywanie skryptów
#50444
Author: rePeter
Date: Mon, 10 Sep 2018 20:18
64 lines
2156 bytes
Mon, 10 Sep 2018 15:56:33 +0200      
Roman Tyczka <noemail@because.no>   napisał(a):

> On Mon, 10 Sep 2018 14:05:06 +0200, rePeter wrote:
> 
> >>> IMHO, najlepiej na końcu strony przed samym </body>
> >>> jQuery i pozostałe skrypty.    
> >> 
> >> To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
> >> się z kilku fragmentów, będących szablonami i w nich następują odwołania do
> >> jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
> >> środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
> >> załadowane, bo ładuje się na końcu i bach.. błąd.
> >>   
> > 
> > Skrypty muszą zaczekać aż wczyta się cały DOM, 
> > czyli albo ładować się na końcu strony
> > albo, jeśli ładowane w header, czekać aż reszta strony się załaduje.
> > np. $(document).ready lub $(window).load
> > W przeciwnym wypadku skrypt może odwoływać się do elementu który jeszcze nie został
> > wczytany/utworzony.  
> 
> Aj noł... 
> Jeszcze raz, postaram się lepiej opisać.
> Używam szablonów Mustache, one pozwalają osadzać jedne szablony w innych
> przez składnię:
> 
> <html>
> <head>
> </head>
> <body>
> {{> szablon naglowka}}
> {{> szablon menu}}
> {{> szablon informacji X}}
> {{> szablon stopki}}
> {{> szablon z includami jQuery}}  
> </body>
> 
> I teraz za pomocą szablonu "szablon z includami jQuery" ładuję jQuery na
> końcu.
> Ale już w szablonie "szablon informacji X" już chcę przypisać zdarzenia
> click do buttona. I nie mogę.
> Jak to obejść?
> 

jQuery możesz załadować w nagłówkach, byleby skrypty z niego korzystające odpalać po
załadowaniu elementu do którego się odnoszą. Powinno zadziałać.


-- 
pozdrawiam, Peter
Re: Wczytywanie skryptów
#50445
Author: Roman Tyczka
Date: Mon, 10 Sep 2018 20:35
52 lines
2002 bytes
On Mon, 10 Sep 2018 20:18:52 +0200, rePeter wrote:

>>>>> IMHO, najlepiej na końcu strony przed samym </body>
>>>>> jQuery i pozostałe skrypty.
>>>>
>>>> To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
>>>> się z kilku fragmentów, będących szablonami i w nich następują odwołania do
>>>> jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
>>>> środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
>>>> załadowane, bo ładuje się na końcu i bach.. błąd.
>>>>
>>>
>>> Skrypty muszą zaczekać aż wczyta się cały DOM,
>>> czyli albo ładować się na końcu strony
>>> albo, jeśli ładowane w header, czekać aż reszta strony się załaduje.
>>> np. $(document).ready lub $(window).load
>>> W przeciwnym wypadku skrypt może odwoływać się do elementu który jeszcze nie został
>>> wczytany/utworzony.
>>
>> Aj noł...
>> Jeszcze raz, postaram się lepiej opisać.
>> Używam szablonów Mustache, one pozwalają osadzać jedne szablony w innych
>> przez składnię:
>>
>> <html>
>> <head>
>> </head>
>> <body>
>> {{> szablon naglowka}}
>> {{> szablon menu}}
>> {{> szablon informacji X}}
>> {{> szablon stopki}}
>> {{> szablon z includami jQuery}}
>> </body>
>>
>> I teraz za pomocą szablonu "szablon z includami jQuery" ładuję jQuery na
>> końcu.
>> Ale już w szablonie "szablon informacji X" już chcę przypisać zdarzenia
>> click do buttona. I nie mogę.
>> Jak to obejść?
>>
>
> jQuery możesz załadować w nagłówkach, byleby skrypty z niego korzystające odpalać po
> załadowaniu elementu do którego się odnoszą. Powinno zadziałać.

No, że zadziała to wiem, tak zresztą teraz mam, tylko właśnie spotykałem
się z twierdzeniem, że skrypty to na końcu stąd ten wątek zacząłem, żeby to
rozjaśnić. I nadal nic nie wiem. Bo niby warto na końcu, ale nie można, gdy
stronka trochę bardziej skomplikowana niż hello world.

--
pozdrawiam
Roman Tyczka
Re: Wczytywanie skryptów
#50446
Author: rePeter
Date: Mon, 10 Sep 2018 20:49
18 lines
688 bytes
Mon, 10 Sep 2018 20:35:56 +0200      
Roman Tyczka <noemail@because.no>   napisał(a):


> No, że zadziała to wiem, tak zresztą teraz mam, tylko właśnie spotykałem
> się z twierdzeniem, że skrypty to na końcu stąd ten wątek zacząłem, żeby to
> rozjaśnić. I nadal nic nie wiem. Bo niby warto na końcu, ale nie można, gdy
> stronka trochę bardziej skomplikowana niż hello world.

Nie możesz w programie używać danych, których jeszcze nie wczytałeś (przeglądarka nie
pobrała), co w tym dziwnego/skomplikowanego?

-- 
pozdrawiam, Peter
Re: Wczytywanie skryptów
#50447
Author: Borys =?utf-8?Q?
Date: Mon, 10 Sep 2018 23:10
20 lines
1013 bytes
Dnia Mon, 10 Sep 2018 13:24:26 +0200, Roman Tyczka napisał(a):

> To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
> się z kilku fragmentów, będących szablonami i w nich następują odwołania do
> jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
> środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
> załadowane, bo ładuje się na końcu i bach.. błąd.

Klasyczny problem jajka i kury, praktycznie nierozwiązywalny w śmietnikach
typu Wordpress. Teoretycznie mógłbyś spróbować przechwycić wszystkie
wywołania jQuery, skolejkować i uruchomić po załadowaniu właściwej
biblioteki. Ale jeśli masz do czynienia z cudzym kodem, to tam może dziać
się wszystko i takie rozwiązanie zaraz wybuchnie.

Skrypty zaś wczytuje się w stopce, bo ich przetwarzanie blokuje
renderowanie strony. A przy kilkusetkilobajtowych klockach kodu to staje
się zauważalne na telefonach.

--
Borys Pogoreło
borys(#)leszno,edu,pl
Re: Wczytywanie skryptów
#50448
Author: Roman Tyczka
Date: Tue, 11 Sep 2018 10:32
35 lines
1916 bytes
On Mon, 10 Sep 2018 23:10:49 +0200, Borys Pogoreło wrote:

>> To jest trochę kłopot. Bo jak rozwiązujecie taki układ, że strona składa
>> się z kilku fragmentów, będących szablonami i w nich następują odwołania do
>> jQuery, które podpinają zdarzenia pod np. buttony formularzy? One są w
>> środku strony, więc jak zaczynają działać to jQuery jeszcze nie będzie
>> załadowane, bo ładuje się na końcu i bach.. błąd.
>
> Klasyczny problem jajka i kury, praktycznie nierozwiązywalny w śmietnikach
> typu Wordpress. Teoretycznie mógłbyś spróbować przechwycić wszystkie
> wywołania jQuery, skolejkować i uruchomić po załadowaniu właściwej
> biblioteki. Ale jeśli masz do czynienia z cudzym kodem, to tam może dziać
> się wszystko i takie rozwiązanie zaraz wybuchnie.

Kod jest mój, znaczy nie jest to jakiś CMS czy coś, tylko cały kod jest
własny. Mogę z nim robić co chcę... obym tylko umiał ;-)
Na czym polega to przechwytywanie wywołań jQuery?
Bo sprawa jest teoretycznie prosta. W każdym z tych małych szablonów
potrzebuję przypinać zdarzenia, używam do tego jQuery, ale szablon jest
wczytany, gdy jQuery jeszcze nie ma. Można by to przypięcie zdarzeń wsadzić
w SetTimeout(), ale to drut, bo nigdy nie wiadomo czy czas jest odpowiedni.
Szkoda, że nie ma czegoś takiego jak SetTimeOut() ale z flagą afterLoadPage
czy coś w tym stylu.
Albo teraz wymyśliłem, mógłbym w nagłówku mieć zadeklarowaną jakąś tablicę
funkcji i do niej pakować wywołania z wnętrza strony, a stopka by tylko to
wyciągała z tablicy i odpalała, ale nie wiem jak to zrobić.

> Skrypty zaś wczytuje się w stopce, bo ich przetwarzanie blokuje
> renderowanie strony. A przy kilkusetkilobajtowych klockach kodu to staje
> się zauważalne na telefonach.

No i właśnie dlatego warto te skrypty mieć na końcu i o to walczyć.

--
pozdrawiam
Roman Tyczka
Re: Wczytywanie skryptów
#50449
Author: Borys =?utf-8?Q?
Date: Thu, 13 Sep 2018 23:28
31 lines
1518 bytes
Dnia Tue, 11 Sep 2018 10:32:59 +0200, Roman Tyczka napisał(a):

> Kod jest mój, znaczy nie jest to jakiś CMS czy coś, tylko cały kod jest
> własny. Mogę z nim robić co chcę... obym tylko umiał ;-)
> Na czym polega to przechwytywanie wywołań jQuery?

Trochę za bardzo uprościłem, bo to o czym myślę nie zadziała w Wordpressie.
Są jakieś wtyczki, które próbują ogarnąć ten śmietnik, ale chyba przepisują
HTML.

Jeśli masz kontrolę, to już jest sporo. Bo zamiast uruchamiać kod JS możesz
owinąć go w funkcję, wrzucić do jakiejś kolejki (nawet prostej tablicy), a
później uruchomić po kolei w odpowiednim kontekście.

> Bo sprawa jest teoretycznie prosta. W każdym z tych małych szablonów
> potrzebuję przypinać zdarzenia, używam do tego jQuery, ale szablon jest
> wczytany, gdy jQuery jeszcze nie ma. Można by to przypięcie zdarzeń wsadzić
> w SetTimeout(), ale to drut, bo nigdy nie wiadomo czy czas jest odpowiedni.
> Szkoda, że nie ma czegoś takiego jak SetTimeOut() ale z flagą afterLoadPage
> czy coś w tym stylu.

A to akurat bardzo prosto rozwiązać tak jak opisałem. Wrzuć sobie gdzieś
element docelowy, nazwę zdarzenia i funkcję do wywołania, a po
inicjalizacji jQuery na podstawie tego przypnij wszystkie eventy.

Albo zwyczajnie użyj addEventListener(). jQuery był do tego potrzebny, gdy
w eventach był bałagan, IE miał własne funkcje i inną strukturę obiektu
zdarzenia. jQuery to normalizowało.

--
Borys Pogoreło
borys(#)leszno,edu,pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads