网站静态化处理—动静整合方案(2)

news/2024/5/10 10:46:55/文章来源:https://blog.csdn.net/weixin_34203426/article/details/93144567

  上篇文章我简要的介绍了下网站静态化的演进过程,有朋友可能认为这些知识有点过于稀松平常了,而且网站静态化的技术基点也不是那么高深和难以理解,因此它和时下日新月异的web前端技术相比,就显得不伦不类了。其实当我打算写本系列的之前我个人觉得web前端有一个点是很多人都知道重要,但是有常常低估它作用的,那就是web前端和web服务端如何融合的这个点上,这个点再加上我们要做出一个规模庞大,高并发,快速响应的网站时候它对于web前端的架构技术的演进起到了一个不可忽视的作用。

  网站的web前端要实现高效,第一个要解决的短板就是网络的延迟性对网站的加载效率的影响,当然很多人会说网速快不快这是网络运营商的问题,不是网站的问题,但是大家肯定也见过就算我们用上了千兆宽带也会有些网站加载速度慢的让人无法忍受,网站本身的确是没法控制网络速度的能力,但是如果我们不降低网络对页面加载效率的影响,其他任何优化网站的手段也就无从谈起,原因就是网络效率对于网页加载效率的影响是起到大头作用的,只有这个大头被解决了,那么解决其他的小头才能发挥作用。

  回到上文讲到的网站静态化的关键点动静分离,解决这个关键点的本质就是为了降低网速对网站加载效率的影响,但是我们在处理动静分离问题时候采取的策略不同会对我们整个网站架构产生重大影响,特别是将网页做好动静拆分后,静态的资源尽力向浏览器端推移,这就导致了前端架构出现了以前服务端才有的MVC模式,这就导致web前端架构产生了质的变化,如是一些原来适用于flash这样的重客户端的技术也被传统的web前端所采用,MVC模式在web前端进一步演进由此而出现了MVP(Model-View-Presenter)模式,MVVM(Model-View-ViewModel)模式。也许上篇文章里有人对讲述动静分离的原理有点异议,但是当今日新月异的web前端技术就是这些常见技术不断演化而来,这就是我上篇想表达的内容,我觉得这个系列的特点应该是细节,这是和上个系列存储的瓶颈注重思想是有所不同的。

  动态网站最难以动静分离的就是页面了,其他的静态资源例如:图片、外部脚本文件等等这些和静态网站的手法基本一致,其实业界很早就关注了动态网站的动静分离问题,并且为不同的动静分离方案都进行了总结,今天我就介绍下这些技术。本人web服务端的工作语言是java,因此下面服务端的例子是使用java的web技术阐述的,其他语言例如php都有与之对应的技术,所以请那些不是使用java作为服务端工作语言的朋友可以类比学习。

  在java的web开发里,页面技术jsp本身就包含了将页面动静分离的手段,例如下面的代码:

复制代码
<%@ include file=”header.jsp” %><body>……….<%@ include file=”footer.jsp” %>
复制代码

  一般一个网站的头部和尾部都是一样,因此我们把头部的代码单独放置在一个header.jsp页面里,页面尾部的代码放置下footer.jsp页面里,这样技术人员在开发页面时候就不再需要重复编写这些重复的代码,只需要引用即可,这个做法最大的好处就是可以避免不同页面在相同代码这块的不一致性,假如没有这个统一引用的话,手动编写或者复制和粘贴,出错的概率是非常的高的。

  但是这个做法有一个问题,问题就是这种动静分离其实都是作用于单个页面的,也就是说每个页面都要手动的重复这个动静分离的操作,大多数情况这种做法都不会有什么问题,但是对于一个大型网站而言这种做法就有可能会制造不必要的麻烦,这里我截取了一张京东的首页,如下图所示:

 

  讲述前我要事先声明下,京东网站可能不存在我要讲述的问题,我这里只是使用京东网站的首页做例子来说明,看图里的首页和食品两个条目,有些公司做这样的网站时候这些导航进入的页面会是一个独立的工程,每个工程都是由独立的项目组开发维护的,虽然项目组不同但是他们页面的整体结构会是一致的,如果按照上面的动静分离手段,那么每个项目组都要独立维护一份相同的头部尾部资源,这个时候麻烦来了,如果该公司要新增个新的条目,那么每个项目组都要更新自己不变的资源,如果该企业一共分了5个项目组,现在又做了一个新的条目,那么其他与之无关的项目组都得折腾一次更改统一引用文件的工作,要是做的不仔细就有可能出现页面展示不一致的问题,为了解决这个问题,java的web开发里就会考虑使用模板语言替代jsp页面技术,例如模板语言velocity,这些模板语言都包含一个布局的功能,例如velocity就有这样的功能,我们看看velocity的布局模板实例,如下所示:

复制代码
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>#springMessage("page_upop_title")</title><meta http-equiv="X-UA-Compatible" content="requiresActiveX=true"/><meta name="keywords" content='#springMessage("page_upop_keywords")'/><meta content='#springMessage("page_upop_description")' name="description"/></head><body oncontextmenu="return false" onselectstart="return false">#if($pageHead)#parse($pageHead)#end$screen_content#parse($page_footer)</body></html>
复制代码

  页面里我们可以引入这个布局格式,这个布局文件其实就是页面里不变的东西抽取了出来,它完成了页面动静分离,页面只要应用这个布局文件即可,到了这里这个布局文件和前面的include方式区别不大,那么我们再看看下面的代码:

<property name="layoutUrl" value="layout/default.vm"/><!--指定layout文件-->

 

  这是布局文件的引用方式,我们可以把布局文件放置在网络上,项目里应用这个文件所在地址即可,这样我们就把项目里不变的静态资源抽取在同一个地方,如果在碰到布局要做修改,那么我们只需要改一个地方即可。

  不管服务端采取何种动静分离,动静资源的整合都是有服务端完成,按照上文提到网站静态化的思想,这些做法不会给网站性能提升带来任何好处,它们只是给开发,运维提供了便利而已,按前文的思路,我们要把动静分离往前移,服务端往前移碰到的第一个点就是静态的web服务器例如apache或ngnix。

  在讲解静态的web服务器动静分离前我要先讲一下为什么我们要在服务端前面加个静态web服务器的道理。我个人觉得在每个服务端之前都布置一个静态web服务器,该服务器起到一个反向代理的作用,而且我觉得不管我们是否使用CDN,最好都这么做,这么做有如下好处:

  好处一:方便日志的记录。

  好处二:在服务端之前设立了一个安全屏障,即静态web服务器可以在必要时候过滤有害的请求。

  好处三:可以控制流入到服务端的请求个数,当并发很高时候,可以利用静态web服务器能承担更高并发的能力来缓冲服务端的压力,这里我补充一些实践技巧,以java里常用的web容器tomcat为例,一般官方给出它的最大并发数应该不会超过200,如果我们在tomcat前放置了一个apache服务器,那么我们可以把tomcat的最大并发数设置为无效大,把并发数的控制放置在apache这边控制,这么做会给我们系统运维带来很大的好处,tomcat虽然有一个建议最大并发数,但是实际运行里java的web容器到底能承受多大并发其实要看具体场景了,因此我们如果可以动态控制apache的并发数,这个操作很方便的,那么我们就可以动态的调整tomcat这样容器的承载能力。

  好处四:可以便于我们做动静分离

  这里我们以apache为例子讲解将动静分离前移到apache的一些做法,apache有一个功能叫做SSI,英文全称是Server Side Include,页面上我们一般这样使用SSI,SSI有一种标签,例如:

<!--#include file="info.htm"-->

 

  页面一般使用注释的方式引入,这个和jsp的引入有点区别的,SSI的做法其实和服务端的引入类似,只不过使用SSI将本来服务端做的动静整合交由了apache完成了,我们可以把静态文件直接放置在Apache这里,如果这个静态web服务器上升到CDN,那么这些静态资源就可以在靠近用户的地方使用,SSI说白了就是像apache这样的静态资源服务器接收到服务端返回后,将一部分内容插入到页面了,然后将完整页面返回至浏览器。这个做法如果优化的得当,可以很好的提升网站的加载效率。

  Apache这样的静态资源服务器还支持一种动静整合的技术,这个技术就是ESi,它的英文全称叫做Edge Side Includes,它和SSI功能类似,它的用法如下所示:

<esi:include src="test.vm.esi?id=100" max-age="45"/>

 

    它和SSI区别,使用esi标签获取的资源来自于缓存服务器,它和SSI相比有明显的性能优势,其实网页特别是一个复杂的网页我们做了动静分离后静态的资源本身还可以拆分,有的部分缓存的时间会长点,有点会短点,其实网页里某些动态内容本身在一定时间里有些资源也是不会发生变化的,那么这些内容我们可以将其存入到缓存服务器上,这些缓存服务器可以根据页esi传来的命令将各个不同的缓存内容整合在一起,由此我们可以发现使用esi我们会享受如下优点:
     优点一:静态资源会存放在缓存里,那么获取静态资源的效率会更高。
     优点二:根据静态资源的时效性,我们可以对不同的静态资源设置不同的缓存策略,这就增加了动静分离方案的灵活性。
     优点三:缓存的文件的合并交由缓存服务器完成,这样就减少了web服务器本身抓取文件的开销,从而达到提升web服务器的并发处理能力,从而达到提升网站访问效率的目的。
 
(友情提示:ESI这块我还了解的不太深入,听说它其实可以直接使用在jboss上,相关知识我还要继续收集资料学习)

    SSI和ESI是静态web服务器处理动静资源整合的手段,那么我们再把动静整合操作往前移,这个时候就到了浏览器端了。浏览器端的动静整合的技术称之为CSI,英文全称叫做Client Side Includes,这个技术就是时下javascriptMVC、MVVM以及MVP技术采取的手段,实现CSI一般是采用异步请求的方式进行,在ajax技术还没出现的年代我们一般采取iframe的方式,不过使用CSI技术页面加载就会被人为分成两次,一次是加载静态资源,等静态资源加载完毕,启动异步请求加载动态资源,这么一做的确会发生有朋友提到的一种加载延迟的问题,这个延迟我们可以使用适当的策略来解决的,关于CSI的使用是本系列的重点,我会在后面文章里重点讲解。 

 

    原文:http://www.cnblogs.com/sharpxiajun/p/4314387.html

转载于:https://www.cnblogs.com/lyjing/p/7571035.html

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

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

相关文章

样式问题-如何一次性设置网站英文字体样式,中文字体等样式

异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 今天才发现&#xff0c;CSS 的 font-family 属性 的基本能力之一就是依其列表内字体的排序&#xff08;优先级&#xff09;来显示文字。 如果设定为「font-family: "英文字体", "中文字…

大型网站的灵魂——性能

前言 在前一篇随笔《大型网站系统架构的演化》中&#xff0c;介绍了大型网站的演化过程&#xff0c;期间穿插了一些技术和手段&#xff0c;我们可以从中看出一个大型网站的轮廓&#xff0c;但想要掌握设计开发维护大型网站的技术&#xff0c;需要我们一步一步去研究实践。所以我…

Go学习笔记 - 第一个小网站【helloworld】

效果如图&#xff1a; main.go文件代码如下&#xff1a; package mainimport "fmt" import "net/http"func main() {fmt.Printf("网站开始运行&#xff0c;地址&#xff1a;http://localhost:8080")http.HandleFunc("/", func(write…

一个母婴电子商务网站贝贝网的大数据平台及机器学习实践【转】

关键字&#xff1a;大数据平台、机器学习 贝贝网的主要产品是垂直的母婴类&#xff0c;母婴相对一般的电子商务网站有一些特点&#xff1a;第一个特点是商品周期短&#xff0c;在母婴网站上的商品&#xff0c;在线的时间不会超过5-7天&#xff0c;第二个是用户需求的变化快&…

SEO人员:如何快速诊断竞争对手网站!

古语有云&#xff1a;知己知彼百战不殆&#xff0c;更好的洞悉竞争对手&#xff0c;对于SEO而言&#xff0c;往往事半功倍&#xff0c;特别是对于初入行业的网站&#xff0c;审查竞争对手的网站&#xff0c;有利于快速寻找突破口&#xff0c;建立差异化。那么&#xff0c;SEO人…

Accept-Language与多语言网站应用

Accept-Language 我们能从请求头中获取到浏览器愿意接收的语言类型 let http require(http); http.createServer(function(req,res){res.end(req.headers[accept-language]); }).listen(8080);<<< 输出 zh-CN,zh;q0.9其中多种语言之间用,隔开&#xff0c;而每种语言…

前端页面有那个html还是jsp(扩展ajax对seo的影响)

2019独角兽企业重金招聘Python工程师标准>>> html&#xff1a;前端页面给普通用户看的&#xff0c;访问速度要快&#xff0c;能做到前后端分离 使用html&#xff0c;比如是登录注册功能&#xff0c;我们提交的表单数据从servlet回来的数据不能直接放到html中显示。我…

《时代》评出50个最酷网站 25个网站非上不可

从2003年开始&#xff0c;《时代》周刊每年都会评选出一系列最受欢迎的网站&#xff0c;在这些网站身上我们不难看出互联网的变革与发展&#xff0c;同时清楚的认识到什么样的网站能够引领潮流。北京时间7月10日&#xff0c;美国《时代》周刊近日公布了2007年50个最受欢迎的网站…

19款网站常见多图片自动轮播banner源码

收集到的,希望能对大家有用 19款网站常见多图片自动轮播banner源码http://bbs.blueidea.com/thread-2729702-1-1.html点击图片进入下载页 点击文字查看效果演示韩国滚动图片banner17(仿三维空间前后替换)韩国滚动图片banner16(左右滚动)韩国滚动图片banner15(定时滚动)韩国滚动…

asp.net printbodyhtml.innerhtml 该内容不是文本_杭州诠网科技解析优化要如何避免网站内容的雷同?...

原标题&#xff1a;杭州诠网科技解析优化要如何避免网站内容的雷同&#xff1f;现在很多企业网站都是同一套网站代码做出来的&#xff0c;如果一套代码用的人多了&#xff0c;那么势必会导致网上很多雷同的网站&#xff0c;那么企业要如何避免网站内容重复呢&#xff0c;如何做…

网站能正常登陆但是点进去出现404错误_虚拟主机迁移网站教程如何操作?虚拟主机迁移网站难吗?...

虚拟主机迁移网站教程如何操作&#xff1f;虚拟主机迁移网站难吗&#xff1f;虚拟主机是现在很多企业网站建设的优先选择&#xff0c;因为虚机主机建站的成本是比较小的&#xff0c;也能满足企业网站的日常需要。但是总有一些站长租用的虚拟主机会出现各种问题&#xff0c;导致…

健康世界官方网站绿色健康知识门户网站源码-www.jiankangshijie.com

健康世界官方网站绿色健康知识门户网站源码 数据量&#xff1a;37000条左右 在线演示&#xff1a;健康世界官方网站 http://www.jiankangshijie.com 程序大小&#xff1a;495M 模板&#xff1a;DIVCSS 地址&#xff1a;http://www.bbscms.net/html/cmsmb/dedecms/20111231/4506…

php8网站,PHP8新特性解读(开发代码实例演示)

“本文主要内容为解读PHP8.0的主要新特性”PHP8新特性前言PHP8在2020年11月26日正式发布&#xff0c;又一个里程碑到来。根据官网的信息目前已经发布到了8.0.2版本&#xff0c;但目前许多的项目还是保持在5.6版本&#xff0c;旧的不去新的不来&#xff0c;如有实际需要该升级升…

网盘网站需要多大的服务器,一个网站服务器需要多大内存

一个网站服务器需要多大内存 内容精选换一换使用华为云备案系统时&#xff0c;全国互联网安全管理服务平台会有一些限制条件&#xff0c;具体限制条件请参见表1。一个网站可以绑定多个域名。注册多个不同的域名&#xff0c;并且将这些域名绑定到同一个网站上&#xff0c;可以让…

10个帮程序员减压放松的网站

同学们工作之余&#xff0c;不妨放下微博跟朋友圈&#xff0c;来这10个网站感受一下看着就醉了的情境&#xff1a;「念完往上一推音乐键&#xff0c;我往后一靠&#xff0c;潮乎乎的软皮耳机里头&#xff0c;音乐排山倒海。」今天推荐的网站&#xff0c;利用代入感强的图片与音…

抓取网站中的视频

最近想从别人家的网站宣传片上提取一些素材&#xff0c;借鉴一下。之前也没有弄过&#xff0c;但是我的思路就是从网页的缓存中查找播放完后缓存的视频。然后失败了。然后又想到了网页打开源代码&#xff0c;然后查找到网页源代码饮用的视频的路径&#xff0c;然后找到视频。然…

个人网站上线

网址&#xff1a; http://cross.withiter.com/ 花了2周业余时间&#xff0c;终于可以上线了。网站用的最简单的JSP Servlet MongoDB开发的。很简洁。贴几张截图吧&#xff1a; 转载于:https://www.cnblogs.com/snake-hand/p/3188397.html

win7安装IIS及将网站发布到IIS上

1. WIN7安装IIS: 控制面板----程序和功能-----打开或关闭windows功能&#xff0c;如图 展开Internet信息服务&#xff0c;按照下图方式进行选择&#xff0c;然后单击“确定”&#xff0c;等待几分钟就安装好了 2. 注册IIS 因为我们是先安装的VS&#xff0c;后安装的IIS&#x…

WordPress 3.8 中文正式版下载 - 建站与学习首选!全球最流行的开源PHP博客网站程序...

转载自&#xff1a;http://www.iplaysoft.com/wordpress.html 话说虽然我一直都在网站底部写着本站基于 WordPress 构建&#xff0c;但时常还是有人问我网站是用什么程序建的&#xff0c;还真有点无语。看到 WP 又有新版本发布&#xff0c;那就顺势发篇文推荐下它吧。 WordPres…

在IIS6,7中部署ASP.NET网站

查看web.config文件 ASP.NET网站与一般的桌面程序不同&#xff0c;不是拷贝过来就能运行的&#xff08;数据库连接除外&#xff09;。 要想运行它&#xff0c;通常需要一些配置过程。但是&#xff0c;我们到底需要配置什么呢&#xff1f;答案是&#xff1a;查看web.config web.…