Archive for the ‘The Web’ Category

Как да предотвратим кеширането на swf файлове

октомври 8, 2007

И така историята продължава… След като ми омръзна да обяснявам на всеки втори потребител защо все още не вижда промените по своя уеб сайт и след като дори ме обвиниха в лъжа, реших да подходя кардинално по въпроса с кеширането.

Казано на възможно най-прост език, кеширането е измислено, за да се ускори разглеждането на уеб страниците (от времената, когато все още се използваше dial-up). Преди да направи заявка за дадена информация към сървъра, браузърът проверява дали тази информация не е била вече зареждана.  Ако е била, тя може да се зареди от кеша. Tова, от една страна осигурява бързина, а от друга – неприятни изненади – ако информацията междувременно е била променена.

За съжаление, не е възможно да се предвиди кога точно един браузър ще покаже обновената информация – това зависи от самия браузър, от настройките на потребителя, дори от сървъра.

Когато става въпрос за текстове или изображения, натискането на най-обикновен F5 или Ctrl+F5 помага. При зареждането на флаш файлове, най-сигурният начин е изчистването на кеша (което при различните браузъри става по-различен начин, но има еднакъв ефект).

Уви, не е възможно да обясняваш на куцо и сакато как да си изчисти кеша. Какво може да се направи в такъв случай?

1. Добавяне на HTML тагове:

<meta http-equiv=“Expires“ content=“Thu, 01 Dec 1994 16:00:00 GMT“>
<meta http-equiv=“Pragma“ content=“no-cache“ />
<meta http-equiv=“Cache-Control“ content=“no-cache“ />

2. С PHP хедъри:

header(„Content-Type: text/html; charset=utf-8“);
header(„Expires: Thu, 01 Dec 1994 16:00:00 GMT“);
header(„Last-Modified: „. gmdate(„D, d M Y H:i:s“). “ GMT“);
header(„Cache-Control: no-cache, must-revalidate“);
header(„Cache-Control: post-check=0, pre-check=0“, false);
header(„Pragma: no-cache“);

3. Използването на фалшив параметър с уникална стойност, предаван към флаша.

myflash.swf?p=<?=microtime();?>

Ако флаш файловете използват функции за зареждане на външни данни (LoadVars, loadVariables, loadMovie, getURL), тогава е необходимо да се предава фалшивия параметър при всяко извикване на тези функции.

var unique=new Date().getTime();
loadMovie(„myflash.swf?unique=“+unique,_root.container);

 

Все пак, ако не желаете файловете да се зареждат отново и отново вовеки веков, може да се направи проверка и след определен брой дни да не се изпълнява добавянето на параметъра.