⑴ iOS web缓存策略以及手动清除缓存
当我们使用webview加载html资源时,本质上就是向服务器索取资源的http请求过程,如果我们不注意资源的缓存策略的话,就可能会造成这样那样的问题,比如:实时性要求较高的功能却老是走缓存不更新,有些基本不会变动的页面却又每次都重新去服务器拉请求。
iOS自带的缓存策略,提供了一个内存和磁盘混合的缓存,一共有7种缓存策略,使用较多的是其中的四种( 下方编号1,2,5,6 )
上面介绍了iOS自带的缓存控制 NSURLRequestCachePolicy ,也说到当 NSURLRequestCachePolicy 设为默认的 时,主要是根据http的缓存策略来决定是否使用缓存。
那么就简单的介绍一下,http的缓存控制和缓存校验。
在http中,控制缓存开关的字段有两个,Pragma和Cache-Control
Pragma有两个字段no-cache和expires,当pragma为no-cache时表示禁用缓存,expires的值是一个GMT时间,表示该缓存的有效时间。但是已经被逐步抛弃了,有些网站为了向下兼容还保留了这两个字段。
Cache-Control除了在响应中使用,在请求中也可以使用。
在请求中使用,Cache-Control可选的值有:
在响应中使用,Cache-Control可选的值有:
在缓存中,我们需要一个机制来验证缓存是否有效。比如服务器的资源更新了,客户端需要及时刷新缓存;又或者客户端的资源过了有效期,但服务器上的资源还是旧的,此时不需要重新发送。缓存校验就是用来解决这些问题的,在http1.1中,主要关注下 Last-Modified 和 etag 这两个字段。
服务端在返回资源时,会将该资源的最后更改时间通过 Last-Modified 字段返回给客户端。客户端下次请求时通过 If-Modified-Since 或者 If-UnModified-Since 带上 Last-Modified ,服务端检查该时间是否与服务器的最后修改时间一致:如果一致,则返回304状态码,不反悔资源;如果不一致,则返回200和修改后的资源,并带上新的时间。
单纯的以修改时间来判断还是有缺陷,比如文件的最后修改时间变了,但内容没变。对于这样的情况,我们可以使用etag来处理。
etag的方式是这样:服务器通过某个算法对资源进行计算,取得一串值(类似于文件的md5值),之后将该值通过etag返回给客户端,客户端下次请求时通过If-None-Match或If-Match带上该值,服务器对该值进行对比校验:如果一致则不要返回资源。
当我们的webview缓存到一定的峰值的时候,需要手动的清除一下wenview的缓存,方法如下:
找出web缓存的路径,清空该路径
webKit除了清除缓存的API
觉得有用,请帮忙点亮红心
Better Late Than Never!
努力是为了当机会来临时不会错失机会。
共勉!
⑵ 认识HTTP----缓存篇
本文内容大多参考 《图解HTTP》一书
所以讲缓存为什么要先扯代理服务器?别急,让我们看一下一个请求的简单示意图。
我们看到客户端(用户)发送了一个请求并不是直接发给源服务器的而是经过了代理服务器,然后经由代理服务器再发送给源服务器,响应也同样遵循这个顺序。
那么代理服务器在这中间担任了什么角色?
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
缓存服务器是代理服务器的一种,并归类在缓存代理类型中。换句话说,当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本。
缓存服务器的优势在于利用缓存可避免多次从源服务器转发资源。因此客户端可就近从缓存服务器上获取资源,而源服务器也不必多次处理相同的请求了。
即便缓存服务器和客户端内有缓存,也不能每次都给我返回缓存吧,如果是这样,源服务器更新了我也不知道,因为我每次都是看缓存的资源。
为了解决这个问题,针对缓存设计了时效性的概念:
即使存在缓存,也会因为客户端的要求、缓存的有效期等因素,向源服务器确认资源的有效性。若判断缓存失效,缓存服务器将会再次从源服务器上获取“新”资源。
缓存不仅可以存在于缓存服务器内,还可以存在客户端浏览器中。以Internet Explorer 程序为例,把客户端缓存称为临时网络文件(Temporary Internet File)。
浏览器缓存如果有效,就不必再向服务器请求相同的资源了,可以直接从本地磁盘内读取。
另外,和缓存服务器相同的一点是,当判定缓存过期后,会向源服务器确认资源的有效性。若判断浏览器缓存失效,浏览器会再次请求新资源。
Pragma 是HTTP/1.1 之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义。
规范定义的形式唯一,如下所示。
Pragma: no-cache
该首部字段属于通用首部字段,但只用在客户端发送的请求中。客户端会要求所有的中间服务器不返回缓存的资源。
通过指定首部字段Cache-Control 的指令,就能操作缓存的工作机制。
可用的指令按请求和响应分类如下所示:
public指令
Cache-Control: public
当指定使用public 指令时,则明确表明其他用户也可利用缓存。
private指令
no-store指令
Cache-Control: no-store
当使用no-store 指令时,暗示请求(和对应的响应)或响应中包含机密信息。
因此,该指令规定缓存不能在本地存储请求或响应的任一部分。
ps:从字面意思上很容易把no-cache误解成为不缓存,但事实上no-cache代表不缓存过期的资源,缓存会向源服务器进行有效期确认后处理资源,也许称为do-not-serve-from-cache-without-revalidation更合适。no-store 才是真正地不进行缓存,请读者注意区别理解。
s-maxage指令
Cache-Control: s-maxage=604800 //(单位:秒)
s-maxage 指令的功能和max-age 指令的功能相同, 它们的不同点是s-maxage 指令只适用于供多位用户使用的公共缓存服务器(这里指代理服务器)。也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用。
另外,当使用s-maxage 指令后,则直接忽略对Expires 首部字段及max-age 指令的处理。
max-age指令
cache-extension token
Cache-Control: private, community="UCI"
通过 cache-extension 标记(token),可以扩展Cache-Control 首部字段内的指令。
如上例,Cache-Control 首部字段本身没有community 这个指令。借助extension tokens 实现了该指令的添加。如果缓存服务器不能理community 这个新指令,就会直接忽略。因此,extension tokens 仅对能理解它的缓存服务器来说是有意义的。
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT
首部字段If-Unmodified-Since 和首部字段If-Modified-Since 的作用相反。它的作用的是告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。如果在指定日期时间后发生了更新,则以状态码412 Precondition Failed 作为响应返回。
ps:Last-Modified 存在一定问题,如果在服务器上,一个资源被修改了,但其实际内容根本没发生改变,会因为Last-Modified时间匹配不上而返回了整个实体给客户端(即使客户端缓存里有个一模一样的资源)。
首部字段If-None-Match 属于附带条件之一。它和首部字段If-Match 作用相反。用于指定If-None-Match 字段值的实体标记(ETag)值与请求资源的ETag 不一致时,它就告知服务器处理该请求。
在GET 或HEAD 方法中使用首部字段If-None-Match 可获取最新的资源。因此,这与使用首部字段If-Modified-Since 时有些类似。
不与服务器确认,而是直接使用浏览器缓存的内容。其中响应内容和之前的响应内容一模一样,例如其中的Date时间是上一次响应的时间。
F5的作用和直接在URI输入栏中输入然后回车是不一样的,F5会让浏览器无论如何都发一个HTTP Request给Server,即使先前的响应中有Expires头部。
Ctrl+F5要的是彻底的从Server拿一份新的资源过来,所以不光要发送HTTP request给Server,而且这个请求里面连If-Modified-Since/If-None-Match都没有,这样就逼着Server不能返回304,而是把整个资源原原本本地返回一份,这样,Ctrl+F5引发的传输时间变长了,自然网页Refresh的也慢一些。
Cache-Control 是 HTTP1.1 才有的,不适用于 HTTP1.0,而 Expires 既适用于 HTTP1.0,也适用于 HTTP1.1,所以说在大多数情况下同时发送这两个头会是一个更好的选择,当客户端两种头都能解析的时候,会优先使用 Cache-Control。
二者都是通过某个标识值来请求资源, 如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed)状态码,内容为空,这样就节省了传输数据量。当资源变化后则返回新资源。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
其中Last-Modified使用文件最后修改作为文件标识值,它无法处理文件一秒内多次修改的情况,而且只要文件修改了哪怕文件实质内容没有修改,也会重新返回资源内容;ETag作为“被请求变量的实体值”,其完全可以解决Last-Modified头部的问题,但是其计算过程需要耗费服务器资源。
Expires和Cache-Control都有一个问题就是服务端的修改,如果还在缓存时效里,那么客户端是不会去请求服务端资源的(非刷新),这就存在一个资源版本不符的问题,而强制刷新一定会发起HTTP请求并返回资源内容,无论该内容在这段时间内是否修改过;而Last-Modified和Etag每次请求资源都会发起请求,哪怕是很久都不会有修改的资源,都至少有一次请求响应的消耗。
对于所有可缓存资源,指定一个Expires或Cache-Control max-age以及一个Last-Modified或ETag至关重要。同时使用前者和后者可以很好的相互适应。
前者不需要每次都发起一次请求来校验资源时效性,后者保证当资源未出现修改的时候不需要重新发送该资源。而在用户的不同刷新页面行为中,二者的结合也能很好的利用HTTP缓存控制特性,无论是在地址栏输入URI然后输入回车进行访问,还是点击刷新按钮,浏览器都能充分利用缓存内容,避免进行不必要的请求与数据传输。
做法很简单,就是把可能会更新的资源以版本形式发布,常用的方法是在文件名或参数带上一串md5或时间标记符:
可以看到上面的例子中有不同的做法,有的在URI后面加上了md5参数,有的将md5值作为文件名的一部分,有的将资源放在特性版本的目录中。
那么在文件没有变动的时候,浏览器不用发起请求直接可以使用缓存文件;而在文件有变化的时候,由于文件版本号的变更,导致文件名变化,请求的url变了,自然文件就更新了。这样能确保客户端能及时从服务器收取到新修改的文件。通过这样的处理,增长了静态资源,特别是图片资源的缓存时间,避免该资源很快过期,客户端频繁向服务端发起资源请求,服务器再返回304响应的情况(有Last-Modified/Etag)。
⑶ 【微信小程序】本地缓存
本地缓存官方讲解:
https://developers.weixin.qq.com/miniprogram/dev/api/data.html#wxsetstorageobject
演示视屏可以关注公微信订阅号查看(Rabbit_svip)。
样式随便写,主要留意功能。
页面结构
【app.json】
【login.wxml】
【login.js】
【index.wxml】
【index.js】
先看看【app.json】,在pages里面,要把login放在第一,这样在小程序打开的时候,就会先打开login.wxml这个页面。
【login.wxml】页面,第二行的<form>标签里,要加bindsubmit。
这是微信官方文档上写明的事件。在<form>表单提交时,会携带<form>中的数据出发submit事件。
在使用bindsubmit时,记得在input元素上面写明“name”属性。
可以试试,查看一下控制台输出的值。
【login.js】
在点击登录提交表单后,如果登录成功,用wx.setStorage(),把用户名临时存储起来。
存储完成后,跳转页面。用到 wx.redirectTo
用 wx.redirectTo 进行跳转,是没有返回上一层的路径的。
在login.js这个页面中,用到 onLoad 这个函数(第107行)。作用是监听页面加载。
onLoad里面,用到 wx.getStorage 这个API。作用是检测本地缓存,看看是否有对应的key指定的值。如果有,则调用 success 这个回调函数。
【index.js】
这个页面设置了一个清除本地缓存的button。
用到 wx.removeStorage 这个API。
这里只要指定key值就行。这样就可以删除掉对应的缓存。
删除成功后,执行 success 回调函数。
⑷ 浏览器缓存原理简述
缓存文件存储方式有2种:内存和硬盘。为了提高文件读取速度,浏览器优先读内存中的缓存文件(如果存在的话)。
按照本地缓存阶段和协商缓存阶段分类:
缓存的策略由http消息头Cache-Control确定,以下为各个值对应的效果:
Cache-Control:public :所有内容都将被缓存(客户端和代理服务器都可缓存)
Cache-Control:private :所有内容只有客户端可以缓存
Cache-Control:no-cache :默认值。客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
Cache-Control:no-store :所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
Cache-Control:max-age=xxx (xxx is numeric) :缓存内容将在xxx秒后失效
HTTP1.0 的特性,标识该资源过期的时间点,它是一个绝对值,格林威治时间(Greenwich Mean Time, GMT),即在这个时间点之后,缓存的资源过期; 优先级:Cache-Control 优先级高于 Expires ,为了兼容,通常两个头部同时设置;浏览器默认行为:其实就算 Response Header 中没有设置 Cache-Control 和 Expires,浏览器仍然会缓存某些资源,这是浏览器的默认行为,是为了提升性能进行的优化,每个浏览器的行为可能不一致,有些浏览器甚至没有这样的优化。
Last-Modified (Response Header)与 If-Modified-Since (Request Header)是一对报文头,属于 http 1.0。
If-Modified-Since 是一个请求首部字段,并且只能用在 GET 或者 HEAD 请求中。Last-Modified 是一个响应首部字段,包含服务器认定的资源作出修改的日期及时间。当带着 If-Modified-Since 头访问服务器请求资源时,服务器会检查 Last-Modified,如果 Last-Modified 的时间早于或等于 If-Modified-Since 则会返回一个不带主体的 304 响应,否则将重新返回资源。
ETag 与 If-None-Match 是一对报文头,属于 http 1.1。
ETag 是一个响应首部字段,它是根据实体内容生成的一段 hash 字符串,标识资源的状态,由服务端产生。If-None-Match 是一个条件式的请求首部。如果请求资源时在请求首部加上这个字段,值为之前服务器端返回的资源上的 ETag,则当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的时候,服务器才会返回带有所请求资源实体的 200 响应,否则服务器会返回不带实体的 304 响应。
⑸ 如何知道自己的电脑的L2缓存是否支持ECC校验
这是我引用别人的大致是这个意思:
BIOS的优化方法:
1、标准CMOS设置
从主菜单选择“STANDARD CMOS SETUP”后进入“标准CMOS设置”菜单。
第1部分是日期和时间的设置,可以用光标配合“Page Up”和“Page Down”依次设置成当前日期和时间。
第2部分的“HARD DISKS”等用于硬盘参数设置,从“Primary Master/主IDE口主盘 ”至“Secondary Slave/从IDE口从盘”共可设置4块硬盘。你应该根据自己的需要设置,如果希望电脑启动时间快些,那么可以将其设置为“USER”比较好。
第3部分“Drive A”至“Floppy3 Mode Support”项用于设置软驱。其中软驱“A” 和“B”都可以分别根据所使用的具体规格,如“3�5英寸1�44MB”等进行设置。在这部分还有一个“Floppy 3 Mode Support”设置,是为用户使用日本标准软驱预备的,我们在此可将其设为“Disabled”。
第4部分中“Video”设置系统显示方式,一般都设为“EGA/VGA”;“Holt on”用于设置系统启动时出错处理,目的是让系统启动时检测到哪些硬件故障才中止引导以等待用户处理,设置内容中有几种选择,较常用的是 “All Errors”,即发现任何硬件有问题都中止引导,另外还有选择允许键盘报错继续引导的设置等。
2、BIOS属性设置
从主菜单上选择“BIOS FEATURES SETUP”即进入“BIOS属性设置”菜单。此设置中第1项“Virus Warning/病毒防范”除了在安装操作系统如DOS6�xx和Windows9x/200 0/NT等的过程中须设置为“Disabled”外,其余时间应该都设为“Enabled”。
第2、3、4和5项是涉及CPU的。其中“CPU Internal Cache/CPU内部缓存”、“Ex ternal Cache/外部缓存”用来管理CPU的L1 Cache和L2 Cache。如果使用赛扬(主频为2 66和300MHz的除外)、PentiumⅡ和PentiumⅢ可全部设为Enabled。第4项“CPU L2 Cache ECC Checking/CPU二级缓存ECC校验”一般情况下设为Enabled,但使用PⅡ233 、PⅡ266时可设为Disabled,因为这两种CPU的L2 Cache不具备ECC校验功能,设为Enable d时反而会降低系统启动速度。第5项“Processor number feature/处理器序列号功能”用于控制PentiumⅢ编号(ID),此项设置毫无作用。
另外一些是关于系统启动时的设置,其中“快速自检/Quick power on self test”可设为“Enabled”,这样系统在启动时只对内存检验一遍,而设为“Disabled”时则在启动时将对内存检验三遍,自然要慢些;至于“CPU更新日期/CPU Update Data”的确切含意不太清楚,像是显示CPU更新时间,暂按BIOS推荐值设为“Enabled”;“优先网络启动/Boot From LAN First”项用于“网卡”等启动优先设置,除联网使用外一般都设为“Disabled”,;“系统引导顺序/Boot Sequence” 就是经常提到的从C盘或A盘启动设置,其中的设置选择较多,有光驱、“D:”等优先启动设置等,但比较简明。注意其中从“D”盘启动是指物理D盘(即所使用的第二块硬盘)而不是逻辑D:盘。
“软驱盘符交换/Swap Floppy Drive”用于交换两块软驱的“A:”、“B:”盘符,即如果有两块软驱可以通过此项设置将事实上的“A:”改为“B:”驱等;“引导显示卡/VGA Boot From”用于设置电脑在使用双显示卡时以PCI还是AGP显卡作为启动时即显示的主卡,此项设置根据你自己使用的显卡总线类型而定,另外这项在给BIOS失效的显卡重写BIOS时也有用,例如在为BIOS失效的AGP卡重装BIOS时,可另插PCI 显卡引导系统进行操作。
“引导时检查软驱/Boot Up Floppy Seek”意义明确,你可根据自己需要分别设为“Ena bled”或“Disabled”,但设为“Enabled”时,启动时软驱“吱吱”作响挺烦的。
“启动时副键盘状态/Boot Up NumLock Stating”决定启动后数字小键盘状态,设为“O N”时为数字输入有效(键盘上NumLock灯亮),反之为光标有效状态;“Typematic Rate Sett ing”、“Typematic Rate(Chars/Sec)”和“Typematic Delay(Msec) ”三项用于调整键盘录入速度,意义不大。
“密码使用选择/Security Option”设置有“System”和“Setup”分别是确定密码是每次启动系统(包括热启动)时都用还是仅在进入BIOS设置时才用。
“显示校正/PCI-VGA Palette Snoop”是在ISA和PCI总线上分别使用两块显示板卡(如增加了VCD/DVD解压卡)时出现色彩不正常时可设为“Enabled”试试,一般都应设为“Disabled” 。“Assign IRQ For VGA”则是设置由系统自动为显示卡配置中断(IRQ),目的是在系统中安装有I SA接口的解压卡等时使用,通常应该设为“Disabled”。
“OS Select For DRAM>64MB”这项只在电脑安装使用“OS/2”操作系统时才用,因为目前大多数用户的电脑中多安装DOS和WIN9x之类,所以应该设为“No-OS/2”。
“HDD S�M�A�R�T� capability”用于开启硬盘的“故障自监测报告”功能,如果你的硬盘具备这一保护功能请设为“Enabled”,如果不具备这一功能,打开此开关也不影响系统正常运行。
“Report No FDD For WIN95”的意思是在系统启动时如果发现没有软驱(或故障)时报告 Windows9x,可设为“Enabled”。
最后一项“Video BIOS Shadow”用于启动后将显示卡的BIOS程序映射在内存中(开辟保留区)中,这样从理论上可以提高电脑显示速度,所以可以设为“Enabled”。
3、芯片组功能设置
从主菜单上选择“CHIPSET FEATURES SETUP”进入芯片组功能设置。此项设置中的具体内容因主板而异,但基本上都包括对系统硬件状态监测、CPU超温保护设置和对内存、显存状态设置等。
“Reset Case Open Status”和“Case Opened”项用于设置电脑机箱(开启)状态监测和报警,一般设为“No”。
“Slow Down CPU Duty Cycle”用于选择CPU降速运行比例,可分别选择“Norma l”或“79%”及其它百分比。
“Shutdown Temp�(℃/�)”用于设置系统温度过高时自动关机初始值,同时用摄氏或华氏温度表示。
“***Temp� Select(℃/�)**”项为选择保护启动温度初始值,同样使用摄氏和华氏温度表示,此处仅对CPU进行设置。
“**Temperature Alarm**”用于设置CPU过温报警,应该设为“Yes”;然后就是系统对硬件监测所采集的数据,其中有“CPU”风扇、“Power/电源”和“Panel/板”风扇的运行状态,如果是使用非原装风扇,由于没有测速功能,系统将会认为CPU风扇故障而报警,所以此时应该将其设为“No”,其它风扇报警功能也应该予以设为“No”,对于系统监测显示的CPU电压和温度等状态参数用户只能看不能修改,但对于具备超频设置功能的BIOS中将包括对CPU的内核工作电压和I/O电压的微调,这部分内容须根据具体主板BIOS内容进行设置。
其次是对内存的运行速度进行设置,“SDRAM CAS latency Time”项设为“Auto”是使系统启动时自动检测内存,然后根据内存“SPD”中的参数进行设置,这样系统工作时不会因人为设置内存运行速度过高而出错。不过如果你买的是假内存(假SPD),那么系统运行时可就要给你闹别扭了。另外也可以按具体值分别设为“2”或 “3”等,视内存质量而定,数值越小时内存运行速度越快。
“DRAM Data Integrity Mode”则用于设置内存校验,由于目前多数用户使用的都是不具备ECC校验功能的SDRAM,所以这项自动设为“No-ECC”。
对于“System BIOS Cacheable”和“Video BIOS Cacheable”两项的设置是允许将主板BIOS和VGA BIOS映射在高速缓存或内存中,理论是可以提高运行速度,但部分电脑使用时可能有问题,所以应根据试验后设置为“Enabled”,否则设为“Disabled”,使BIOS仅映射在内存中较为妥当。
“16 Bit I/O Recovery Time”项是输入/输出16位数据的器件传输复位速度,一般可分别设为“1”至“4”等,通常数值小、速度快。
“Memory Hole At15M-16M”是为ISA设备保留15~16M之间的内存而设的,一般设为 “Disabled”。如果你的Windows启动后少了1MB内存(通过控制板中系统属性查看),那么不妨检查一下是不是这项设成了“Enabled”。
“Delayed Transaction”是为解决PCI2�1总线的兼容问题而设,理论上设为“Enab led”可使用PCI2�1标准卡,但如设为“Enabled”可能会出现PCI2�1设备与普通PCI和ISA设备之间的兼容问题,所以一般推荐设成“Disabled”。
“Clock Spread Spectrum”项是为了抑制时钟频率辐射干扰,但需要硬件(主板)支持,所以可根据实际情况设为“Enabled”或“Disabled”。
4、电源管理设置
在主菜单上选择“POWER MANAGEMMET SETUP”后进入“能源管理设置”菜单。
其中“Power Management”的设置有“Disabled”和“Enabled”,设为“Ena bled”时能源管理才有效。“PM Control by APM”的意思是将能源管理交给系统(指WIN9x)的 APM(“高级能源管理”的英文缩写),可根据你的意愿分别设为“Yes”或“No”,但交予系统管理要更好些。
“Video off Method”项用于控制显示器,有“DPMS/显示能源管理系统”、“亮度关闭/B lank Screen”、“关亮度并切断同步信号/V/H SYNC+Blank Screen”等三种模式可选,但其中“DPMS”节能效果最好,为推荐设置,但需符合DPMS规范的显示器和显卡支持,如果设备不符合DPMS,可再试设置成另两项。
“Suspend Mode”是休眠时间设置,可将时间设在1分至1小时之间,意思是超过所设时间后系统自动进入休眠状态。如果电脑中装有CD-R/W刻录机进行刻盘时最好将设为“Disabled”,以关闭休眠功能提高刻盘成功率。
“HDD Power Down”项设置硬盘自动停转时间,可设置在1至15分钟之间,或设为“Disabl ed”关闭硬盘自动停转。
“VGA Active Monitor”项用于设置显示器亮度激活方式,可设为“Disabled”和“E nabled”两种。
“Soft-off by PWR-BTTN”项确定关机模式,设为“Instant-Off”,关机时用户按下电源开关,则立刻切断电源,设为“Delay4Secs”时,则在按下电源开关4秒钟后才切断电源,如果按下开关时间不足4秒,则自动进入休眠模式,所以一般按习惯设为“Instant-Off”。
“Power LED In Suspend”项设置机箱电源指示灯在系统休眠时的状态,可设为“闪动/Bl anking”、“亮/On”和“Off/Dual”等,通常按习惯设为“Blanking”使电脑在休眠时电源灯闪烁提醒用户注意。
“System After AC Back”项设置电脑在交流电断电后又恢复时的状态,可设为“断电/So ft-off”、“开机/Full On”、“Memory By S/W”和“Memory By H/W”三项,一般都设为停电后再恢复供电时电脑不自动开机,即设为“断电/Soft-off”。
“CPUFAN off In suspend”项是设置CPU风扇在系统休眠时自动停转,可根据自己的风扇(只对原配或带测速功能的风扇有效)设为“Disabled”或“Enabled”。
“PME Event Wakeup”一项不详,先按缺省设置为“Disabled”。
“ModemRingOn/WakeOnlan”用于通过网络或Modem实现远程叫醒开机的设置,只要你不使用这些功能,就都可设为“Disabled”,如果需要再设为“Enabled”。
“Resume by Alarm”项用于定时开机,设置的时间可定在每月某日(00~31)某时某分某秒( 00~23:00~59:00~59),但需要主板和其它硬件支持。
“能源管理设置”中还有“**Reload Global Timer Events**”项,这部分意思大致是对其中所列设备和网络设备以及部分系统资源(IRQ)对系统的激活是否对进入节能状态时间重新计时。
5、即插即用和PCI资源设置
从主菜单上选择“PNP/PCI CONFIGURATION”即可进入设置即插即用和PCI资源菜单。这项设置中“PnP OS Installed”意为安装即插即用的操作系统(自然是指WIN9x)可设为“Ye s”,将PCI和ISA上的中断、DMA等资源交于操作系统管理,设为“No”时交BIOS管理。
“Resources Controlled By”项用于设置外设和板卡的资源管理,如果设为“AUTO” 交BIOS或操作系统自动管理时的设置内容很少;但设为“Manual”交用户自己管理时须设置的内容很多,此时要求你必须具有较高的电脑应用水平,否则容易设置不当,造成设备资源使用冲突,所以一般都设为“AUTO”。当“Res ources Controlled By”项设为“AUTO”时,须设置的内容有:“Reset Configur ation Data”项是系统每次启动时将所检测硬件配置数据写入BIOS中,可分别设为“ESCD/外部设备配置数据”、“DMI/桌面管理界面”、“Both/同用”或“Disabled”,由于系统启动时不写ESCD并不影响正常运行,所以通常都设为“Disabled”,这样可能更安全些。
当“Resources Controlled By”设为“Manual”时须设置的内容除前面的几项外,还将列出系统所有可使用的IRQ和DMA资源由用户进行设置,设置时可使用“Legacy ISA”和“PCI/IS A PnP”两种状态,如果须要为ISA卡保留某一IRQ和DMA(如为声卡保留IRQ5和DMA6)时可将“IRQ -5 assigned to”和“DMA-6 assigned to”都设为“Legacy ISA”。
“Assign IRQ For USB”项是为了设置保留给USB(通用串行接口)的中断资源,如果不使用 USB设备,可设为“Disabled”。
⑹ HTTP缓存与header模块
HTTP缓存分为缓存控制和缓存校验,缓存控制有Cache-Control和Pragma
Pragma是旧产物,已经逐步抛弃,有些网站为了向下兼容还保留了这两个字段。如果一个报文中同时出现Pragma和Cache-Control时,以Pragma为准。同时出现Cache-Control和Expires时,以Cache-Control为准。即优先级从高到低是 Pragma -> Cache-Control -> Expires
如果在请求header有如下参数
则Pragma的优先级更高
Cache-Control一般值为
缓存校验有Last-Modified和ETag
如果请求Cache-Control值为max-age=0,表示客户端要去服务端做资源校验,校验通过会发生304,使用本地缓存的资源,校验不通过的话,服务端将数据返回给客户端
服务端在响应时候会有响应头Last-Modified,这是一个格林威治时间,表示资源最后的修改时间
客户端在刷新页面时候,会发一个请求头If-Modified-Since,表示收到的上一次服务端给的Last-Modified
当服务端会对比自己的Last-Modifed和客户端的If-Modified-Since,如果
If-Modified-Since >= Last-Modifed
那么服务端会直接响应304,响应body体长度为0,以下为一个304响应的nginx-access日志
但是Last-Modifed无法解决资源在一秒内连续修改的问题,一秒内连续修改后,客户端只会更新一次
更好的解决方法是ETag,服务器会响应一个根据资源算出来的字符,如
第二次客户端请求时候会携带If-None-Match请求头
如果
If-None-Match == ETag
表示资源没有修改,服务端响应304
如果同时有ETag和Last-Modify,则ETag的优先级会更高
但是ETag也有问题,如果服务端是多节点集群,那么有可能A节点算出来的ETag和B节点的ETag可能不同,造成无法正常304响应,在nginx中可以关闭ETag
200状态码会发生于浏览器第一次加载页面、强制刷新、304校验失败、资源缓存过期、浏览器禁用缓存情况
如果是浏览器第一次加载,那么请求头不会有 Cache-Control 、 If-None-Match 、 If-Modified-Since
服务端正常响应200,正常将数据传给客户端
如果是强制刷新,那么浏览器会强制加请求头
表示需要服务端响应真实数据,不用做校验
如果浏览器禁用了缓存Disable Cache,那么也会强制加请求头no-cache
304状态码会发生于刷新页面情况
刷新情况浏览器会强制加请求头
表示需要浏览器校验,校验成功就是304,校验失败就是200
发生过程
由于访问静态资源,服务端通常都会响应Cache-Control:max-age,表示需要客户端缓存这个静态资源多长时间,如
同一个浏览器新窗口再次访问会发生from disk cache
from disk cache情况服务端不会收到请求
响应码为 200 , 201 , 206 , 301 , 302 , 303 , 307 , 308 情况下会发这个响应头
参数可以是正数或者负数,如果为负,则发送的头为
可以配置max,这样响应的就是,可以认为是永久缓存
off参数可以禁用添加或者修改expire和Cache-Control响应
响应码为200、201、204、206、301、302、303、304、307、308则添加指定的响应头
如果当前级别没有add_header,则从上一个级别继承,仅仅当前级别没有的话
如果定义了always,则不管响应码为多少都添加header
⑺ thinkphp 数据缓存是否校验缓存是什么意思
在ThinkPHP中进行缓存操作,一般情况下并不需要直接操作缓存类,因为系统内置对缓存操作进行了封装,直接采用S方法即可,例如:
缓存初始化
// 缓存初始化
S(array('type'=>'xcache','expire'=>60));
缓存初始化可以支持的参数根据不同的缓存方式有所区别,常用的参数是:
参数 描述
expire 缓存有效期(时间为秒)
prefix 缓存标识前缀
type 缓存类型
系统目前已经支持的缓存类型包括:Apachenote、Apc、Db、Eaccelerator、File、Memcache、Redis、Shmop、Sqlite、Wincache和Xcache。
如果S方法不传入type参数初始化的话,则读取配置文件中设置的DATA_CACHE_TYPE参数值作为默认类型。同样的道理,prefix参数如果没有传入会读取配置文件的DATA_CACHE_PREFIX参数值,expire参数没有传入则读取DATA_CACHE_TIME配置值作为默认。
有些缓存方式会有一些自身特殊的参数,例如Memcache缓存,还需要配置其他的参数:
S(array(
'type'=>'memcache',
'host'=>'192.168.1.10',
'port'=>'11211',
'prefix'=>'think',
'expire'=>60)
);
对于全局的缓存方式,一般我们建议添加prefix(缓存前缀)参数用以区分不同的应用,以免混淆。
缓存设置
// 设置缓存
S('name',$value);
会按照缓存初始化时候的参数进行缓存数据,也可以在缓存设置的时候改变参数,例如:
// 缓存数据300秒
S('name',$value,300);
甚至改变之前的缓存方式或者更多的参数:
// 采用文件方式缓存数据300秒
S('name',$value,array('type'=>'file','expire'=>300));
如果你在缓存设置的时候采用上面的数组方式传入参数的话,会影响到后面的缓存存取。
缓存读取
// 读取缓存
$value = S('name');
缓存读取的是前面缓存设置的值,这个值会受缓存初始化或者缓存设置的时候传入的参数影响。 如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。
缓存删除
// 删除缓存
S('name',null);
删除缓存标识为name的缓存数据。
对象方式操作缓存
我们可以采用对象方式操作缓存,例如:
// 初始化缓存
$cache = S(array('type'=>'xcache','prefix'=>'think','expire'=>600));
$cache->name = 'value'; // 设置缓存
$value = $cache->name; // 获取缓存
unset($cache->name); // 删除缓存
如果你设置了缓存前缀的话,对应的缓存操作只是对应该缓存前缀标识的,不会影响其他的缓存。
关于文件缓存方式的安全机制
如果你使用的是文件方式的缓存机制,那么可以设置DATA_CACHE_KEY参数,避免缓存文件名被猜测到,例如:
'DATA_CACHE_KEY'=>'think'
缓存队列
数据缓存可以支持缓存队列,简单的说就是可以限制缓存的数量,只需要在初始化的时候指定length参数:
S(array('type'=>'xcache','length'=>100,'expire'=>60));
设置了length参数后,系统只会缓存最近的100条缓存数据。
⑻ b站缓存文件校验失败 为什么
这是因为系统检测到在读取应用程序的文件安装信息时错误。
解决的办法很简单:
1.升级到最现版。
2.彻底卸载原来的版本再重新安装就好了。
3.包括软件安装时产生的配置文 件、文档存储、和注册表信息。 这些往往都会影响二次纯净安装的效果。
缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
工作原理:
缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
⑼ Redis 缓存和数据库之间的数据校验该怎么做
Redis 缓存和数据库之间的数据校验该怎么做
这种writer-reader架构,一般思路是在缓存更新阶段由writer来解决一致性问题,当数据库数据变化时,同步更新redis并确保缓存更新成功。
作为完整性判断,可以不检查全部的属性,而对数据使用一个自增的版本号(或时间戳)来判断是否最新。
作为后置的检测,可以优化来降低扫描的代价,如只针对最近一个时间周期内(如10min)数据库中更新过的数据,这个集合应该比较小,去redis中进行检查的代价会比较低。