开源项目大家谈-网站性能调校-Cache的使用

news/2024/5/10 1:31:48/文章来源:https://blog.csdn.net/weixin_34018202/article/details/85416699

之所以用这个题目是因为很多人常常问我研究开源项目的意义,有一些开源项目在别人眼里看起来完全没有搞头,是一些没有实用价值的项目。其实开源项目往往是新技术的试验田,是全世界优秀程序开发者智慧的汇集,如果你仔细研读这些开源项目,得到的不仅仅是这个项目的功能,而是观摩新的技术,学习比你更聪明人的智慧。

我一直研究的一个开源项目是DotNetNuke(简称DNN),也许你不知道这是一个什么系统,不过你不用关心这是一个什么系统,因为我要讨论的技术在任何一个ASP.NET网站里都有可能用到,只是用这个开源项目做示范罢了,不过你会看到在开源项目里,MSDN里那些死板的技术说明是如何巧妙发挥功能。

这一系列的文章:

开源项目大家谈-网站性能调校-Page State Persistence

开源项目大家谈-网站性能调校-Cache的使用

使用缓存(Cache)

对于缓存(Cache)的概念我想大家都很熟悉,网上也有很多介绍的文章,我在这里就不赘述了。

对网站访问最频繁的部分使用缓存

虽然大家都知道这个概念,但大家在做项目的时候不一定都思考过如何以及何时使用缓存。

我们来看看这个开源系统的这个设置:

image 

对于如何选择这个两项,似乎没什么太难理解的,这里是决定把对module的缓存放在内存里还是放在硬盘里,当然,选择"Memory"会提高速度。

但有一点是我们要学习的,那就是为什么会有这么一个选择。之所以出现这样一个选择,是因为这个开源系统的设计人员发现这个系统对于module这一部分的操作特别频繁,所以对于所有读取出的module信息都会放入缓存,从而加快系统的速度,也就是说,设计人员主动的分析了系统的特点,使用了缓存,这是最值得我们学习的地方。

Cache生存周期对网站性能的影响

在这个开源项目中,我们可以看到这样一个选项,对于"Performance Settings",你可以选择:

  • No Caching
  • Light Caching
  • Moderate Caching
  • Heavy Caching

调节这些设置肯定能调校网站的性能,当到底有什么影响呢?技术上又是如何实现的呢?

image

查看源代码,我们发现PerformanceSettings 的值有三种,分别是0、1、3、6,那这几个值又是如何来控制cache的性能,从而调校整个网站的性能呢?

        Public Enum PerformanceSettings
            'The values of the enum are used to calculate
            'cache settings throughout the portal.
            'Calculating based on these numbers keeps 
            'the scaling linear for all caching.
            NoCaching = 0
            LightCaching = 1
            ModerateCaching = 3
            HeavyCaching = 6
        End Enum
 

我们看看下面的代码就可以明白了:

Dim intCacheTimeout As Integer = 20 * Convert.ToInt32()
DataCache.SetCache(strCacheKey, objFile, TimeSpan.FromMinutes(intCacheTimeout))

原来,系统使用PerformanceSettings的值来控制cache的生存时间,从而为不同特性的网站内容提供不同的cache生存时间,达到调校网站性能的目的。这的确是一个值得学习的精妙设计。

Authenticated Cacheability对网站性能的影响

在这个开源系统的性能设置里,还有一个Authenticated Cacheability的设置:

image

什么是 Authenticated Cacheability

Cache可以应用在服务器端,也可以使用在客户端,客户端对于访问的网页都会进行缓存,但出于某种原因,你也可以指定客户端不缓存你的网页。

当 Web 服务器发送响应时,在它传递的所有信息中包括一个 Cache-Control HTTP 标头,该标头定义可在其上缓存文档的设备。ASP.NET 在 HttpCacheability 枚举中定义这些值。该枚举具有六个值,其中四个值直接映射为 Cache-Control HTTP 标头设置,另外两个特殊值分别为 HttpCacheability.ServerAndPrivateHttpCacheability.ServerAndNoCacheServerAndPrivate 只允许将响应缓存在原服务器和请求客户端上。而 ServerAndNoCache 只允许将响应缓存在原服务器上。

这些设置当然会影响到你网站的性能,相对于做了缓存的页面,没有缓存的页面需要花更多的时间来显示。

这个开源系统利用了这一点,你可以自己选择客户端缓存的方式,有几个选项还会影响到服务器端的缓存。下面是关键的代码:

            If Request.IsAuthenticated = True Then
                ' set client side page caching for authenticated users
                If Convert.ToString(PortalSettings.HostSettings("AuthenticatedCacheability")) <> "" Then
                    Select Case Convert.ToString(PortalSettings.HostSettings("AuthenticatedCacheability"))
                        Case "0" : Response.Cache.SetCacheability(HttpCacheability.NoCache)
                        Case "1" : Response.Cache.SetCacheability(HttpCacheability.Private)
                        Case "2" : Response.Cache.SetCacheability(HttpCacheability.Public)
                        Case "3" : Response.Cache.SetCacheability(HttpCacheability.Server)
                        Case "4" : Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache)
                        Case "5" : Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate)
                    End Select
                Else
                    Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache)
                End If
            End If

对于HttpCacheability的几个值代表的意义如下:

  • NoCache:设置 Cache-Control: no-cache 标头。如果没有字段名,则指令应用于整个请求,且在满足请求前,共享(代理服务器)缓存必须对原始 Web 服务器强制执行成功的重新验证。如果有字段名,则指令仅应用于命名字段;响应的其余部分可能由共享缓存提供。
  • Private: 默认值。设置 Cache-Control: private 以指定响应只能缓存在客户端,而不能由共享(代理服务器)缓存进行缓存。
  • Server: 指定响应仅缓存在源服务器上。与 NoCache 选项相似。客户机接收 Cache-Control: no-cache 指令,但文档是在原始服务器上缓存的。等效于 ServerAndNoCache。
  • ServerAndNoCache: 应用 Server 和 NoCache 的设置指示在服务器上缓存内容,而对服务器以外的其他对象都显式否定其缓存响应的能力。
  • Public: 设置 Cache-Control: public 以指定响应能由客户端和共享(代理)缓存进行缓存。
  • ServerAndPrivate: 指示响应只能在服务器和客户端缓存。代理服务器不能缓存响应。

如何设置Authenticated Cacheability

对于很多网站,内容的保密性要求并不高,所以推荐设置为"Public”,这样能取得最大的性能优势。

更多关于Authenticated Cacheability

关于Authenticated Cacheability更具体的知识大家可以参考下面的几个文档:

[转]Asp.net 缓存(二)--设置页的可缓存性

MSDN: HttpCacheability Enumeration

John Mitchell's (mostly DotNetNuke) Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_765649.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RHEL5.0 LAMP建站实例

LAMP即LinuxApacheMySQLPHP&#xff0c;是网上最受欢迎的站点架设解决方案。本文以一个实例介绍其基本的应用过程。8.4.1 企业需求 公司要为自己网站搭建了自己的网站&#xff0c;内网采用的IP地址为192.168.16.80&#xff0c;要求管理员可在网上方便进行用户管理。8.4.2 软件包…

新版 Android 已支持 FIDO2 标准,免密登录应用或网站

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 谷歌刚刚宣布了与 FIDO 联盟达成的最新合作&#xff0c;为 Android 用户带来了无需密码、即可登录网站或应用的便捷选项。 这项服务基于 FIDO2 标准实现&#xff0c;任何运行 Android 7.0 及后续…

vs2008快捷键使用 - - JavaEye技术网站

最近&#xff0c;在网上看到一篇关于的一些提示&#xff0c;可以提高开发效率&#xff0c;我把它翻译过来&#xff0c;当然里面也有很多自己的想法&#xff0c;分享一下&#xff0c;大家可以择有用的提示而用之。 我很讨厌看到有人在Visual Studio代码编辑器拷贝或者删除一行之…

Linux系列-Red Hat5平台下的LAMP网站服务搭建(二)

Linux系列-Red Hat5平台下的LAMP网站服务搭建&#xff08;二&#xff09;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />使用awstats分析Web日志&httpd服务的访问控制上次我们看到了apache服务器的源码编译安装以及httpd服…

Wiki 2.0 网站 (Wikia) 今日揭开面纱

数字好莱坞峰会上&#xff0c;维基百科创始人Jimmy Wales的专访时&#xff0c;介绍了”创新的、社交化、更便捷的“Wikia。Wiki 2.0就此揭开面纱。 该网站具有如下特点&#xff1a; 整合社交工具&#xff0c;让用户分享编辑和贡献。突出排名靠前的编辑&#xff0c;让读者更方便…

使用Django创建网站项目二

上一篇&#xff1a;Windows安装diango框架<一> 创建项目&#xff0c;启动服务器 利用安装好的django包的django-admin.py创建项目&#xff0c;命令 python django-admin.py startproject mysite (注意 django-admin.py 路径 &#xff0c;mysite 是项目文件夹名字) mysi…

为啥学了3个月Python还不会爬网站?症结在这!

关注头条号&#xff0c;私信回复资料会有意外惊喜呦………………最后一张照片有资料呦。前几天一个朋友问我应该如何学习Python&#xff0c;所以来回答一下这个问题做一个总结。核心思路建立良好的反馈机制。学习任何一样东西都是一样。对于编程来说&#xff0c;特别是非计算机…

使用缓存技术优化网站访问

HTTP Caching 用好了&#xff0c;可以极大的减小服务器负载和减少网络带宽。十分有必要深入了解下 http 的 caching 协议。先来看下请求/响应过程&#xff1a;http 请求/响应1、用 Last-Modified 头在第一次请求的响应头返回 Last-Modified 内容&#xff0c;时间格式如&#xf…

新手如何建设属于自己的网站

怎样建设一个属于自己的网站&#xff1f;南通网站建设步骤有哪些&#xff1f;每一个要建站的小白首先想到的肯定是这两个问题。其实这两个问题的范围很广&#xff0c;主要是由于很多刚入门的小白对网站建设的概念很模糊&#xff0c;下面小编就介绍网站建设的详细步骤&#xff0…

没有灵感头发都快抓掉了!推荐几款创意网站,让大脑灵光一动!

1. iDsketchhttp://www.idsketch.cn/工艺设计的草图设计手绘。 里面有系统教育方法&#xff0c;知道新人如何学习手绘&#xff0c;会将国外的手绘方法进行翻译。全方位系统的教你手绘。2. ShoppingDesignhttps://www.shoppingdesig产品包装设计。在这里能够给你带来更多创意灵感…

推荐30款超精致的体育类型的网站设计

日期&#xff1a;2012-11-24 来源&#xff1a;GBin1.com 相信大家肯定喜欢体育运动&#xff0c;如果你是运动迷儿的话&#xff0c;千万不要错过下面的体育相关网站设计。体育网站一般分为这样几个不同的类型&#xff1a;体育新闻、体育俱乐部、体育服饰和一些业界名人的个人网…

6月第四周域名网站排名:新网和易名中国并列第三

据国际统计机构Alexa公布的最新数据数据显示&#xff0c;在6月18日-6月24日期间&#xff0c;国内域名主机网站周均用户覆盖数排名前三位的是&#xff1a;中国万网&#xff0c;达1540。西部数码次之&#xff0c;达620&#xff0c;新网和易名中国并列第三名&#xff0c;达560。 &…

接入网站总结

思路&#xff1a; 认证---->获取token(请求接口时,必须要带上token的值才可以访问接口,应该是考虑到安全问题)---->请求对应的接口获取数据 现在大网站的一些都有例子的 至少我现在做的qq和新浪都是有的。新浪的简单 拿新浪的举例吧。过程都是一样的。 1&#xff0c;一个…

PaperBye一个可智能改重的免费论文查重网站。

2019独角兽企业重金招聘Python工程师标准>>> 推荐一个可以智能改重的免费论文查重软件&#xff0c;可自动降低论文重复率&#xff0c;同步修改、实时查重&#xff0c;一边修改&#xff0c;一边查重&#xff0c;修改完即查重完毕&#xff0c;修改论文效率高&#xff…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

网站程序(案例)

Insus.NET分享一个案例网站程序。程序中95%的功能添加与设置在后台管理平台进行&#xff0c;剩余的5%就是前台网页的自定义设计。程序是使用.NET Framework 4.0 ASP.NET MS SQL Server 2008 R2 VB.NET进行开发。功能与特色&#xff1a;文章编辑器使用&#xff1a;CuteEditor…

SharePoint 2013 报:网站在改进过程中处于只读状态,对此给您带来的不便,我们深表歉意...

SharePoint 2013备份过程意外中断&#xff0c;导致再打开站点报&#xff1a;网站在改进过程中处于只读状态&#xff0c;对此给您带来的不便&#xff0c;我们深表歉意 英文&#xff1a;We apologize for any inconvenience, but weve made the site read only while were making…

如何在XAMPP中设置多个网站

xampp 是一个非常方便的本地 apache php mysql 的调试环境&#xff0c;在本地安装测试 WordPress 等各种博客、论坛程序非常方便。今天我们来给大家介绍一下&#xff0c;如何使用 XAMPP 在本地进行安装多个网站。 一般情况下&#xff0c;我们只需要网站程序放到 xampp/htdoc …

网站主机、域名购买和部署的方法

本文主要适用于第一次购买域名和空间的朋友。 我们都知道一个网站想要在互联网上访问&#xff0c;大致需要三个东西。第一、我们要访问的网站本身的工程文件&#xff0c;就是用户看到的东西。第二、我们需要租用一个空间用来存放我们的网站工程文件&#xff0c;在空间中会有附带…

大型网站技术架构系列2:负载均衡

2019独角兽企业重金招聘Python工程师标准>>> 本文主要讲解nginx的负载均衡。 负载均衡基于nginx的反向代理功能。 ~~~~~~~~~~~~~~~~~~ 1&#xff09;让nginx支持jsp动态文件 操作方法&#xff1a;---修改nginx.conf&#xff0c;在server里添加 location ~ \.jsp$ {p…