предисловие
13 ноября 2017 года, в n-й день, когда я начал свое путешествие по интерфейсу, я бродил в одиночестве возле своей спальни, встретил Ченг Джуна и пришел спросить меня: «Вы когда-нибудь писали немного о http-кэшировании? Что нет? Я сказал «нет», он предупредил меня, «ты еще немного напишешь, http cache должен быть очень рад познакомиться с тобой, ты сможешь узнать друг друга еще немного».
Но мне действительно нечего сказать. Я просто чувствую, что место, где я живу, нечеловеческое. Менеджеры по продукту недобры и используют программистов как крепких псов. Но настоящие программисты осмеливаются столкнуться с унылой зарплатой и с текущими ошибками. Что это за скорбящие и счастливые люди? Однако реконструкция часто рассчитана на посредственностей, использующих течение времени, чтобы смыть старые следы, оставив только бурные сверхурочные часы и безразличную грусть. В этом бурном овертайме и равнодушной печали людям приходится жить временно, поддерживая этот бесчеловечный мир. Я не знаю, когда этому миру придет конец!
А я все еще жил в таком мире, поэтому почувствовал необходимость что-то написать.
Кэширование тесно связано с оптимизацией производительности.На Zhihu есть ответ, который меня впечатлилКак разработать и внедрить интерфейсный код в крупной компании?В этом ответе описывается, как можно использовать кэширование для повышения производительности и экономии полосы пропускания на этапе развертывания.
1. Встреча
Встреча с мистером Кэшем произошла снежной ночью. Когда я увидел ее, я знал, что у нас будет история. Я был слишком застенчив, чтобы идти вперед, чтобы общаться с ней. Марк Бу - мой хороший друг, изначально им не был, с тех пор, как я увидел его в арбузном поле под луной с неописуемым, мы стали хорошими друзьями. Он сказал мне: "Не бойся, я создам для тебя обстановку, и ты сможешь сосредоточиться на своих делах. Но перед этим я немного расскажу тебе о Кэче-куне". очень счастлив.
- 200 : Нормальное общение.Каждый раз, когда вы что-то говорите, вы прокручиваете это в уме и находите подходящий вежливый ответ, чтобы ответить вам.
- 304: Она знает, чего вы хотите, но ей нужен мозг, чтобы дать своему телу команду, а затем предпринять соответствующие действия, чтобы дать вам то, что вы хотите. (согласование кеша)
- из кеша памяти или кеша диска: Хоум-раны предполагают, что инстинктивная реакция тела также является самой быстрой. (сильный кеш)
2. Общение
const http = require('http');
const fs = require('fs');
const path = require('path');
const server = http.createServer().listen(3000);
server.on('request',(req,res) => {
const url = path.join(__dirname,'static',req.url);
fs.readFile(url,(err,data) => {
//马克步对我说,你别管其他的,每次有静态请求
//就会执行这里的代码,读取文件然后返回出去。
//之后会在这里设置响应头
res.end(data);
})
});
Однако во время обмена это меня не радовало, она всегда относилась ко мне прохладно.
Сколько бы раз я с ней ни говорил, она всегда долго думает, прежде чем ответить мне, что меня очень огорчает. Тогда Марк Бу сказал мне: «Не расстраивайся, я установлю для тебя пароль, и каждый раз, когда ты будешь использовать этот пароль для общения с ней, это сделает твое общение более приятным. Есть два вида паролей. ."
//第一种 以资源内容hash为版本号
server.on('request',(req,res) => {
const url = path.join(__dirname,'static',req.url);
fs.readFile(url,(err,data) => {
//如果之前的请求在响应头里返回了Etag 那么这次请求就可以拿到
//req.headers['if-none-match'] == 之前响应头里的Etag
if(req.headers['if-none-match'] == 'hello'){
res.statusCode = 304;
res.end();
}else{
//响应头里设置Etag,下次请求的时候,会在请求头里加上If-None-Match
res.setHeader('Etag', 'hello');
res.end(data);
}
res.end(data);
})
});
Я снова поболтал с Кэшем Джуном.
//第二种 以资源修改时间为版本号
server.on('request',(req,res) => {
const url = path.join(__dirname,'static',req.url);
fs.readFile(url,(err,data) => {
//如果之前的请求在响应头里返回了Last-Modifiedtag 那么这次请求就可以拿到
//req.headers['if-modified-since'] == 之前响应头里的Last-Modified
if(req.headers['if-modified-since']){
res.statusCode = 304
res.end()
}else{
//在响应头里设置上次修改时间 必需为国际标准时间
res.setHeader('Last-Modified', new Date().toUTCString());
res.end(data);
}
res.end(data);
})
});
Мадам, я думаю. . .
Марк Бу лучше всех знает мои мысли, он сказал мне, что если вы хотите очень интимных отношений, вы можете установить время расставания.
server.on('request',(req,res) => {
const url = path.join(__dirname,'static',req.url);
fs.readFile(url,(err,data) => {
//设置缓存过期时间
res.setHeader('Cache-Control','max-age=5');
res.end(data);
})
});
Я медленно двинулся вперед с беспокойным сердцем.
Марк Бу подумал про себя: «Думаю, пяти секунд тебе должно хватить!»
Этот опыт
HTTP-кэш делится на:
- Сильный кеш --- в течение срока действия получать ресурсы напрямую с локального,Нет необходимости отправлять запрос.
- Weak Cache --- То же, что и выше, в течение срока действия. вне срока действиянужно отправить запрос, если он вернет 304, то продолжит использовать локальный кеш, если вернет 200, новая версия будет закэширована, а локальная версия будет выброшена.
Этот опыт действительно не питательный. Для более подробной информации, вот несколько предложений:
- Как разработать и внедрить интерфейсный код в крупной компании?
- Использование кэширования HTTP: Etag, Last-Modified и Cache-Control
- Анализ механизма кэширования браузера
- HTTP-кеш MDN
Лучше всего читать 1, 2, 3 по порядку и дополнять документацию MDN в процессе чтения.
На самом деле, Макбу не его настоящее имя. Однажды я спросил о его настоящем имени, и Макбу сказал: «Мое имя действительно грязное, потому что гадалка сказала, что мне не хватает земли, поэтому он сбалансировал имя для меня». Я думаю, подумав об истории Марка Бу и Си, он был удивлен: «Не говорите мне, что вас зовут», Марк Бу сказал: «У вас есть хорошая идея, меня зовутбудуар"