Jak programove vynutit stahnuti aktualnich js a css souboru

Honza.Mottl
Člen | 104
+
0
-

hledam zpusob jak programove vynutit stahnuti aktualnich js a css souboru. Cilem je, aby uzivatel mel z hlediska apikace ty aktualni verze (nikoliv podle nepredvidatelneho rozhodnuti browseru). A by uzivatel nemusel sam delat reload, protoze na to zapomene, i kdyz to bude mit na strance napsane. A nestahovat zbytecne.

Zatim jsem nasel rady typu

<script language="JavaScript" src="js/myscript.js?version=1"></script>

To ale v Chromiu zpusobi, ze se soubor reloaduje pokazde. Prece jen bych pokazde stahovat vse nechtel.

Jak to resite?

CZechBoY
Člen | 3608
+
+1
-

Idealne pri deployi unikatne pojmenovat minifikovanej soubor.

David Matějka
Moderator | 6445
+
0
-

To ale v Chromiu zpusobi, ze se soubor reloaduje pokazde.

tohle se mi nezda. nemas nahodou v development konzoli v chromiu vypnutou cache?

Honza.Mottl
Člen | 104
+
+1
-

Ne, cache vypnutou nemam. Ani jsem nevedel jak se to delal, dokud jsi mne na to neupozornil :)
Jakmile dam za jmeno js GET parametr, tak se necachuje. Stejne zkusenosti jsem nasel na stackoverflow. Bez GET parametru mi to cachuje.

Asi pujdu smerem unikatmi cesty jak navrhujes.
Aplikace je ve zkusebnim provozu a zmeny tam davam temer denne. Proto si musim co nejvice usetrit praci pri deploy. Musi to byt jednoduche:

  • udelam si promennou appVersion s verzi aplikace
  • ve vyvojove verzi to bude prazdny retezec
  • na testovacim serveru prejmenuji soubory css a js na {$appVersion}soubor.xxx a nastavim prislusne promennou
<link rel="stylesheet" href="{$basePath}/css/{$appVersion}pripad.css" type="text/css" />
<script src="{$basePath}/js/{$appVersion}form.js" type="text/javascript"></script>

Editoval Honza.Mottl (24. 9. 2017 13:53)

Honza.Mottl
Člen | 104
+
0
-

Nastaveni appVersion jsem si dal do local.config.neon, abych nemusel pri deploy zasahovat do kodu. Ted mi staci pri deploy:

  • nastavit appVersion v local.config.neon
  • nastavit prefixy js a css souboru
h4kuna
Backer | 740
+
+1
-

Já používám toto rozšíření

mike227
Člen | 5
+
+1
-

Premenovanie súborov je naozaj najlepší spôsob („query string“ robí často problémy).

Ja používam Gulp + n-asset-macro.

Editoval mike227 (24. 9. 2017 20:12)

JZechy
Člen | 161
+
+3
-

Já několikrát použil janmarek/webloader a v práci na projektu napsal zjednodušený vlastní WebLoader. Zkrátka při smazání cache všechny css a js minifikovat do jednoho souboru, dát mu unikátní název a vše je po každé distribuci unikátní.

Honza.Mottl
Člen | 104
+
0
-

Diky vsem. Query string je opravdu problematicky. Unikatni jmeno je dobra cesta.

Dan Hundrt
Člen | 74
+
-1
-

Já to reším tak, že si v metodě přečtu datum změny souboru:

	public function getFileVersion($file): int
	{
		if(file_exists($file)) {
			return filemtime($file);
		} else {
			return 0;
		}
	}

a v BasePresenteru v metodě beforeRender() volám:

$this->template->versionCSS = $this->getFileVersion(__DIR__ . '/www/css/main.min.css');
$this->template->versionJS = $this->getFileVersion(__DIR__ . '/www/js/main.min.js');

v latte poté:

<link href="{$basePath}/css/main.min.css?v={$versionCSS}" rel="stylesheet">
<script src="{$basePath}/js/main.min.js?={$versionJS}" async defer></script>
h4kuna
Backer | 740
+
0
-

Dan Hundrt napsal(a):

Což je query parametr a ten se tu nesetkal s přízní.

Dan Hundrt
Člen | 74
+
0
-

S query nemám problém, a to mám i immutable cache.