Продолжается опрос по языкам программирования. Уже собрано почти 7000 ответов. Заполняйте анкету!
×Закрыть

Кеширование браузером JS

Как надежно отключить на сервере при помощи php?

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я сейчас динамически скрипты подгружаю, но открыто.
А это открывает новые возможности... developer.mozilla.org/...​e64_encoding_and_decoding

gist.github.com/...​mcoe/65810b2772990da44565
Отдавать из одной точки обработки запросов на версионные вещи в виде base64, а на стороне клиента в одной точке обработки подключать . Две точки также должны общаться между собой о ситуации у каждого. Например, json в запросе с кучей что у клиента, и сервер в том же формате чего у него + чего просили в base64. Только тут видать все в памяти браузера будете, без дискового кэша.

Как только прочитал, сразу подумал об webassembly. base64 с сервера + встроенный в браузер распаковщик и прощай всем понятный интерпретируемый код... Только проприетарные разработки. Прямиком с сервера. Защита высшего уровня для интеллектуальной собственности.

От обычного пользователя, возможно, но не более. Чуток больше времени на разбор полетов и анализа у того, кто захочет посмотреть на код. Глянь ещё на DHTMLX — библиотеку UI. Мне она зашла, чтоб всю логику на стороне клиента крутить, пригрузив рабочие станции, а сервер только для точек общения с базой. C ней получалось быстрее накидывать интерфейс и логику его работы. Дошел до того, что в бесплатной библиотеке правил код под свои хотелки, а то там не все мне подходило, хотелось поболее.Читал и правил их код после обфускации. Так что, если нужно, прочесть , вклиниться и изменить даже малочитабельный код не проблема. Запоминал точки и после новых версий, правил и в них. Это всего лишь время — больше или меньше.

Заголовки должны отдаваться:
Cache-Control: No-Cache или даже лучше Cache-Control: No-Store
Expires: (какая нибудь дата в прошлом)

У меня уже работает так, как ниже приведено, но все равно спасибо, потестирую и ваш вариант.

Хе-хе, а все хитро. Локально, когда девелоп версия, кеш нафиг, а вот когда продакт — залил на сайт для тучи пользователей там напротив:
В первый раз, в самый момент запуска новой версии необходимо старый кеш удалить то есть Expires а вот потом, после того как продакт тесты докажут что пользователь видит новую версию,
нужно вновь включить кеширование.
Вот такой алгоритм непростой. Так что есть еще куда кодить за кеширование.
А вот локально (чисто для себя и для быстрой разработки кеш почти не нужен)

Крайняя разработка по кешированию.
Вот загрузка скриптов.


function loadScript(url)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);
    
}

onload = () => {
    
    loadScript("js/main.js"+'?'+performance.now());
}

А вот загрузка изображений. Прочувствуйте разницу.


//....

let canvas = document.getElementById('canvas');
if(canvas !== null) {

       let context = canvas.getContext('2d');
       let img_url = xhr.response; 
       
      let img = new Image();
      img.onload = function()
       {
          
               context.drawImage(this,0,0);
                   
       }
       img.src = img_url+'?'+performance.now();
 }

Все настолько одинаково, что это наводит на мысли о баге engine

Внезапно обнаружил, что если добавить любую ошибку в обновленный скрипт, то если браузер не подхватывает новый скрипт, ошибки не происходит.

Да, ведь так можно принимать решение браузером относительно того, юзать кеш или не кеш. И если браузеры до сих пор путаются что им делать, наверное их разработчики не заметили вот как раз это самое «удивительно»
Если я не ошибаюсь.

Браузеры выполняют в точности все указания заголовков. Если браузеру сказали скешировать на год, он и не будет проверять. Это не относится только к Javascript — к любому запросу, отправляемому браузером.

Появился еще один вариант реализации кеширования. Если хранить скрипты и стили в ориентированном графе вассаби и подключать их на этапе превращения шаблона в готовую страницу html то можно контролировать имена файлов так, как это необходимо, чтобы всегда самая последняя версия подключалась.

На самом деле кешировать JS надо, и если проблема состоит в том, что на клиентах остаётся устаревший код после публикации новой версии, то решается это добавлением случайного хэша в имя JS файла. Это делается автоматически многими билд системами. От используемого языка программирования эта техника не зависит. Саму же стратегию кэширования правильно реализовывать с помощью response header Cache-Control.

Мое кеширование за ночь удалило скрипты и стили. Поржал. Исправил.

не мешай идиотам засирать копиями одного и того же файла жесткие диски пользователей. потом работа будет, job security же

Вот так сделал:

function rename_($n) {

		$path = $n;
		$arr2 = array();

			$arr = scandir($path);
			foreach($arr as $key => $value)
			{
				$dir = $arr[$key];
					
				if(is_dir($path.'/'.$dir)) continue;
				if($dir == ".ticket") continue;
				if(preg_match("/main.*[.]".$n."/",$dir)>0)
				{
					$txt = file_get_contents($path.'/'.$dir);
					$arr2[] = "".$path.'/'.$dir;
					
				}
								
			}
			
			if(count($arr)>5) {
					unlink($arr2[2]);
					unlink($arr2[3]);
			}
			
			$t = time();
			file_put_contents($path.'/main_'.$t.".$n",$txt);
			return $t;
		
}



А ты кого хотел тут увидеть? Путь в тысячу ли начинается с первого шага, но этот не мой путь. Я не программист, я видящий. Или ясновидящий, если хочешь. Увижу — вроде работает и записываю, пока в нави. А когда выхожу из нави, сам не понимаю, как оно работает. Навь и явь отношения между ними запутали все человечество. Я сам запутался в своем бреде и поэтому решил его поймать в нейронную сеть, где все отношения узаконены семантиками. М -> А ->М->А будет «мама» и все это знают. Но знают ли они, почему именно эти четыре буквы обозначают маму?

Олег, я б дуже хотів познайомитись із твоїм дилером.

Он в кино снимается. Морфеем зовут.

Прямо на HTTP сервере или в самом PHP сделай время кеширования, там чистый RTFM и копипаста. В том числе нулевое, если тебе ради тестирования.

На боевом серваке крайне нежелательно отключать кеширование, как только у тебя имеется сколь-либо ощутимая нагрузка. Куда проще сделать лишнюю переменную в ссылке, например &version=01, и уже по мере желания апдейтнуть файл на стороне юзера — накручиваешь эту версию. Здесь важно чтобы самый первый элемент в цепочке вызовов не кешировался (обычно это очень маленький файл), а лучше кешировался на непродолжительное время (например, 1 час) — и уже в нём будешь вызывать основной скрипт и накручивать версию.

Это самые азы highload: кеширование рулит всегда.

Забудь. Я зацепил очень сложную штуку, чтобы оставаться кодером. Я дилетант в этом.
А штука такая:
Существует ведь XML моделирование? А есть моделирование по типу MVC — мое — и вот каким образом оно работает:
У тебя есть начальный набор активных элементов. Это множество А1.
Выбор производится пользователем, выбор одного элемента из этого множества.
На элемент установлен триггер. Его срабатывание приводит к выводу отфильтрованного множества А2.
(Screen -> Click -> Result -> Next Screen, where any screen is set of activity)
Это предельно простая схема организации сетей и графов и графов сетей. Это гранты, гранты, гранты.
Я не шутил, когда предложил тебе организовать все это.
Сам я вижу это как генератор нейронных связей.
Чем абстрактнее схема тем большему количеству всякого разного она подходит.
Можно набросать азбуку, можно шахматы (со множеством записанных партий) можно мультиязычный сразу словарь.
Мне нужно 60 тысяч гривен — я ведь в долг работал лет пять. А пока у меня нет возможности и способностей кстати тоже, чтобы эту г_л_у_б_и_н_у осилить.
P.S.
Я читал Лукьяненко давно, может оттуда что-то и подхватилось.
P.P.S.
Это информационная бомба. Я в каком-то смысле террорист. Но как мне убедить-то?

Я зацепил очень сложную штуку, чтобы оставаться кодером

Инглиш?

Мне нужно 60 тысяч гривен

Мне тоже не помешают

Я ведь в долг работал лет пять.

Это как? Кто тебе этот долг дал? Это теперь его проблемы?
И если не секрет, что ж ты такое наработал за 5-то лет?

Вот это ruscorpora.ru можно будет загрузить в то, что я уже почти сделал.
И википедию тоже можно.
Я уже делал из миллиона строк сайт каталог. Но то было давно и сайт тот потерял мои доступы. А я его.

Тараканы у меня в голове решили что мне не нужно оформлять пенсию по инвалидности. Шизофреника не считают инвалидом, пока он ногами ходит и бреется.

И спасибо за азы, но я уже по горло сыт программированием. Я свой проект вижу уже целиком, но реализованным 100% не мной. И с модератором — специалистом по работе с трудными подростками (если речь пойдет только о моем многострадальном квесте).

Да это разве по горло? Ты и на полшишечки не влез в профессию. Тут этого дерьмища выше крыши, и акваланг не поможет.

В твоём случае вопрос решался гуглением в один тык.

Добавить рандомный хеш к имени файла / или query parameter ?Date.now(), но лучше имя файла

Пофиксил, спасибо. Использовал time()

Посмотрел, установил — не заработало. Не стал время тратить на вопрос — почему не заработало. Решил что проще по той же примерно схеме написать с 0 самому. Написал сам. Спасибо за материал.

Подписаться на комментарии