网站静态化处理

news/2024/5/12 2:55:46/文章来源:https://blog.csdn.net/weixin_33964094/article/details/89772087

       动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思。由此可见,网站静态化处理的核心就是动静分离和缓存两大方面。


1908_1.jpg?_=2192817


       大型动态网站之所以可以做到能快速响应高并发,它们都是尽量让自己的网站静态化,当然这种静态化绝不是把网站就做成静态网站,而是在充分理解了静态网站在提升网站响应速度的基础上对动态网站进行改良,所以我这里首先要讨论下静态网站那些特点可以用于我们提升网站的响应速度。


       静态网站非常简单,它就是通过一个url访问web服务器上的一个网页,web服务器接收到请求后在网络上使用http协议将网页返回给浏览器,浏览器通过解析http协议最终将页面展示在浏览器里,有时这个网页会比较复杂点,里面包含了一些额外的资源例如:图片、外部的css文件、外部的js文件以及一些flash之类的多媒体资源,这些资源会单独使用http协议把信息返回给浏览器,浏览器从页面里的src,href、Object这样的标签将这些资源和页面组合在一起,最终在浏览器里展示页面。


     但是不管什么类型的资源,这些资源如果我们不是手动的改变它们,那么我们每次请求获得结果都是一样的。这就说明静态网页的一个特点:静态网页的资源基本是不会发生变化的。因此我们第一次访问一个静态网页和我们以后访问这个静态网页都是一个重复的请求,这种网站加载的速度基本都是由网络传输的速度,以及每个资源请求的大小所决定,既然访问的资源基本不会发生变化,那么我们重复请求这些资源,自己在那里空等不是很浪费时间吗?


       如是乎,浏览器出现了缓存技术,我们开发时候可以对那些不变的资源在http协议上编写相应指令,这些指令会让浏览器第一次访问到静态资源后缓存起这些静态资源,用户第二次访问这个网页时候就不再需要重复请求了,因为请求资源本地缓存,那么获取它的效率就变得异常高效。


image

浏览器缓存原理


image


  由于静态网站的请求资源是不会经常发生变化的,那么这种资源其实很容易被迁移,我们都知道网络传输的效率是和距离长短有关系的,既然静态资源很容易被迁移那么我们就可以把静态资源服务器按地域分布在多个服务节点上,当用户请求网站时候根据一个路由算法将请求落地在离用户最近的节点上,这样就可以减少网络传输的距离从而提升访问的效率,这就是我们长提的大名鼎鼎的CDN技术,容分发网络技术


  网络传输效率还和我们传输资源的大小有关,因此我们在资源传输前将其压缩,减小资源的大小从而达到提升传输效率的目的;另外,每个http请求其实都是一个tcp的请求,这些请求在建立连接和释放连接都会消耗很多系统资源,这些性能的消耗时常会比传输内容本身还要大,因此我们会尽力减少http请求的个数来达到提升传输效率的目的或者使用http长连接来消除建立连接和释放连接的开销(长连接的使用要看具体场景)。


  其实雅虎提出的网站优化的14条建议大部分都是基于以上原理得出的,关于雅虎的14条件建议,本系列后面内容将做详细的讨论,这里就不展开了。

  我常常认为最佳的性能优化手段就是使用缓存了,但是缓存的数据一般都是那些不会经常变化的数据,上文里说到的浏览器缓存,CDN其实都是可以当做缓存手段来理解,它们也是提升网站性能最为有效的方式之一,但是这些缓存技术到了动态网站却变得异常不好实施,这到底是怎么回事了?


  首先动态网站和静态网站有何不同呢?我觉得动态网站和静态网站的区别就是动态网站网页虽然也有一个url,但是我们如果传输参数不同那么这个url请求的页面并不是完全一样,也就是说动态网站网页的内容根据条件不同是会发生改变的,但是这些变化的内容却是同一个url,url在静态网站里就是一个资源的地址,那么在动态网站里一个地址指向的资源其实是不同的。因为这种不同所以我们没法把动态的网页进行有效的缓存,而且不恰当的使用缓存还会引发错误,所以在动态网页里我们会在meta设定页面不会被浏览器缓存。


  如果每次访问动态的网页该网页的内容都是完全不同的,也许我们就没有必要写网站静态化的主题了,现实中的动态网页往往只是其中一部分会发生变化,例如电商网站的菜单、页面头部、页面尾部这些其实都不会经常发生变化,如果我们只是因为网页一小部分经常变化让用户每次请求都要重复访问这些重复的资源,这其实是非常消耗计算资源了。


       我们来做个计算吧,假如一个动态页面这些不变的内容有10k,该网页一天有1000万次的访问量,那么每天将消耗掉1亿kb的网络资源,这个其实很不划算的,而且这些重复消耗的宽带资源并没有为网站的用户体验带来好处,相反还拖慢了网页加载的效率。那么我们就得考虑拆分网页了,把网页做一个动静分离,让静态的部分当做不变的静态资源进行处理,动态的内容还是动态处理,然后在合适的地方将动静内容合并在一起。

  这里有个关键点就是动静合并的位置,这个位置的选择会直接导致我们整个web前端的架构设计。我们这里以java的web开发为例,来谈谈这个问题。


  java的web开发里我们一般使用jsp来编写页面,当然也可以使用先进点的模板引擎开发页面例如velocity,freemark等,不管我们页面使用的是jsp还是模板引擎,这些类似html的文件其实并不是真正的html,例如jsp本质其实是个servlet也就是一个java程序,所以它们的本质是服务端语言和html的一个整合技术,在实际运行中web容器会根据服务端的返回数据将jsp或模板引擎解析成浏览器能解析的html,然后传输这个html到浏览器进行解析。


      由此可见服务端语言提供的开发页面的技术其实是动静无法分离的源头,但是这些技术可以很好的完成动静资源中的动的内容,因此我们想做动静分离那么首先就要把静的资源从jsp或者模板语言里抽取出来,抽取出来的静态资源当然就要交给静态的web服务器来处理,我们常用的静态资源服务器一般是apache或ngnix,所以这些静态资源应该放置在这样的服务器上,那么我们是否可以在这些静态web服务器上做动静结合呢? 


       答案是还真行,例如apache服务器有个模块就可以将它自身存储的静态资源和服务端传输的资源整合在一起,这种技术叫做ESI,这个时候我们可以把不变的静态内容制作成模板放置在静态服务器上,动态内容达到静态资源服务器时候,使用ESI或者CSI的标签,把动静内容结合在一起,这就完成了一个动静结合操作。这里就有一个问题了,我前面提到过CDN,CDN其实也是一组静态的web服务器,那么我们是否可以把这些事情放到CDN做了?


         理论上是可以做到,但是现实却是不太好做,因为除了一些超有钱的互联网公司,大部分公司使用的CDN都是第三方提供的,第三方的CDN往往是一个通用方案,再加上人家毕竟不是自己人,而且CDN的主要目的也不是为了做动静分离,因此大部分情况下在CDN上完成这类操作并不是那么顺利,因此我们常常会在服务端的web容器前加上一个静态web服务器,这个静态服务器起到一个反向代理的作用,它可以做很多事情,其中一件事情就是可以完成这个动静结合的问题。


  那么我们把这个动静结合点再往前推,推到浏览器,浏览器能做到这件事情吗?如果浏览器可以,那么静态资源也就可以缓存在客户端了,这比缓存在CDN效率还要高,其实浏览器还真的可以做到这点,特别是ajax技术出现后,浏览器来整合这个动静资源也就变得更加容易了。不过一般而言,我们使用ajax做动静分离都是都是从服务端请求一个html片段,到了浏览器后,使用dom技术将这个片段整合到页面里,虽然这个已经比全页面返回高效很多,但是他还是有问题的,服务端处理完请求最终返回结果其实都是很纯粹的数据,可是这些数据我们不得不转化为页面片段返回给浏览器,这本质是为纯粹的数据上加入了很多与服务端无用的结构,之所以说无用是因为浏览器自身也可以完成这些结构,为什么我们一定要让服务端做这个事情了?


        如是乎javascript的模板技术出现了,这些模板技术和jsp,velocity类似,只不过它们是通过javascript设计的模板语言,有了javascript模板语言,服务端可以完全不用考虑对页面的处理,它只需要将有效的数据返回到页面就行了,使用了javascript模板技术,可以让我们动静资源分离做的更加彻底,基本上所有的浏览器相关的东西都被静态化了,服务端只需要把最原始的数据传输到浏览器即可。讲到这里我们就说到了web前端最前沿的技术了:javascriptMVC架构了。


扩展:
       Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。

      也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。


如何做网站动静分离?

  在服务器层面:为静态资源准备专门的服务器,调优参数,与动态资源服务器分开。让静态资源分布在全国不同的服务器上,就近缓存到最近的服务器上。不再请求原有的真实的服务器,分担源服务器的压力。提高就近访问的速度。
而动态内容,反向拉取即可。这是我认为的服务器层面。
 
程序层面:让一次数据没有变化,查询没有变化的时候。属于将文件静态化了,一段时间不发生变化。 一个文章没有修改, 直接存于缓存。一个发布,不需要修改的,直接写成.shtml文件。我们都可以称之为临时静态化或者是持久静态化。
 
文件层面:将静态资源放至专门的域名,header头中不发送我cookie等信息。静态文件,单独存储,静态文压缩发送。

本文转自写个博客骗钱博客51CTO博客,原文链接http://blog.51cto.com/dadonggg/1952725如需转载请自行联系原作者


菜鸟东哥

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

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

相关文章

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站,提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面,同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能,继用于…

使用Nginx + Node.js部署你的网站(转)

转自:https://www.jianshu.com/p/717f2b88d057 Nginx是一个高性能的HTTP和反向代理服务器(反向代理就是通常所说的web服务器加速,它是一种通过在繁忙的web服务器和internet之间增加一个高速的web缓冲服务器来降低实际的web服务器的负载&#…

phpcms网站搬家 至 服务器 完整并且详细过程

想要自己的网站让人们看到那就要上传服务器空间后,这样才会通过搜索域名进行网页访问。 但是在上传的过程中肯定会有很多东西要修改,例如数据库怎么上传、路径怎么修改等。。。。。这些对于生手可能会慌乱,不用害怕! 这就让大家看…

制作chrome插件/扩展程序,禁止谷歌浏览器访问某些网站

简单地说,浏览器插件,可以大大的扩展你的浏览器的功能。包括但不仅限于这些功能: 捕捉特定网页的内容捕捉HTTP报文捕捉用户浏览动作,改变浏览器地址栏/起始页/书签/Tab等界面元素的行为与别的站点通信,修改网页内容………

把你开发的网站免费发布到互联网上

2019独角兽企业重金招聘Python工程师标准>>> 0. 前言 之前我们写过很多代码,但几乎都是在自己的电脑上运行的。如果别人要看,也只能在电脑上演示,或者把代码发给他运行。 而在学习 web 开发,比如 Django、Flask、webpy…

营销运作百科:全国公安机关互联网网站安全服务平台备案流程

最近速名网企业建站网站备案完成了。当然,作为一家合法经营的企业网站,建站之后肯定是要去公安系统备案的。现在国家也强制使用国内服务器的用于需要在规定时间30天内在全国互联网安全管理服务平台进行备案,理由其实很简单,因为防…

茶陵SEO优化网站关键词排名如何做才能上首页

今天速名网的主要话题就是围绕如何做好关键词“茶陵SEO”、“茶陵SEO优化”、“茶陵网站关键词排名”、“茶陵SEO关键词排名”、“茶陵关键词排名”的排名而设定的。你是否注意到从标题上,速名网就对关键词进行了拆分与组合,这就是SEO的魅力所在。它不具…

SEO网络营销培训机构都是如何给新手SEO培训的,新手SEO看完就知道套路,以后就不会上当受骗

SEO网络营销培训机构都是如何给新手SEO培训的?如题,今天速名网就来给大家聊聊SEO培训这个话题。诚然,SEO网络营销听起来就很高大上,但是在如今各大平台圈流量形成闭环的情况对于SEO行业来说都是一个寒冬。尤其是短视频营销&#x…

新开网站不收录的原因及解决方法有哪些

新开一个网站发现一个月了收录很少,那么新开网站不收录的原因及解决方法有哪些呢?速名网长期研究SEO优化,尤其是百度SEO关键词排名技术与算法,在实战中,我们总结了这样一条经验。在等待中爆发,做好原创内容…

网站域名对SEO优化的重要性分析

域名重要吗?绝对地。选择正确的域名是您营销策略的重要组成部分。您应该选择一个适合您公司品牌并且不太复杂的域名。名称本身也不是URL中唯一的考虑因素。公司应该考虑TLD(顶级域)部分。如果您的域是.com、.org或.computers(或其…

SEO优化百科:安防监控行业网站SEO优化关键词排名如何做

安防监控行业网站SEO优化关键词排名如何做?关于监控摄像头行业的关键词排名,速名网小编做这行业推广是相当有经验的。对于监控行业的推广模式,我们能够采取哪些手段来进行推广呢。 第一、确定关键词。一般而言,首先我们需要确定主关键词&am…

SEO百科:B2B平台SEO优化关键词排名如何做

在为B2B公司做SEO时,重要的是要记住,客户的交易过程比B2C长得多。这些购买规模更大,并且有更多的利益相关者参与了购买过程。因此,当您进行关键字研究时,您需要在整个消费者的过程中考虑关键字,将金字塔顶部…

国仁老猫:抖音影视剪辑5种赚钱方法、18个素材网站、8.0剪辑方法防判搬运(建议收藏)

2020年2月,毒舌电影COO、“毒sir”本人陈植雄在接受采访时说:“抖音影视号还是片蓝海”。 彼时,剪辑影视号在抖音还波澜未起。 半年过去,以毒舌电影(4105.7W粉丝)、贤于葛格(1986.9w粉丝&…

H5手机网站中插入天气预报代码,兼容手机和PC网站

效果如图 代码使用方法 <iframe scrolling"no" src"https://tianqiapi.com/api.php?styleya&skincucumber" frameborder"0" width"320" height"200" allowtransparency"true"></iframe>

semcms 网站漏洞挖掘过程与安全修复防范

2019独角兽企业重金招聘Python工程师标准>>> emcms是国内第一个开源外贸的网站管理系统&#xff0c;目前大多数的外贸网站都是用的semcms系统&#xff0c;该系统兼容许多浏览器&#xff0c;像IE,google,360极速浏览器都能非常好的兼容&#xff0c;官方semcms有php版…

quickGO:在线查询GO和GO注释信息的网站

欢迎关注”生信修炼手册”!quickGO是EMBL-EBI发布的网站&#xff0c;通过该网站&#xff0c;可以快速的查询Go Terms和Go注释相关信息&#xff0c;官网如下https://www.ebi.ac.uk/QuickGO/通过首页的搜索框&#xff0c;可以快速进行检索。在搜索框中可以输入3种类型的信息GO nu…

浅谈前端与SEO

转载地址&#xff1a; https://blog.csdn.net/lzm18064126848/article/details/53385274?tdsourcetags_pctim_aiomsg SEO&#xff08;Search Engine Optimization&#xff09;&#xff0c;就是传说中的搜索引擎优化&#xff0c;是指为了增加网页在搜索引擎自然搜索结果中的收录…

APP网站安全漏洞检测服务的详细介绍

关于APP漏洞检测&#xff0c;分为两个层面的安全检测&#xff0c;包括手机应用层&#xff0c;以及APP代码层&#xff0c;与网站的漏洞检测基本上差不多&#xff0c;目前越来越多的手机应用都存在着漏洞&#xff0c;关于如何对APP进行漏洞检测&#xff0c;我们详细的介绍一下. A…

软件界面是怎么做出来的_高端网站是怎么做出来的

一个网站要想有效果&#xff0c;就要在一开始建设的时候做好。高端网站为什么说“高”呢&#xff0c;主要是它高在质量&#xff0c;高在它能突显网站的特色&#xff0c;而不是那种千篇一律的低端网站。它为企业带来的价值要远远高于低端网站&#xff0c;所以这就是高端网站“高…

使用Scrapy抓取需要登录的网站

经常在爬有些网站的时候需要登录&#xff0c;大多数网站需要你提供一个用户名和密码&#xff0c;在这种情况下&#xff0c;需要先向网站发送一个POST请求。可以使用Scrapy的FormRequest类&#xff0c;这个类和Request类很相似&#xff0c;只是多了一个extra参数&#xff0c;用这…