Jak odswizyc plik JS w przegladarce

0

Witam,

Mam tlumaczenie jezykow w pliku JS. Jak zmienia sie jezyk to zmienia sie zawartosc pliku JS. Moje pytanie jak moge zrobic cache bust tego pliku zaleznie od zmiany zawartosci. Na razie dolaczam jezyk do liku tj: translation.js?lang=pl_PL. Ale jezeli dodam np nowe tlumaczenie do tego pliku to przegladarka dalej bedzie ladowac stare tlumaczenie. Jak moge rozpoznac czy plik zostal zmieniony?

0

No jest taki stary patent - dodawanie jakiegoś oznaczenia wersji - np. translation.js?lang=pl_PL&ver=1001.

Ponieważ wpis umieściłeś w dziale PHP, więc zakładam, że strona nie jest statyczna, ale ją generujesz dynamicznie. W takim razie nie będzie problemem dołączenie do niej pliku JS (albo jakiegokolwiek innego - np. CSS) z odpowiednim dopiskiem wersjonizującym. Dopóki wersja się nie zmieni, przeglądarka powinna serwować plik z cache, a gdy wprowadzisz jakieś poprawki, to aktualizujesz url i wymuszasz w ten sposób reload.

Chociaż w sumie to możesz ten sam mechanizm zastosować do generowania nie tyle version string, co modyfikacji nazwy pliku. Po prostu - osadzasz plik tranlation_10001_pl.js, a później poprawiasz wersję w nazwie pliku. Oczywiście - można to zautomatyzować przy użyciu .htaccess i dynamicznego zwracania pliku JS, generowanego na podstawie jakiegoś pliku wejściowego.

0

Problem jest taki, ze nie moge w tym projekcie uzyc .htaccess. Druga sprawa wiem, ze moge dodac var na koniec query string, ale problem jest tego typu, ze ja mam 30 miejsc gdzie musze to dodac. Platforma to taki duzy sklep z malymi sklepikami. I kazdy mniejszy sklepik ma swoja szate graficzne. Wiec najlepiej generowac jakis hash na podstawie zmiany kontentu pliku JS. W sumie ten plik zwraca wylacznie JSON. Chce to zautomatyzowac. Bo jak ktos zapomnie zaktualizowac var to bedzie lipa.

0

Ponoc query string z nowa wersja pliku nie sa takie fajne. Maja zwalniac strone i czasem np z CDN moga w ogole nie zadzialac. Odrazdza sie uzywanie ?version=1001. Znacznie lepiej nadac nowa naze dla pliku albo zmienic path np mojplij2.js albo /ver2/mojplij.js. U mnie sam plik jest generowany przez PHP wiec moze da rade jakimis naglowkami wymusic cache buster'a? Testuje dalej...

0
  1. Kumpel podsuną mi pomysł, żeby zrobić hash z zawartości pliku przez md5 i dodać do JS linku.. W sumie fakt jak zawartość jest taka sama to zawsze bedzie zwracany taki sam hash. Tylko jak w takim pliku są setki, a moze i tysiące linji teksty to czy to nie zamuli strony?
  2. Ja wpladlem na pomysl, żeby po prostu przez cron job sprawdzać date modyfikacji plików z tłumaczeniami i zapisac ja w db/cache oraz dodawa timestamp do JS linka. Jeżeli coś było modyfikowanego niedawno to zmieniam timestamp w cache buster'a.

Jakie są Wasze opinie?

0

Możesz po prostu doklejać do wszystkich zmienianych plików JS ?t=liczbaSekundUniksowych. Wtedy nie musisz się martwić o każdorazową aktualizację numeru wersji.
Wada jest taka, że przeglądarka każdorazowo wczytuje te JS na nowo, nawet jak nic się w nich nie zmienia.

0

@Freja Draco Kiedy ja właśnie nie chcę odświeżać tego pliku za każdym razem.

2

Sam wiesz najlepiej jak masz napisany kod i jak go zautomatyzować. Ale z tego co zrozumiałem to chyba kręcisz się w kółko. Ja bym poświęcił trochę czasu i starał się to zautomatyzować.
Tłumaczenia najlepiej trzymać w bazie, nie musisz wtedy poprawiać 50 plików w 50 podprojektach.
Zrób sobie może tabelę "Translations" w niej jakieś kolumny typu language, key, translation, version. Oczywiście tu masz pole do popisu w zależności od potrzeb. Potem z takiej tabeli robisz sobie funkcje która szuka ostatniej wersji i rekordów dla danego języka.
Następnie parsujesz sobie te wartości na plik js mając jednocześnie najnowszą wersję pliku. Zamiast serwować statyczne linki generuj je dynamicznie poprzez funkcję zwracając nazwę pliku wraz z wersją z bazy.
Teraz masz wszystko w jednym miejscu. Przy odrobinie wysiłku możesz stworzyć łatwo panel do zarządzania translacjami aby nie trzeba było tego pisać np. w sql.
Masz kontrolę wersji.
Każdy projekt uzupełni się automatycznie. Zarówno o wersję w query string jak I samą zawartość.
Wada to oczywiście podpięcie jednej bazy do wielu projektów.

2

Można tak. Odświeżanie pliku przy każdej modyfikacji.

<? echo "./translation.js?lang=pl_PL&t=".filemtime('translation.js'); ?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1