【网站性能指南】(三)奠基石-基础建设

news/2024/5/11 17:25:01/文章来源:https://blog.csdn.net/byrsongQQ/article/details/7917476

【概述】

在这一章节,我们的主题聚焦在基础设施建设上。

  • Http Compression(压缩)
  • Content Expirations (内容过期)
  • Content Distribution Networks - CDN(内容分发网络)
  • Etags (E标签)
  • 去掉没必要的Http header

 

【Compression】

 

  我们前边提到过,性能规则中的一条就是在服务器和浏览器之间传输的数据越少越好。介于此规则,我们可以使用一个比较成熟的技术:Http Compression。

  •   Server 端会评估客户端发来的http request中header里的"Accept-Encoding”。来确定客户端是否能处理压缩过的数据。如果支持,server端会去对数据进行压缩并返回结果到客户端。
  • 在keynote这个第三方服务评估的结果是,可以平均节省53%的带宽,,网站平均快了25%。
  • 现在IIS也提供这种技术的支持(免费的)

    IIS7 对 compression 的支持

  • 支持配置当cpu占用率过高时,自动停止使用
  • 默认最小的文件大小是256k。
  • 默认启动静态内容的压缩

    如果你对IIS 使用compression 感兴趣。可以参见:http://weblogs.asp.net/owscott/archive/2004/01/12/57916.aspx

 

  【在IIS中配置Compression】

 

    打开IIS。选中一个你的网站。在右边选项卡里选择压缩(compression)

    

也许有的朋友会发现,动态压缩是灰色的。其实是我们没安装动态压缩模块。我使用的是win7。安装方法如下:

控制面板-》程序-》开启或关闭windows功能-》Internet 信息服务-》万维网服务-》性能功能(猥琐)-》动态内容压缩

如果是win server版本的朋友需要:

    1.  Administrative Tools | Server Manager。
    2. 展开Roles,点击Web Server(IIS)。
    3. 滚动到Role Services,点击Add Role Services,打开Add Role Services向导。
    4. 在Select Role Services页面,滚动到Performance,选择Dynamic Content Compression,选择下一步。

     现在我们还用第一章里用到的那个网站做测试。打开fiddler。

记下每个文件的大小。返回到IIS,开启动态压缩和静态压缩。现在IIS 再接收到请求我的js和css文件时。它先会判断是否已经压缩过呗请求的文件。如果没有它会进行压缩,并且存储到某一个目录。其他用户同样请求相同的文件时,它直接获取压缩过的文件即可。

     现在我们回到fiddler看看结果吧。

      

jquery 文件从236K被压缩到90k。其他js和css文件也都受到相应的压缩。

 

现在我们再使用上一章的另一把利器microsoft network monitor观察压缩前和压缩后  来看看发生了什么变化。

压缩前:

压缩后:

 

非常容易使用 MS Network monitor 对比出。压缩前后,frame的数目明显的减少了,从40条减少到9条。

由于95%以上的请求都会被询问是否启用compression。所以主流的浏览器都支持compression。

启用compression会占用少许的cpu。IIS7 对这一块做了优化。

为了确保压缩没有使CPU超载,IIS7每30秒计算平均CPU利用率。当CPU利用率超过一个限制时,它会自动关闭压缩。当CPU利用率低于限制时, 它会重新启用压缩。

限制的默认值是:

 关闭压缩重启压缩
动态文件90%50%
静态文件100%50%

注意这意味着如果服务器上的CPU一直在50%以上,但偶然高于90%,动态文件压缩会被关闭,但再也不会重新开启了。

可以通过修改applicationHost.config文件修改这些限制,通常它在C:\Windows\System32\inetsrv\config文件夹下。

找到<httpCompression>节。

2.修改httpdynamicCompressionEnableCpuUsage属性:<httpCompressiondynamicCompressionEnableCpuUsage="70".... >

3.重启IIS。

 

 

【Content Expirations】

 

  回顾一下我们第一张讲过的性能规则。有一条是尽可能不经常地传输数据。

  一个用户访问我网站的首页,他会得到我的js,css和图片等文件。浏览器则替他保存到本地的缓存中。过了几天用户又来访问我的网站了。服务器还会看看浏览器缓存中有木有他要的文件。如果有的话,它会告诉server。我有这个文件。但是我想知道它的版本是不是最新的。服务器会看看这个文件到底改没改。如果改了,服务器会发送新的文件。如果没,服务器会返回给浏览器状态码304。涛声依旧。

 

304.没改。

利用浏览器缓存:

  • 对于content folder 设置过期时间
  • 尽量避免请求不经常改动的文件
  • 重命名文件,如果需要重写浏览器缓存(版本号/时间戳)

 

  【在IIS中配置Content Expirations】

 

   打开IIS。选中你的站点。选中scripts文件夹(装js的地方。如果有的话)在视图选项卡里找到HTTP 响应标头并进入。

   右上角,设置常用标头-》使web内容过期。我们设置5天吧。这时候访问我们的网站。使用fiddler 观察结果如下:

    

那个max-age 我们算算 。正好是5天:)现在我们再打开IE。internet选项-》浏览历史记录-》设置-》查看文件

找到我们的js文件。查看属性,8月7号过期,正好5天:)

 

   【CDN】

 

另一个对于提高网站性能有效的办法就是使用CDN了。

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

      在这里我只做简单介绍,需要了解更详细信息,请参见:http://en.wikipedia.org/wiki/Content_delivery_network

      看到这里读者肯定会说我屌丝了。不解释还废话那么多干什么?CDN都是大公司用的和我们有关系么?

      下面我来讲讲我们可以利用到的CDN:

      JQuery是现在最流行的js library之一。google、microsoft、jquery.com都免费host了jquery库在它们的cdn上。请看下图:

      我在这里可以使用我们自己的服务器上的jquery文件。也可以选择从google、微软和jquery官网的cnd来读。即可以给自己服务器减少压力。也可以利用cnd加快读取速度。

 

   

【ETags】

 

   什么是ETags?Etag的全称是 entity tag。ETag实际上是一个hash+changeNumber组成的值。hash由文件内容生成。IIS7中changeNumber默认是0; 

  本章前边内容提到,我们通过设置内容过期,利用浏览器缓存达到性能优化的效果,会使用expires headers告诉浏览器,不用再发送条件GET请求给服务器啦,直接用缓存里面的数据就可以啦,从而加快访问速度。

     Etags 使用过程如下:

  1. 客户端请求一个资源source 。
  2. 服务器返回页面souce,并在给source加上一个ETag。
  3. 客户端展现该页面,并将页面连同ETag一起缓存。
  4. 客户再次请求资源source,并将上次请求时服务器返回的ETag一起传递给服务器。
  5. 服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体。

    

     从此看来Etag有可能会误导浏览器,让浏览器忽略缓存重复下载相同的文件。

     我们试着从删除ETAG。

     先看看没删除之前ETAG长什么样?

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;/// <summary>
/// Summary description for ETagRemoveModule
/// </summary>
public class ETagRemoveModule : System.Web.IHttpModule
{public ETagRemoveModule(){//// TODO: Add constructor logic here//
    }public void Dispose(){}public void Init(HttpApplication context){context.EndRequest += new EventHandler(HandlerEndRequest);}public void HandlerEndRequest(Object sender, EventArgs e){System.Web.HttpContext.Current.Response.Headers.Remove("ETag");}}
复制代码

 

  <system.webServer><modules><add name="ETagRemoveModule.cs" type="ETagRemoveModule"/></modules></system.webServer>

ETags就没啦:)

【去掉没必要的Http header】

 

 我们使用fiddler 可以看到,http response header 包含了很多信息。

 

但是有些信息是没必要展示给用户看的。比如我们使用了.netframework 4.0.我们使用IIS7.5。

首先它是多余的信息。其次它也有可能被一些骇客利用。

所以我们修改一下我们的代码:

复制代码
 public void HandlerEndRequest(Object sender, EventArgs e){HttpResponse oResponse = System.Web.HttpContext.Current.Response;if (null != oResponse){oResponse.Headers.Remove("X-AspNet-Version");oResponse.Headers.Remove("Server");oResponse.Headers.Remove("ETag");}}
复制代码

     现在我们的header干净多了,也安全多了。

     

     下一章会介绍【前端性能】

 

 

     参考文献:

      http://technet.microsoft.com/en-us/library/cc730629.aspx

http://weblogs.asp.net/owscott/archive/2004/01/12/57916.aspx

http://www.infoq.com/cn/articles/etags

http://www.webusability.cn/what-is-etag-howto-remove-etags-iis6-iis7-759/

http://en.wikipedia.org/wiki/Content_delivery_network

 


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

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

相关文章

【网站性能指南】(四)前端性能-压爆你的文件

【概述】 在这一章&#xff0c;我们会聚焦在前端性能: 外部的Css 和 JavascriptCss 和 Javascript 的 迷你化 与 合并图片的最佳化Css 图片拼合器 【外部的CSS和Javascript】 几乎所有的CSS和Javascript 都应该放在外部文件 减少页面的尺寸允许重用允许使其过期 可读性更高 …

unity使用mixamo网站所有动作

//如果模型已经绑定了骨骼可以直接导入网站 //如果会C4D需要看下IMAX插件如何使用的&#xff08;B站有&#xff09;---非常简单&#xff0c;基本就是点点点就好了&#xff0c;真的不难&#xff08;插件可以在魔顿网免费下载&#xff09;。

Texture贴图材质资源网站分享

话不多说直接贴&#xff1a; https://www.textures.com/libraryhttps://www.textures.com/library进入之后可以选择 搜索查找你要的东西&#xff0c;只能英文 免费下载&#xff0c;低清晰度的&#xff0c;512X512&#xff0c;学习使用完全足够 说明&#xff1a;如需商用请购…

大型网站后台架构的Web Server与缓存 (转)

1.1 Web server Web server 用来解析HTTP协议。当web服务器接收到一个HTTP请求时&#xff0c;会返回一个HTTP响应&#xff0c;例如送回一个HTML页面。为了处理一个请求&#xff0c;web服务器可以响应一个静态页面或者图片。进行页面跳转&#xff0c;或者把动态响应的产生委托给…

Java批量检测网站链接是否正常,并生成检测日志文档

Java批量检测网站链接是否正常&#xff0c;并生成检测日志文档 1.Java代码块 &#xff08;生成检测日志文档文档为md格式&#xff0c;最好下载typora或markdown进行查看&#xff0c;也可根据自己所需改成txt文档&#xff09; 文件名&#xff1a;ceshi.java import java.io.B…

加上快捷键,让你的网站酷起来

伟大的程序员都懒。 这话是我从《PHP 与 MySQL 程序设计》中看来的&#xff0c;来自于 Larry Wall 的一句话&#xff1a; Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris. 懒的程序员的特征是&…

使用GitLab Pages托管静态网站

文章目录 前言一、GitLab Pages是什么&#xff1f;二、使用步骤1.开通账号&#xff0c;创建Git仓库同步项目2.添加.gitlab-ci.yml文件&#xff0c;开启GitLab Pages3.部署成功之后访问项目 总结 前言 在我们日常的程序员养成过程中&#xff0c;会产生一些产物&#xff0c;自己…

在12306网站上如何可以选择上中下铺

众所周知&#xff0c;在12306官方购票时无法自己选择上中下铺的&#xff0c;那么如何在12306上买到上中下铺呢&#xff0c;相信大家都会感兴趣&#xff0c;这是一个利用12306的一个web代码来实现的&#xff0c;然后结浏览器的web调式功能&#xff0c;如果你是一个web美工&#…

pc网站qq互联登录授权php版

首先看下工具类 <?php /*** QQ互联pc网页授权类*/ namespace App\Lib\QQconnect;use App\Lib\Util\Curl;class QQconnect{const err [0 >成功,100000 > 缺少参数response_type或response_type非法,100001 > 缺少参数client_id,100002 > 缺少参数client…

虚拟机内的homestead环境下的网站项目让局域网内的同事访问

# 登录进虚拟机 $ vagrant ssh # 共享本地域名 $ share apitest.cn如图红框圈住的地址就可以访问了&#xff0c;6666

怎样在织梦dedecms网站上添加漂浮广告

在织梦 dedecms的网站上添加漂浮广告其实很简单&#xff0c;这篇文章主要讲的是在织梦网站首页添加漂浮广告。 我们用本地搭建的织梦默认模板演示。 1、准备一个广告图片 准备一个广告图片&#xff0c;命名为漂浮.gif &#xff0c;设置好图片大小150*150 &#xff0c;之后把图片…

dedecms教程:多款精美分页网站模板pagelist样式

使用dedecms&#xff0c;有时需要自定义分页样式。怎么办呢&#xff1f; 不急&#xff0c;20几款精美分页样式&#xff0c;总有一款你最喜欢。使用很简单&#xff1a; 步骤&#xff1a;三步即可解决 多款精美dede分页样式.zip 1、直接覆盖include/arc.listview.class页 2、把演…

dedecms教程:网站模板自定义表单制作在线订单详细解说

一步首先你要知道自定义表单的后台界面在哪里截图 第二步添加自定义表单 我选择完全公开就是说访客提交的时候他们也是可以看到我们的自定义信息的 数据表 模板根据你的模板自定义即可 我们先look下 下面就是自定义的内容了 我随便举例给大家演示下 首先返回界面 点击红圈来添加…

dedecms教程:织梦做中英文(多语言)网站详解

对于多语言网站&#xff0c;可能许多人都想进行制作&#xff0c;可又不明白其中的道理&#xff1b;因为多语言网站不仅仅只是一个网站站点&#xff0c;具有多个而且是不同语言&#xff1b;它也不是站群&#xff0c;就是一个网站的一部分&#xff01; 首先实现多语言站点提供两种…

[原创]DEDE 织梦建站,仿站(包含5套正版建站软件)

教程包括&#xff1a; 3、dedecms仿站进门教程 本教程适用于&#xff1a; 网易博客安全提醒&#xff1a;系统检测到您当前密码的安全性较低&#xff0c;为了您的账号安全&#xff0c;建议您适时修改密码 立即修改 | 封闭 5、dedecms综合学习资料汇编&#xff1b; 重要提醒&…

简单解释网站是如何进行访问的

今天学习的时候看到一个值得记录的面试题&#xff1a; 一个网站是如何进行访问的 首先输入网址域名&#xff0c;回车&#xff1a; 1.检查本机的C:\Windows\System32\drivers\etc\hosts配置文件里有没有这个网址的域名映射 如果有&#xff0c;则直接返回对应的ip地址&#xf…

Javaweb Listener监听器的简单应用:统计网站在线人数

Listener监听器实现统计网站在线人数 开发环境&#xff1a; IntelliJ IDEA 一、什么是监听器 是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象&#xff0c;当被监视的对象发生变化时&#xff0c;立即采取相应的行动。 具体参考下文&#xff1a; J…

SEOER都在为网站的“流量增长优化”而迷茫

SEO优化不得不说现在做SEO的工作是非常困难的&#xff0c;而在这个行业里从业多年的SEO经理们&#xff0c;不仅仅要扛着很大的压力、还要面对下属对自己传经授教的一些期盼&#xff0c;对外更不知道搜索引擎&#xff0c;特别是百度又要干什么来剥削你的流量了&#xff01; 但其…

构建自己的网站(一)——uWSGI+Django实现显示图片点击更新

文章目录 目的说明前提遇到的问题及解决通过ip地址端口也访问不到服务器&#xff1f;域名不可用&#xff1f;域名解析后还是不可用&#xff1f;80端口没开放&#xff1f;本地实现点击切换图片djangohtml图片显示不出来&#xff1f;django服务器实现显示图片创建django项目&…

小程序打开网站小程序

呵呵&#xff0c;昨天晚上&#xff0c;快停电了&#xff0c;打开csdn &#xff0c;打开了好多的网页&#xff0c;可是 快停电&#xff0c;关网了&#xff0c;唉 &#xff01;有好多想看的网页&#xff0c;舍不得 不看&#xff0c;于是把网址 保存到一个txt文件里面&#xff0c;…