Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: js z php - cache przeglądarki
Forum PHP.pl > Forum > PHP
nospor
Hejka,
dołączam skrypty js nie poprzez plik.js ale poprzez plik.php, czyli źródłem jest skrypt php, który generuje mi skrypty js
Dołączam to do strony standardowo:
  1. <script type="text/javascript" src="gzip.php"></script>

Plik gzip.php kompresuje mi pliki .js i wyrzuca do przeglądarki jako jedną skompresowaną treść
Rzucam oczywiście nagłówki
  1. $expires = 604800;
  2. header("Pragma: public");
  3. header("Cache-Control: maxage=".$expires);
  4. header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
  5. header('Content-Type: text/javascript');

Niestety taki js pobrany z php nie jest cachowany przez przeglądarkę. Za każdym razem przeglądarka leci po niego. Każdy normalnie wczytany .js jest cachowany mi przez przeglądarkę. Idzie jakoś temu zaradzić? Może w tych nagłowkach mam jakiś błąd?
flashdev
Powinno działać, ale skoro to nie działa, to może spróbuj zmienić rozszerzenie (gzip.js) i zrobić przekierowanie w .htacces.
nospor
@flashdev pomyślałem dokładnie o tym samym, jednak wolałem nic tu nie zmieniać i miałem nadzieję, że coś poradzicie bez takich kombinacji smile.gif
Jeśli jednak się nie da, to jak najbardziej przejdę na .js, jednak z pewnych podowdów wolałbym tego uniknąć.
flashdev
Kod
HTTP/1.1 200 OK
Date: Fri, 12 Nov 2010 12:09:42 GMT
Server: Power MOD by linuxpl.com mod_python/3.3.1 Python/2.5.2 mod_fastcgi/2.4.6 mod_wsgi/3.1 Phusion_Passenger/2.2.14 mod_fcgid/2.3.5
Last-Modified: Mon, 04 Oct 2010 10:58:03 GMT
Etag: "55c897e-db3-491c86b1704c0"
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 2033
Keep-Alive: timeout=5, max=10000
Connection: Keep-Alive
Content-Type: application/javascript


Sprawdziłem jakie nagłówki wyrzuca mój serwer dla plików js i jest tak jak powyżej.
Część z nich z Twojego punktu widzenia jest nieistotna, ale zostawiłem oryginał bez zmian.
nospor
Ja mam
Cytat
Date Fri, 12 Nov 2010 12:06:52 GMT
Server Apache/2.2.16 (Ubuntu)
X-Powered-By PHP/5.3.3-1ubuntu9.1
Pragma public
Cache-Control maxage=604800
Expires Fri, 19 Nov 2010 12:06:52 GMT
Content-Encoding gzip
Keep-Alive timeout=15, max=42
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/javascript

Jednak to nadal nie rozwiązuje mojego problemu winksmiley.jpg
flashdev
Google zwraca takie coś:
Kod
HTTP/1.1 304 Not Modified
Date: Fri, 12 Nov 2010 12:13:33 GMT
Expires: Fri, 26 Nov 2010 12:13:33 GMT
Age: 531
Server: GFE/2.0

Wydaje mi się, że Expires i ewentualnie Date powinno wystarczyć. Jesteś pewny, że cachowanie nie działa?
nospor
Cytat
Jesteś pewny, że cachowanie nie działa?
Tak.
Firebug zwraca:
Cytat
GET gzip.php 200 OK
GET inne.js 304 Not Modified (ten ma wlasnie te 9KB)

2 żądania

166.3 KB

(9 KB z bufora podręcznego)
114ms (onload: 1.63s)

Czyli widac ze js się scachowal, a php nie
flashdev
  1. <?php
  2. if( isset($_GET[js]) ){
  3. $expires = 604800;
  4. header("Pragma: public");
  5. header("Cache-Control: maxage=".$expires);
  6. header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
  7. header('Content-Type: text/javascript');
  8. if( empty($_SESSION[cnt]) ){
  9. $_SESSION[cnt] = 0;
  10. }
  11. ++$_SESSION[cnt];
  12. echo 'alert(\'witaj po raz '.$_SESSION[cnt].'\');';
  13. }else{
  14. ?>
  15. <script src="test.php?js=1" type="text/javascript"></script>
  16. test
  17. <?php
  18. }
  19. ?>


Napisałem prosty skrypt opierający się na Twoich nagłówkach.
Działa w Operze, FF i Chrome.

Edit:
Jedna istotna sprawa, której możliwe, że nie rozróżniasz:
Wciśnięcie F5, a wciśnięcie ENTER w pasku adresu nie są równoważne.
nospor
Cytat
Jedna istotna sprawa, której możliwe, że nie rozróżniasz:
Wciśnięcie F5, a wciśnięcie ENTER w pasku adresu nie są równoważne.
Ok. Faktycznie sprawa wygląda już ciut inaczej.

Nie mniej jednak nawet przy F5 skrypty js pisze ze siorbie z cache, a php nie:
Cytat
GET gzip.php 200 OK
GET inne.js 304 Not Modified (ten ma wlasnie te 9KB)

2 żądania 166.3 KB (9 KB z bufora podręcznego) 114ms (onload: 1.63s)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.