asp教程.net页面缓存 几种做法详情
1,aspx页面缓存
页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ outputcache duration="60" varybyparam="none" %>
这样整个页面的内容都会被缓存,页面中的asp.net教程代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。
页面缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者、一次访问和100万次访问对数据库教程的压力是一样的。
duration="60" 的意思是指定缓存的时间为60秒,可根据情况自已设定,超过这个时间则缓存失效,再次生成以后会缓存60秒,以此类推。
varybyparam="none" 的意思是设定无参数缓存(有参数的缓存下面会讲到)
但是对于一些有参数的页面,比如新闻内容页来讲(比如是针对于viewnews.aspx页面的,不会自动去读取?id=1),如果如上设置的话,则会缓存在第一个看到的新闻,因为?id=2、?id=3只是页面的不同参数而已,为了能让不同的新闻各种缓存,因此可以设置varybyparam="id",表示对于不同的id参数进行单独缓存。如果有多个确定缓存参数,则将参数名用分号隔开即可,比如varybyparam="id;number"。
如果想让任何不同的查询字符串都创建不同的缓存,则设置varybyparam="*",一般情况下设置“*”就足够了。
这两个参数是必须的,不能缺省。另外还有一个重要的参数diskcacheable="true|false" 意思是要不要把缓存放到硬盘上,如果设为false则缓存数据会放到内存中。
这里需要注意一下,如果页面数据很小的话可以把缓存数据放到内存中,如果数据较大最好放到硬盘上,否则会占用大量内存影响服务器运行,如果数据缓存到硬盘上的话,记得要把duration=""的值设的大一些如duration="3600",如果设的太小,服务器会过于频繁的在硬盘上写数据反而会降低性能,如果在内存中缓存数据duration""则不要设的太长,当然具体时间长短要大家自己多尝试才知道。
2,禁止ie缓存
假如有一个页面new.aspx,在客户端第一次访问后,它会在internet临时文件夹里有一个new.aspx,文件生成.之后,如果修改了 new.aspx的数据后再次访问该页面,发现ie并没有对这个new.aspx的数据进行更新,反而打开的是第一次访问的页面!
ie自动(默认)调用了internet临时文件夹里有一个new.aspx文件,而不是重新下载新的new.aspx,怎样能让ie自动重新下载新的new.aspx呢,就像点了刷新按钮重新加载此页面一样?
解决的第一种方法:
客户端的设置方法:internet选项→常规→internet临时文件中"设置"→每次访问此页时检查。
这种设置时最好同时删除临时文件,这种方法是让客户自己设置自己的浏览器,如果客户忘记了设置,那么,新的页面总是下载不到本地.这时,客户会怎样认为呢?("肯定是程序的错!")
此外,别人访问您的页面,客户端的浏览器由他们来操作,一般,这种方法不宜解决此类问题。
解决的第二种方法:
让程序自己来让页面自动下载!这种方法实际上是让页面不保存到internet临时文件夹中,每次访问页面都会让浏览器下载页面。
只要在new.aspx代码的page_load事件中加上
context.response.cache.setcacheability(httpcacheability.nocache);即可.
在不加这句时打开页面,internet临时文件夹里会有一个页面文件,而加了,就会没有了。不过,像aspx文件中如果有图片文件或js文件,那还是会下载到internet临时文件夹的。
3,js中的showmodaldialog()函数打开aspx页面时禁止页面缓存
方法一:先写一个htm页面,里面嵌套一个iframe,iframe的src就是aspx页面,然后showmodaldialog()的页面就是这个htm页面,而不是先前的aspx页面,这样就不存在缓存问题。
方法二:在aspx页面的page_load()里面写上一句 response.expires = -1; 意思就是让页面立即过期,这样外面也不用嵌套一个htm页面.
4,数据源缓存
如设定objectdatasource的cacheduration(缓存时间:秒),enablecaching=true。这样每隔cacheduration指定的时间段才调用selectmethod指定的方法来执行数据库查询,其它时候都是直接返回缓存的数据