wymuszenie przełądowania pliku ze skryptami

99 views
Skip to first unread message

Marek 'Qrczak' Potocki

unread,
Dec 1, 2011, 2:55:34 AM12/1/11
to
Mam pewien nieduży, ale upierdliwy problem.
Otóż jest sobie strona, do której dopinam pliki z se skryptami
<script src='abc.js'...

Jako, że strona ewoluuje, to w plikach tych pojawiają się zmiany. Norma.
Tylko przeglądarki nie dociągają nowej wersji i w efekcie strony nie chcą
działać jak powinny. Niby wystarczy wymusić odświeżenie strony (w Firefoxie
ctrl+shift+r), ale jest to dość upierdliwe. Jest jakaś prosta metoda na
zmuszenie przeglądarki do przeładowywania takich plików, jeśli uległy one
zmianom? Wydaje mi się, że powinno się to dziać samoczynnie, ale jakoś nie
chce :(

Podpowiedzcie, co z tym fantem zrobić?

--
Pozdrawiam z Wrocławia
Marek Potocki
Przewodnik sudecki klasy 0

Sergiusz Rozanski

unread,
Dec 1, 2011, 3:16:48 AM12/1/11
to
Dnia 01.12.2011 Marek 'Qrczak' Potocki <br...@maila.pl> napisał/a:
> Mam pewien nieduży, ale upierdliwy problem.
> Otóż jest sobie strona, do której dopinam pliki z se skryptami
><script src='abc.js'...
>
> Jako, że strona ewoluuje, to w plikach tych pojawiają się zmiany. Norma.
> Tylko przeglądarki nie dociągają nowej wersji i w efekcie strony nie chcą
> działać jak powinny. Niby wystarczy wymusić odświeżenie strony (w Firefoxie
> ctrl+shift+r), ale jest to dość upierdliwe. Jest jakaś prosta metoda na
> zmuszenie przeglądarki do przeładowywania takich plików, jeśli uległy one
> zmianom? Wydaje mi się, że powinno się to dziać samoczynnie, ale jakoś nie
> chce :(
>
> Podpowiedzcie, co z tym fantem zrobić?

Najprościej to zmiana nazwy pliku. Może w apache idzie zablokować odpowiedź
304.

--
"A cóż to za sens kupować samochód, żeby jeździć po asfalcie?
Tam, gdzie jest asfalt, nie ma nic ciekawego, a gdzie jest
coś ciekawego, tam nie ma asfaltu".
Strugaccy - Poniedziałek zaczyna się w sobotę.

Marek 'Qrczak' Potocki

unread,
Dec 1, 2011, 3:36:37 AM12/1/11
to
Dnia 01 Dec 2011 08:16:48 GMT, Sergiusz Rozanski napisał(a):

> Najprościej to zmiana nazwy pliku.

Dużo zabawy by z tym było, ale w ostateczności...

> Może w apache idzie zablokować odpowiedź
> 304.

O tym faktycznie nie pomyślałem. Dzięki za trop :)

Sergiusz Rozanski

unread,
Dec 1, 2011, 4:00:30 AM12/1/11
to
Dnia 01.12.2011 Marek 'Qrczak' Potocki <br...@maila.pl> napisał/a:
> Dnia 01 Dec 2011 08:16:48 GMT, Sergiusz Rozanski napisał(a):
>
>> Najprościej to zmiana nazwy pliku.
>
> Dużo zabawy by z tym było, ale w ostateczności...

Jak strona dynamiczna to może pomóc jakiś 'lewy' parametr typu np
w php:

echo "<script src=\"java.js?v=".rand()."\">";

>> Może w apache idzie zablokować odpowiedź
>> 304.
>
> O tym faktycznie nie pomyślałem. Dzięki za trop :)
>


--

Marek 'Qrczak' Potocki

unread,
Dec 1, 2011, 4:28:38 AM12/1/11
to
Dnia 01 Dec 2011 09:00:30 GMT, Sergiusz Rozanski napisał(a):

> Dnia 01.12.2011 Marek 'Qrczak' Potocki <br...@maila.pl> napisał/a:
>> Dnia 01 Dec 2011 08:16:48 GMT, Sergiusz Rozanski napisał(a):
>>
>>> Najprościej to zmiana nazwy pliku.
>>
>> Dużo zabawy by z tym było, ale w ostateczności...
>
> Jak strona dynamiczna to może pomóc jakiś 'lewy' parametr typu np
> w php:
>
> echo "<script src=\"java.js?v=".rand()."\">";

Dzięki, przetestuję. Tylko nie rand(), a filemtime(), co (chyba) pozwoli na
przeładowywanie tylko jeśli plik był zmieniony.

Adam Byrtek

unread,
Dec 1, 2011, 10:56:41 AM12/1/11
to
On 12/01/2011 10:28 AM, Marek 'Qrczak' Potocki wrote:
> Dzięki, przetestuję. Tylko nie rand(), a filemtime(), co (chyba) pozwoli na
> przeładowywanie tylko jeśli plik był zmieniony.

Raczej to drugie, bo pierwsza opcja to wylewanie dziecka z kąpielą
(tracisz cały caching).

--
Adam Byrtek

Marek 'Qrczak' Potocki

unread,
Dec 2, 2011, 12:53:03 AM12/2/11
to
Wygląda nawet, że działa.
Podziękowania wielkie dla Sergiusza :)

Sergiusz Rozanski

unread,
Dec 2, 2011, 1:51:50 PM12/2/11
to
Ale to był właśnie taki cel aby pomijać cache i ładować zawsze nowy JS.

Artur Muszyński

unread,
Dec 3, 2011, 2:56:03 PM12/3/11
to
W dniu 2011-12-01 09:16, Sergiusz Rozanski pisze:
> Najprościej to zmiana nazwy pliku. Może w apache idzie zablokować odpowiedź
> 304.

Po co blokować 304? Jeśli serwer odeśle 304, to znaczy, że plik nie
został zmodyfikowany i browser powinien wyświetlić, co ma w pamięci
podręcznej, w przeciwnym razie powinien przeładować. Może w konfiguracji
Apache ktoś przedobrzył, usuwa nagłówek Last-Modified i korzysta z
mod_expires. Podejrzyj, co dostajesz w nagłówkach odpowiedzi.

artur


Adam Byrtek

unread,
Dec 3, 2011, 3:39:30 PM12/3/11
to
On 12/02/2011 07:51 PM, Sergiusz Rozanski wrote:
>> > Raczej to drugie, bo pierwsza opcja to wylewanie dziecka z kąpielą
>> > (tracisz cały caching).
> Ale to był właśnie taki cel aby pomijać cache i ładować zawsze nowy JS.

Celem było pomijać cache jeśli kod uległ zmianie. Jaki sens miałoby
ignorowanie go zupełnie i wydłużanie czasu ładowania strony?

Nawiasem mówiąc, bardziej eleganckie rozwiązanie to konfiguracja serwera
HTTP tak, aby przesyłał poprawne nagłówki ETag dla plików statycznych.

--
Adam Byrtek
http://adambyrtek.net

Sergiusz Rozanski

unread,
Dec 4, 2011, 10:46:08 AM12/4/11
to
Dnia 03.12.2011 Adam Byrtek <adamb...@gmail.com> napisał/a:
> On 12/02/2011 07:51 PM, Sergiusz Rozanski wrote:
>>> > Raczej to drugie, bo pierwsza opcja to wylewanie dziecka z kąpielą
>>> > (tracisz cały caching).
>> Ale to był właśnie taki cel aby pomijać cache i ładować zawsze nowy JS.
>
> Celem było pomijać cache jeśli kod uległ zmianie. Jaki sens miałoby
> ignorowanie go zupełnie i wydłużanie czasu ładowania strony?

Gdy browsery przychodzą po statyczne pliki i lecą z cache po 304 ...

> Nawiasem mówiąc, bardziej eleganckie rozwiązanie to konfiguracja serwera
> HTTP tak, aby przesyłał poprawne nagłówki ETag dla plików statycznych.

... to ww jest dobrym wyjściem.

Gorzej gdy już było źle i klienci nie przylatują po pliki w ogóle, nawet po
304. Wtedy jedyne rozwiązanie (na szybko) to zmiana pliku, parametru itd.
Oczywiście nie na stałe, ale do znalezienia problemu i jego rozwiązania
zasugerowałem skuteczny workaround.

Marek 'Qrczak' Potocki

unread,
Dec 5, 2011, 12:58:29 AM12/5/11
to
Dziękuję jeszcze raz z rady, podejrzę nagłówki.
Wprawdzie na tym serwerze pracuje lighttpd, a nie apache, ale to nie ma
raczej większego znaczenia.
Reply all
Reply to author
Forward
0 new messages