前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >web性能优化之:no-cache与must-revalidate深入探究

web性能优化之:no-cache与must-revalidate深入探究

作者头像
IMWeb前端团队
发布于 2019-12-06 10:37:54
发布于 2019-12-06 10:37:54
1.4K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载

引言

稍微了解HTTP协议的前端同学,相比对Cache-Control不会感到陌生,性能优化时经常都会跟它打交道。

常见的值有有privatepublicno-storeno-cachemust-revalidatemax-age等。

各个取值所代表的含义,网上总结挺多的,这里就不打算再进行逐一介绍,感兴趣的可以一起探讨交流。

本文仅挑no-cachemust-revalidate 这两个进行值进行探究对比。在项目实践中,这两个值用的比较多,也比较容易搞混。

Cache-Control: no-cache Cache-Control: max-age=60, must-revalidate

传送门:RFC2616关于Cache-Control首部的介绍。 如果对论证过程不感兴趣,也可以直接跳到“对比结论”小节查看结论。

no-cache、must-revalidate简介

  • no-cache: 告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。
  • must-revalidate:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。

上面的介绍涉及三个主体:浏览器缓存服务器源服务器。下面小节会简单进行介绍。

浏览器、缓存服务器、源服务器

  • 浏览器:资源请求直接发起方。
  • 源服务器:资源实际提供方。
  • 缓存服务器:在浏览器、源服务器之间架设的中间服务器,由它代替浏览器,向源服务器发起资源请求;

缓存服务器作用如下。缓存服务器不是必须的,浏览器可也可与源服务器直接通信。

加速资源访问速度,降低源服务器的负载。缓存服务器从源服务器获取资源,并返回给浏览器。此外,缓存服务器一般还会在本地保存资源的副本,当有相同的资源请求到来,缓存服务器可返回资源副本,以此提高资源访问速度。

对比测试场景、环境准备

对比测试场景

下文会通过以下两种场景的对比测试,来探究no-cachemust-revalidate的区别。

  1. 浏览器 直接访问 源服务器。
  2. 浏览器 通过 缓存服务器,间接访问 源服务器。

环境准备

  • 操作系统:OSX 10.11.4
  • 浏览器:Chrome 52.0.2743.116 (64-bit)、Firefox 49.0.2
  • 缓存服务器:Squid 3.6
  • 源服务器:Express 4.14.0

1、下载实验代码:可以访问github主页获取,也可通过git clone下载到本地。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/chyingp/tech-experiment.git
cd tech-experiment/2016.10.25-cache-control/
npm install

2、安装Squid,步骤略,下载地址

3、可选:启动Squid,并将本地http代理设置为Squid的ip和端口。

备注:测试场景“通过缓存服务器,间接访问源服务器资源”时,才需要这一步。

4、可选:将本地代理设置为Charles的地址,然后将Charles的代理地址设置为squid的代理地址。(避免浏览器开发者工具对request header的修改,干扰实验结果)

场景一:浏览器->源服务器

首先,通过以下脚本启动本地服务器(源服务器)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd connect-directly 
node server.js

Cache-Control: no-cache

用例1:二次访问,源服务器 上 资源 未发生变化

访问地址为:http://127.0.0.1:3000/no-cache

步骤一:第一次访问,返回内容如下。可以看到,返回了Cache-Control: no-cache

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-s0vwqaICscfrawwztfPIiA"
Date: Wed, 26 Oct 2016 07:46:28 GMT
Connection: keep-alive

步骤二:第二次访问,返回内容如下。返回状态码为304 Not Modified,表示经过校验,源服务器上的资源没有变化,浏览器可以采用本地副本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 304 Not Modified
X-Powered-By: Express
Cache-Control: no-cache
ETag: W/"b-s0vwqaICscfrawwztfPIiA"
Date: Wed, 26 Oct 2016 07:47:31 GMT
Connection: keep-alive

用例2:二次访问,源服务器 上 资源 发生变化

步骤一:访问地址为:http://127.0.0.1:3000/no-cache?change=1 备注:change=1告诉源服务器,每次访问都返回不同内容

步骤一:第一次访问,内容如下,不赘述。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-8n8r0vUN+mIIQCegzmqpuQ"
Date: Wed, 26 Oct 2016 07:48:01 GMT
Connection: keep-alive

步骤二:第二次访问,返回内容如下。注意Etag变化了,表示源服务器资源已发生变化。于是状态码为200 OK,源服务器返回新版本的资源给浏览器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 11
ETag: W/"b-0DK7Mx61dfZc1vIPJDSNSQ"
Date: Wed, 26 Oct 2016 07:48:38 GMT
Connection: keep-alive

Cache-Control: must-revalidate

访问地址:http://127.0.0.1:3000/must-revalidate 可选参数说明:

  • max-age:源站返回的内容,max-age是多少(单位是s)。
  • change:源站返回的内容,是否变化,如果是1,则变化。

用例1:二次访问,浏览器缓存未过期

访问地址:http://127.0.0.1:3000/must-revalidate?max-age=10 备注:max-age=10表示,希望资源缓存10s

步骤一:第一次访问,返回内容如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 200 OK
X-Powered-By: Express
Cache-Control: max-age=10, must-revalidate
Content-Type: text/html; charset=utf-8
Content-Length: 16
ETag: W/"10-dK948plT5cojN3y7Cy717w"
Date: Wed, 26 Oct 2016 08:06:16 GMT
Connection: keep-alive

步骤二:第二次访问(在10s内),如下截图所示,浏览器直接从本地缓存里读取资源副本,并没有重新发起HTTP请求。

用例2:二次访问,浏览器缓存已过期,源服务器 资源未变化

步骤一:第一次访问略过。第二次访问如下截图所示(10s后),返回304 Not Modified

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HTTP/1.1 304 Not Modified
X-Powered-By: Express
Cache-Control: max-age=10, must-revalidate
ETag: W/"10-dK948plT5cojN3y7Cy717w"
Date: Wed, 26 Oct 2016 08:09:22 GMT
Connection: keep-alive

用例3:浏览器缓存已过期,源服务器 资源 已变化

访问地址:http://127.0.0.1:3000/must-revalidate?max-age=10&change=1

步骤一:第一次访问,截图如下。

步骤二:第二次访问(10s后),返回截图如下,可以看到返回了200

场景2:浏览器->缓存服务器->源服务器

从上面的对比实验已经知道,在不经过缓存服务器的情况下,no-cachemust-revalidate在缓存校验方面的差别。

接下来,我们再看下,引入缓存服务器后,二者表现的差异点。

备注:下文我们会通过查看Squid的访问日志,来确认缓存服务器的行为。这里对日志中的几个关键字先粗略解释下:

  • TCP_MISS:没有命中缓存。有可能是缓存服务器不存在资源的副本,也有可能资源副本已过期。
  • TCP_MEM_HIT:命中了缓存。缓存服务器存在资源的副本,并且副本未过期。

再次贴上之前的图。

Cache-Control: no-cache

用例1:chrome第一次访问资源

chrome访问截图如下:200 ok

squid日志:TCP_MISS,表示没有命中本地资源副本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1477501799.573     17 127.0.0.1 TCP_MISS/200 299 GET http://127.0.0.1:3000/no-cache - HIER_DIRECT/127.0.0.1 text/html

用例2:chrome再次访问该资源。且源服务器上,该资源未变化

访问地址:http://127.0.0.1:3000/no-cache

第一次访问略。第二次访问,chrome访问截图如下:

squid访问日志如下:TCP_MISS/304 。表示缓存服务器 联系了 源服务器,发现内容没变化,于是返回304。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1477501987.785      1 127.0.0.1 TCP_MISS/304 238 GET http://127.0.0.1:3000/no-cache - HIER_DIRECT/127.0.0.1 -

用例3:chrome再次访问该资源。且源服务器上,该资源已变化

访问地址:http://127.0.0.1:3000/no-cache?change=1 备注:change=1 表示强制每次访问源服务器,返回的资源都是新的。

第一次访问略。第二次访问,chrome截图如下,状态码为200

从squid日志来看,缓存服务器 访问 源服务器,并返回200给浏览器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1477647837.216      1 127.0.0.1 TCP_MISS/200 299 GET http://127.0.0.1:3000/no-cache? - HIER_DIRECT/127.0.0.1 text/html

Cache-Control: must-revalidate

用例1:缓存服务器 已存在 资源副本,且该资源副本 未过期

访问地址:http://127.0.0.1:3000/must-revalidate?max-age=900 备注:max-age=900表示资源有效期是900s

步骤一:

chrome第一次访问 该资源,缓存服务器上没有该资源副本,于是访问源服务器。最终,缓存服务器给浏览器返回200。此时,缓存服务器squid上有了资源的副本。

步骤二:

firefox第一次访问 该资源(900s内)。缓存服务器上已有该资源副本,且该副本未过期。于是,缓存服务器给firefox返回该资源副本,且状态码为200。(缓存命中)

为了验证步骤二中,缓存服务器 返回的是本地资源的副本,查看squid日志。其中,第二条就是firefox的访问记录,TCP_MEM_HIT/200表示命中本地缓存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1477648947.594      5 127.0.0.1 TCP_MISS/200 325 GET http://127.0.0.1:3000/must-revalidate? - HIER_DIRECT/127.0.0.1 text/html
1477649012.625      0 127.0.0.1 TCP_MEM_HIT/200 333 GET http://127.0.0.1:3000/must-revalidate? - HIER_NONE/- text/html

用例2:缓存服务器 已存在 资源副本,该资源副本已过期,但源服务器上 资源未改变

访问链接:http://127.0.0.1:3000/must-revalidate?max-age=10

用chrome先后访问该资源,其间间隔超过10s。第二次访问时,chrome收到响应如下。

查看squid日志。可以看到,状态为TCP_MISS/304,表示本地副本已过期,跟源服务器进行校验,发现源服务器上资源未改变。于是,给浏览器返回304。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1477649429.105     11 127.0.0.1 TCP_MISS/304 258 GET http://127.0.0.1:3000/must-revalidate? - HIER_DIRECT/127.0.0.1 -

用例3:缓存服务器 已存在 资源副本,该资源副本 已过期,但源服务器上 资源已改变

访问地址:http://127.0.0.1:3000/must-revalidate?max-age=10&change=1

用chrome先后访问该资源,其间间隔超过10s。第二次访问时,chrome收到响应如下

squid日志如下,状态都是TCP_MISS/200,表示没有命中缓存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1477650702.807      8 127.0.0.1 TCP_MISS/200 325 GET http://127.0.0.1:3000/must-revalidate? - HIER_DIRECT/127.0.0.1 text/html

1477651020.516      4 127.0.0.1 TCP_MISS/200 325 GET http://127.0.0.1:3000/must-revalidate? - HIER_DIRECT/127.0.0.1 text/html

对比结论

以下针对的都是浏览器第n次访问资源。(n>1)

不考虑缓存服务器

首部

本地缓存是否过期

源服务器资源是否改变

是否重新校验

状态码

no-cache

不确定

304

no-cache

不确定

200

must-revalidate

是/否

200(来自浏览器缓存)

must-revalidate

304

must-revalidate

200

考虑缓存服务器

首部

本地缓存是否过期

缓存服务器副本是否过期

源服务器资源是否改变

是否重新校验

状态码

no-cache

不确定

不确定

304

no-cache

不确定

不确定

200

must-revalidate

是/否

是/否

200(来自浏览器缓存)

must-revalidate

是/否

304(来自缓存服务器)

must-revalidate

304

must-revalidate

200

写在后面

经过一轮对比测试,发现no-cachemust-revalidate这两个值还是蛮有意思的。实际上,由于篇幅原因,这里还有一些内容尚未进行对比实验。比如:

  • must-revalidateno-cachemax-stale一起使用时的表现。
  • no-cachemax-age=0, mustvalidate的区别。
  • no-chche制定具体的字段名时,跟不指明具体字段名时,缓存校验行为上的区别。
  • proxy-revalidatemust-revalidate的区别。
  • 缓存服务器本身优化算法对实验结果的影响。

对比实验过程比较枯燥繁琐,如有不严谨或错漏的地方,敬请指出 :)

这里留个经常会碰到的问题,供读者探讨:no-cachemax-age=0, mustvalidate的区别。

相关链接

RFC2616 14.9: Cache-Control https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-10-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
RS(2)--从文本数据到用户画像
用户画像其实就是从海量的用户数据中,建模抽象出来每个用户的属性标签体系,这些属性通常需要具有一定的商业价值。
kbsc13
2020/03/25
1.4K0
自然语言处理技术(NLP)在推荐系统中的应用
个性化推荐是大数据时代不可或缺的技术,在电商、信息分发、计算广告、互联网金融等领域都起着重要的作用。具体来讲,个性化推荐在流量高效利用、信息高效分发、提升用户体验、长尾物品挖掘等方面均起着核心作用。在推荐系统中经常需要处理各种文本类数据,例如商品描述、新闻资讯、用户留言等等。具体来讲,我们需要使用文本数据完成以下任务: 候选商品召回。候选商品召回是推荐流程的第一步,用来生成待推荐的物品集合。这部分的核心操作是根据各种不同的推荐算法来获取到对应的物品集合。而文本类数据就是很重要的一类召回算法,具有不依赖用户
CSDN技术头条
2018/02/13
3.7K0
自然语言处理技术(NLP)在推荐系统中的应用
NLP关键词提取方法总结及实现
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 一、关键词提取概述 关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作。 从算法的角度来看,关键词提取算法主要有两类:无监督关键词提取方法和有监督关键词提取方法。 1、无监督关键词提取方法 不需要人工标注的语料,利用某些方法发现文本中比较重要的词作为关键词,进
机器学习AI算法工程
2022/03/31
10.1K0
NLP关键词提取方法总结及实现
nlp 关键词提取_nlp信息抽取
关键词是能够表达文档中心内容的词语,常用于计算机系统标引论文内容特征、信息检索、系统汇集以供读者检阅。关键词提取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础性工作。
全栈程序员站长
2022/09/29
1.1K0
nlp 关键词提取_nlp信息抽取
推荐系统实践系列 | 一、推荐系统流程设计
推荐系统主要解决的是信息过载问题,目标是从海量物品筛选出不同用户各自喜欢的物品,从而为每个用户提供个性化的推荐。推荐系统往往架设在大规模的业务系统之上,不仅面临着用户的不断增长,物品的不断变化,而且有着全面的推荐评价指标和严格的性能要求(Netflix 的请求时间在 250 ms 以内,今日头条的请求时间在 200ms 以内),所以推荐系统很难一次性地快速计算出用户所喜好的物品,再者需要同时满足准确度、多样性等评价指标。
张小磊
2020/04/20
2.2K0
标签体系下的用户画像建设小指南
用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。通俗说就是给用户打标签,而标签是通过对用户信息分析而来的高度精炼的特征标识。通过打标签可以利用一些高度概括、容易理解的特征来描述用户,可以让人更容易理解用户,并且可以方便计算机处理。
王知无-import_bigdata
2021/07/12
4.5K0
标签体系下的用户画像建设小指南
基于Spark的大数据精准营销中搜狗搜索引擎的用户画像挖掘
转载请注明:转载 from http://blog.csdn.net/u011239443/article/details/53735609 from CCF举办的“大数据精准营销中搜狗用户画像
小爷毛毛_卓寿杰
2018/04/18
3.2K0
基于Spark的大数据精准营销中搜狗搜索引擎的用户画像挖掘
基于大数据的用户画像构建小百科全书
用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。通俗说就是给用户打标签,而标签是通过对用户信息分析而来的高度精炼的特征标识。通过打标签可以利用一些高度概括、容易理解的特征来描述用户,可以让人更容易理解用户,并且可以方便计算机处理。
Spark学习技巧
2021/03/05
1.3K0
基于大数据的用户画像构建小百科全书
一文全面了解基于内容的推荐算法
这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例。
AI科技大本营
2019/07/12
5.1K0
一文全面了解基于内容的推荐算法
技术干货 | 如何做好文本关键词提取?从三种算法说起
在自然语言处理领域,处理海量的文本文件最关键的是要把用户最关心的问题提取出来。而无论是对于长文本还是短文本,往往可以通过几个关键词窥探整个文本的主题思想。与此同时,不管是基于文本的推荐还是基于文本的搜索,对于文本关键词的依赖也很大,关键词提取的准确程度直接关系到推荐系统或者搜索系统的最终效果。因此,关键词提取在文本挖掘领域是一个很重要的部分。 关于文本的关键词提取方法分为有监督、半监督和无监督三种: 1 有监督的关键词抽取算法 它是建关键词抽取算法看作是二分类问题,判断文档中的词或者短语是或者不是关键词
达观数据
2018/04/02
5.6K0
技术干货 | 如何做好文本关键词提取?从三种算法说起
数据分析:文本分类
本章节中所涉及的知识点偏向于机器学习的范畴,那么机器学习和数据分析有什么区别呢。简单来讲,数据分析是少量数据采样分析而机器学习是海量数据全部分析。比较好的理解一点是,数据分析会总结过去已经发生的事情,而机器学习是为了预测未来发生的事情。这两者也是有相辅相成的关系。我们可以通过机器学习预测的结果,进行数据分析,得到一个相对准确的结论,辅助人们进行决策判断等等。
马拉松程序员
2023/09/02
4010
数据分析:文本分类
独家 | 一文读懂推荐系统知识体系-上(概念、结构、算法)
本文主要阐述: 推荐系统的3个W 推荐系统的结构 推荐引擎算法 浏览后四章的内容请见下篇。 1. 推荐系统的3个W 1.1 是什么(What is it?) 推荐系统就是根据用户的历史行为、社交关系、
数据派THU
2018/03/26
3.5K0
独家 | 一文读懂推荐系统知识体系-上(概念、结构、算法)
百度NLP | Familia:开源的中文主题模型应用工具包
机器之心专栏 作者:百度NLP 本期百度NLP 专栏介绍了百度开源的中文主题模型应用工具包 Familia。在本文中,作者结合 Familia 汇总主题模型在工业界的一些典型应用案例,方便开发者按图索骥,找到适合自己任务的模型以及该模型的应用方式。 主题模型是文本挖掘的重要工具,近年来在学术界和工业界都获得了非常多的关注。虽然学术界的研究人员提出了多种多样的主题模型来适应不同的场景,这些工作主要集中在「建模」层面,即设计合理的模型来适配各色各样的数据,而指导主题模型在工业场景「落地」的资源和文
机器之心
2018/05/09
2.1K0
(二)中文文本分类--机器学习算法原理与编程实践 - 简书
本章知识点:中文分词,向量空间模型,TF-IDF方法,文本分类算法和评价指标 使用的算法:朴素的贝叶斯算法,KNN最近邻算法 python库:jieba分词,Scikit-Learning 本章目标:实现小型的文本分类系统 本章主要讲解文本分类的整体流程和相关算法
会呼吸的Coder
2020/02/17
1.5K0
神策杯 2018高校算法大师赛(个人、top2、top6)方案总结
神策数据推荐系统是基于神策分析平台的智能推荐系统。它针对客户需求和业务特点,并基于神策分析采集的用户行为数据使用机器学习算法来进行咨询、视频、商品等进行个性化推荐,为客户提供不同场景下的智能应用,如优化产品体验,提升点击率等核心的业务指标。 神策推荐系统是一个完整的学习闭环。采集的基础数据,通过机器学习的算法模型形成应用。效果实时验证,从而指导添加数据源,算法优化反馈形成一个全流程、实时、自动、可快速迭代的推荐闭环。
致Great
2021/01/13
1.4K0
【数据分析思维】能落地的用户画像长啥样?
用户画像,大数据时代老生常谈且又长久不衰的话题,公司都在搞,文章满天飞,在这个人人都喊“数据驱动业务”的时代,你不懂用户画像,不搞用户画像,你都不好意思跟别人聊(chui)业(niu)务(pi)。
数据万花筒
2021/07/05
1.1K0
【数据分析思维】能落地的用户画像长啥样?
文本分类指南:你真的要错过 Python 吗?
文本分类作为自然语言处理任务之一,被广泛应用于解决各种商业领域的问题。文本分类的目的是将 文本/文档 自动地归类为一种或多种预定义的类别。常见的文本分类应用如下:
AI研习社
2018/07/26
2.4K0
文本分类指南:你真的要错过 Python 吗?
如何构建基于内容的推荐系统
基于内容的推荐,最重要的不是推荐算法,而是内容分析。内容分析得越深入,哪怕最开始使用人为定制的规则也能起到不错的效果。
abs_zero
2018/04/11
1.8K0
如何构建基于内容的推荐系统
NLP概述和文本自动分类算法详解 | 公开课笔记
文本挖掘任务大致分为四个类型:类别到序列、序列到类别、同步的(每个输入位置都要产生输出)序列到序列、异步的序列到序列。
用户1737318
2019/11/19
1.8K0
NLP概述和文本自动分类算法详解 | 公开课笔记
如何对非结构化文本数据进行特征工程操作?这里有妙招!
文本数据通常是由表示单词、句子,或者段落的文本流组成。由于文本数据非结构化(并不是整齐的格式化的数据表格)的特征和充满噪声的本质,很难直接将机器学习方法应用在原始文本数据中。在本文中,我们将通过实践的方法,探索从文本数据提取出有意义的特征的一些普遍且有效的策略,提取出的特征极易用来构建机器学习或深度学习模型。 研究动机 想要构建性能优良的机器学习模型,特征工程必不可少。有时候,可能只需要一个优秀的特征,你就能赢得 Kaggle 挑战赛的胜利!对于非结构化的文本数据来说,特征工程更加重要,因为我们需要将文
AI研习社
2018/03/16
2.4K0
如何对非结构化文本数据进行特征工程操作?这里有妙招!
推荐阅读
相关推荐
RS(2)--从文本数据到用户画像
更多 >
LV.0
交警大队辅警
目录
  • 引言
  • no-cache、must-revalidate简介
  • 浏览器、缓存服务器、源服务器
  • 对比测试场景、环境准备
    • 对比测试场景
    • 环境准备
  • 场景一:浏览器->源服务器
    • Cache-Control: no-cache
    • Cache-Control: must-revalidate
  • 场景2:浏览器->缓存服务器->源服务器
    • Cache-Control: no-cache
    • Cache-Control: must-revalidate
  • 对比结论
    • 不考虑缓存服务器
    • 考虑缓存服务器
  • 写在后面
  • 相关链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档