精华内容
下载资源
问答
  • 页面静态化的意义
    千次阅读
    2015-11-17 18:46:15
       为什么要让网页静态化,生成静态的程序来做网站的好处?
       
         在三年前,有百分之八十的网站要求做成动态的。也就是从那个时候也就是ASP的发展高峰期。一些静态网页也要求做成动态网站。但是这二年来,网站要求做成静态的。也就是网页要求静态化。
         为什么会有这样的变化?到底意味着什么?
         目前网页HTML静态化是利用其它的动态技术生成HTML静态页面,还不是静态网站。因为的确是这样的,生成HTML静态网页有一定的好处。
         一、加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高;
         二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;
         三、减轻服务器负担,浏览网页无需调用系统数据库;
         四、网站更安全,HTML页面不会受Asp相关漏洞的影响;
         观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。数据库出错时,不影响网站正常访问。
         生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。
         说法一:
         1、省掉了服务器处理时间和调用数据库的时间访问速度比一般动态网站快10-20倍;
         2、不用调用数据库服务器端的CPU调用大大减少增加服务器的性能;
         3、生成静态路径利用搜索引擎的抓取和收录;
         4、在排名中静态页面的排名权重要高于动态路径的页面。
         说法二:
         1、安全,静态页面从理论上讲是没有攻击漏洞的;
         2、没有数据库访问或减少服务器对数据响应的负荷,速度快;
         3、化化引擎,易于搜索引擎收录,搜索引擎比较喜欢收录静态页面;
         4、降低服务器的承受能力,因为其不需要解析就可以返回客户端,因此减少了服务器的工作量,同时也减少了数据库的成本;
         5、有意义的文件名,提高了可用性(对中文似乎就没这个优势了吧) 。
         说法三:
         提问:ASP生成静态HTML后更有利于搜索引擎收录吗?为什么?
         答:是的,静态HTML更有利于搜索引擎收录。
         因为静态网页和动态网页的区别在于动态网页可以给于浏览者权限,而搜索引擎抓取的时候是以游客身份进入的,所以不容易被抓取和收录,而静态网页由于不存在页面权限问题,所以更容易被收录,相对来说如果你的动态页面没有加任何权限的话也同样容易备收录!例如不生成静态页面的博客ASP PHP .net CGI的论坛只要没有访问权限限制都会被收录!
         从以上的观点可以看出生成静态页面的好处。现在知名、主流的大站基本上都静下来了。
    更多相关内容
  • springboot的页面静态化,使用Thymeleaf技术,完成一个很小的demo,就是普通的遍历,其他没有增加,需要网站学习新的标签完成
  • 主要为大家介绍了Wordpress页面静态化与静态文件不生成的解决方法,涉及针对cos-html-cache 2.7.3插件的使用技巧,非常具有实用价值,需要的朋友可以参考下
  • thymeleaf页面静态化,springboot和springcloud官方推荐使用
  • cms页面静态化源码

    2017-10-19 13:07:34
    cms内容静态化,电子网页静态化等,linux文件复制等----
  • java 页面静态化

    2019-03-31 01:48:24
    NULL 博文链接:https://xh584990686.iteye.com/blog/1392265
  • 页面静态化是我们在开发网站的时候经常需要的一个功能,下面这篇文章主要给大家介绍了关于ThinkPHP 3.2.3实现页面静态化功能的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 页面静态化

    万次阅读 多人点赞 2017-04-08 21:34:34
     如果每次访问动态的网页该网页的内容都是完全不同的,也许我们就没有必要写网站静态化的主题了,现实中的动态网页往往只是其中一部分会发生变化,例如电商网站的菜单、页面头部、页面尾部这些其实都不会经常发生...

    原文:http://blog.jobbole.com/84200/

    http://blog.jobbole.com/84328/

    一、简介


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

      大型动态网站之所以可以做到能快速响应高并发,它们都是尽量让自己的网站静态化,当然这种静态化绝不是把网站就做成静态网站,而是在充分理解了静态网站在提升网站响应速度的基础上对动态网站进行改良。网站静态化的关键点是动静分离,解决这个关键点的本质就是为了降低网速对网站加载效率的影响/

      静态网站非常简单,它就是通过一个url访问web服务器上的一个网页,web服务器接收到请求后在网络上使用http协议将网页返回给浏览器,浏览器通过解析http协议最终将页面展示在浏览器里,有时这个网页会比较复杂点,里面包含了一些额外的资源例如:图片、外部的css文件、外部的js文件以及一些flash之类的多媒体资源,这些资源会单独使用http协议把信息返回给浏览器,浏览器从页面里的src,href、Object这样的标签将这些资源和页面组合在一起,最终在浏览器里展示页面。但是不管什么类型的资源,这些资源如果我们不是手动的改变它们,那么我们每次请求获得结果都是一样的。这就说明静态网页的一个特点:静态网页的资源基本是不会发生变化的。因此我们第一次访问一个静态网页和我们以后访问这个静态网页都是一个重复的请求,这种网站加载的速度基本都是由网络传输的速度,以及每个资源请求的大小所决定,既然访问的资源基本不会发生变化,那么我们重复请求这些资源,自己在那里空等不是很浪费时间吗?如是乎,浏览器出现了缓存技术,我们开发时候可以对那些不变的资源在http协议上编写相应指令,这些指令会让浏览器第一次访问到静态资源后缓存起这些静态资源,用户第二次访问这个网页时候就不再需要重复请求了,因为请求资源本地缓存,那么获取它的效率就变得异常高效。

    二、CDN技术

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

      CDN技术应该由三个步骤组成,首先是解析DNS,找到离用户最近的CDN服务器,接下来CDN要做一下负载均衡,根据负载均衡策略将请求落地到最合适的一个服务器上,如果CDN服务器上就有用户所需要的静态资源,那么这个资源就会直接返回给浏览器,如果没有CDN服务器会请求远端的服务器,拉取资源再把资源返回给浏览器,如此同时拉取的资源也被缓存在CDN服务器上,下次访问就不需要在请求远端的服务器了,CDN存储资源的方式使用的是缓存,这个缓存的载体是和apache,nginx类似的服务器,我们一般称之为http加速器,之所以成为http加速器是为了和传统静态web服务器区别开来,传统的静态资源服务器一般都是从持久化设备上读取文件,而http加速器则是从内存里读取,不过具体存储的计算模型会根据硬件特点做优化使得资源读取的效率更高,常见的http加速器有varnish,squid。Ngnix加上缓存模块也是可以当做http加速器使用的,不管使用什么技术CDN的服务器基本都是做一个就近的缓存操作

    三、减少http请求

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

    四、动静分离

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

      首先动态网站和静态网站有何不同呢?我觉得动态网站和静态网站的区别就是动态网站网页虽然也有一个url,但是动态网站网页的内容根据条件不同是会发生改变的,而且这些变化的内容却是同一个url,url在静态网站里就是一个资源的地址,那么在动态网站里一个地址指向的资源其实是不同的。因为这种不同所以我们没法把动态的网页进行有效的缓存,而且不恰当的使用缓存还会引发错误,所以在动态网页里我们会在meta设定页面不会被浏览器缓存。
       如果每次访问动态的网页该网页的内容都是完全不同的,也许我们就没有必要写网站静态化的主题了,现实中的动态网页往往只是其中一部分会发生变化,例如电商网站的菜单、页面头部、页面尾部这些其实都不会经常发生变化,如果我们只是因为网页一小部分经常变化让用户每次请求都要重复访问这些重复的资源,这其实是非常消耗计算资源了,我们来做个计算吧,假如一个动态页面这些不变的内容有10k,该网页一天有1000万次的访问量,那么每天将消耗掉1亿kb的网络资源,这个其实很不划算的,而且这些重复消耗的宽带资源并没有为网站的用户体验带来好处,相反还拖慢了网页加载的效率。那么我们就得考虑拆分网页了,把网页做一个动静分离,让静态的部分当做不变的静态资源进行处理,动态的内容还是动态处理,然后在合适的地方将动静内容合并在一起。


    五、动静合并

    内容动静分离后,需要把他组合起来,即动静合并。动静合并的位置非常的关键,这个位置的选择会直接导致我们整个web前端的架构设计。

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

    1
    2
    3
    4
    5
    6
    7
    <%@ include file=”header.jsp” %>
     
    < body >
     
              ……….
     
    <%@ include file=”footer.jsp” %>

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    < 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方式区别不大,那么我们再看看下面的代码:

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

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

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

    (1)web服务器的动静合并

    java的web开发里我们一般使用jsp来编写页面,当然也可以使用先进点的模板引擎开发页面例如velocity,freemark等,不管我们页面使用的是jsp还是模板引擎,这些类似html的文件其实并不是真正的html,例如jsp本质其实是个servlet也就是一个java程序,所以它们的本质是服务端语言和html的一个整合技术,在实际运行中web容器会根据服务端的返回数据将jsp或模板引擎解析成浏览器能解析的html,然后传输这个html到浏览器进行解析。由此可见服务端语言提供的开发页面的技术其实是动静无法分离的源头,但是这些技术可以很好的完成动静资源中的动的内容,因此我们想做动静分离那么首先就要把静的资源从jsp或者模板语言里抽取出来,抽取出来的静态资源当然就要交给静态的web服务器来处理,我们常用的静态资源服务器一般是apache或ngnix,所以这些静态资源应该放置在这样的服务器上,那么我们是否可以在这些静态web服务器上做动静结合呢?答案是还真行,例如apache服务器有个模块就可以将它自身存储的静态资源和服务端传输的资源整合在一起,这种技术叫做ESI、SSI,这个时候我们可以把不变的静态内容制作成模板放置在静态服务器上,动态内容达到静态资源服务器时候,使用ESI或者SSI的标签,把动静内容结合在一起,这就完成了一个动静结合操作。

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

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

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

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

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

    SSI

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

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

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

    ESI

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

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

    它和SSI区别,使用esi标签获取的资源来自于缓存服务器,它和SSI相比有明显的性能优势,其实网页特别是一个复杂的网页我们做了动静分离后静态的资源本身还可以拆分,有的部分缓存的时间会长点,有点会短点,其实网页里某些动态内容本身在一定时间里有些资源也是不会发生变化的,那么这些内容我们可以将其存入到缓存服务器上,这些缓存服务器可以根据页esi传来的命令将各个不同的缓存内容整合在一起,由此我们可以发现使用esi我们会享受如下优点:

    优点一:静态资源会存放在缓存里,那么获取静态资源的效率会更高。

    优点二:根据静态资源的时效性,我们可以对不同的静态资源设置不同的缓存策略,这就增加了动静分离方案的灵活性。

    优点三:缓存的文件的合并交由缓存服务器完成,这样就减少了web服务器本身抓取文件的开销,从而达到提升web服务器的并发处理能力,从而达到提升网站访问效率的目的。

    关于ESI的更多内容请参考《大型网站之网站静态化(ESI)

    (2)CDN的动静合并

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

    (3)ajax的动静合并
    SSI和ESI是静态web服务器处理动静资源整合的手段,那么我们把这个动静结合点再往前推,推到浏览器,浏览器能做到这件事情吗?如果浏览器可以,那么静态资源也就可以缓存在客户端了,这比缓存在CDN效率还要高,其实浏览器还真的可以做到这点,特别是ajax技术出现后,浏览器来整合这个动静资源也就变得更加容易了。浏览器端的动静整合的技术称之为CSI,英文全称叫做Client Side Includes,这个技术就是时下javascriptMVC、MVVM以及MVP技术采取的手段,实现CSI一般是采用异步请求的方式进行,在ajax技术还没出现的年代我们一般采取iframe的方式,不过使用CSI技术页面加载就会被人为分成两次,一次是加载静态资源,等静态资源加载完毕,启动异步请求加载动态资源,这么一做的确会发生有朋友提到的一种加载延迟的问题,这个延迟我们可以使用适当的策略来解决的.

      ajax是CSI的一种技术手段。不过一般而言,我们使用ajax做动静分离都是都是从服务端请求一个html片段,到了浏览器后,使用dom技术将这个片段整合到页面里.

    (4)javascriptMVC架构

    虽然在浏览器使用ajax来进行动静分离和合并已经比全页面返回高效很多,但是他还是有问题的,服务端处理完请求最终返回结果其实都是很纯粹的数据,可是这些数据我们不得不转化为页面片段返回给浏览器,这本质是为纯粹的数据上加入了很多与服务端无用的结构,之所以说无用是因为浏览器自身也可以完成这些结构,为什么我们一定要让服务端做这个事情了?如是乎JavaScript的模板技术出现了,这些模板技术和jsp,velocity类似,只不过它们是通过javascript设计的模板语言,有了javascript模板语言,服务端可以完全不用考虑对页面的处理,它只需要将有效的数据返回到页面就行了,使用了javascript模板技术,可以让我们动静资源分离做的更加彻底,基本上所有的浏览器相关的东西都被静态化了,服务端只需要把最原始的数据传输到浏览器即可。讲到这里我们就说到了web前端最前沿的技术了:javascriptMVC架构了。关于此的更多内容请参考《大型网站之网站静态化(javascriptMVC架构

    六、Web前端优化

    关于Web前端优化的请参考《Web前端优化最佳实践及工具集锦》,《探真无阻塞加载javascript脚本技术》,《【Web优化】Yslow优化法则(汇总篇)

    七、总结

      在web开发里,除了需要浏览器处理的,其他技术都可以当做服务端来理解,如果我们网站使用到了CDN,使用到了静态web服务器例如apache,以及服务端的web容器例如jboss,那么按请求的行进路径,我们结果处理越早那么网站响应效率也就越高,所以当请求在CDN返回了,那么肯定比在apache返回效率高,在apache就返回了肯定比jboss返回的效率高,再则服务端的web容器本身因为服务端程序运行要消耗部分系统资源,所以它在处理请求的效率会比CDN和apache差很多,所以当我们按照动静分离策略拆分出了静态资源后,这个资源能不放在最底层的服务端的web容器处理就不要放在服务端的web容器里处理。

    展开全文
  • JSP页面静态化总结_动态页面变为静态页面以减少访问数据库的次数提高速度.zip
  • 主要介绍了PHP实现HTML页面静态化的方法,分享了静态处理的方法,静态处理后的优势,并提供了多种静态的方法,感兴趣的小伙伴们可以参考一下
  • PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同。 为什么要让网页静态化 一、加快页面打开浏览速度,静态...
  • 本文实例讲述了PHP页面静态化——纯静态与伪静态用法。分享给大家供大家参考,具体如下: 为什么要静态化页面?  当用户访问一个不经常更新的Web页面,PHP接到指示对php脚本文件进行解析,从数据库查询到该页面所...
  • 什么页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快;如果页面中一些内容不经常改动,动态页面静态...
  • JSP页面静态化

    2012-12-27 17:29:29
    包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。
  • openresty 页面静态化及多级缓存

    千次阅读 2021-03-14 17:47:18
    页面静态化

    openresty 页面静态化及多级缓存

    在这里插入图片描述

    多级缓存:

    • 数据缓存的好处不用介绍了吧!,
      所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。
    • 而 nginx 是可以缓存数据的,缓存在内存中,提高程序性能!
      程序中可以做缓存的技术有很多,加在以前就叫 多级缓存 而且不同的缓存技术存在,在不同的地方..实现不同的功能!
    • 目前我所知道可以做缓存的有:
      nginx —— Elasticearch —— redis —— @Ehcache JVM缓存 —— mybatis也有二级缓存!太强了!
      当然本章并不会讲解这么多,而是抽出几个来: nginx redis @Ehcache JVM缓存

    页面静态化 模板渲染

    • 动态web网页开发是Web开发中一个常见的场景
      比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现。
      而Lua中也有许多模板引擎 lua-resty-template 可以渲染很复杂的页面,借助LuaJIT其性能也是可以接受的。

    什么是动态页面?什么是静态页面?

    • 动态网页: 是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,
      根据用户的不同的操作,呈现出不同的数据给用户看;
      eg: 浏览器的 搜索~ 输入不同的关键字 会呈现给用户不同的内容;

    • 静态页面: 静态网页是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。
      静态页面需要占一定的服务器空间,且不能自主管理发布更新的页面,
      如果想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件修改(通过fso等技术例外)常见的静态页面举例:.html扩展名的、.htm扩展名的

    • 除了静态页面和动态页面还有一种的伪静态页面,在网站页面转化的时候大多转化成伪静态页面。

    为什么需要页面静态化

    • 网页静态化有利于搜索引擎收录,静态页面和动态页面想对比来说,搜索引擎更喜欢静态页面
      对于静态页面也更好抓取收录,这样对于网站优化来说有很大的好处,更利于排名
      你可以去观察那些大型的门户网站,比如新浪、阿里巴巴、百度等页面大多采用静态或伪静态页面来显示,可想而知,这足够说明了静态化带给网站很大好处。

    • 网页静态化有利于网站的稳定性
      首先从安全角度来看,静态页面不容易遭受黑客的攻击,
      黑客从你的网址中看不出你网站的后台、网站的程序、数据库的地址,这样就比动态页面要安全的多。
      还有就是静态页面不会因为程序、数据库等出问题,影响网站的正常打开静态页面会使网站更加稳定,增加网站的信任度。

    • 网页静态化有利于提高速度
      SEO网站优化的一个很重要的因素就是网站打开速度的快慢,打开速度越快,SEO优化效果越好…
      众所周知动态页面打开都是要调用数据库内容,这样就影响了网站速度,而静态页面则不用,减少了环节,提高了网站反映速度。

    实例Demo

    Boot 多级缓存设置:

    这里是 redis 和 Ehcache的Java代码缓存方式:不细致讲解可以了解:点击

    • Service层 —— Controller层——数据展示!
      在这里插入图片描述

    nginx 缓存 +页面静态化处理:

    当然主要是 lua ...

    info.lua

    -- 中文转码
    ngx.header.content_type="text/html;charset=utf8"
    -- 获取url	参数 
    local uri_args = ngx.req.get_uri_args()
    local goodsId = uri_args["goodsId"]
    -- 打印日志 
    ngx.log(ngx.ERR,"json------",goodsId)
    
    local cache_ngx = ngx.shared.my_cache  				-- nginx 缓存模板对象
    local goodsCacheKey = "goods:"..goodsId  			-- 设置key
    local goodsCache = cache_ngx:get(goodsCacheKey) 	-- 根据get(key); 获取缓存中数据!
    -- 判断是否存在数据 “” 或 nil 就发送请求....
    if goodsCache == "" or goodsCache == nil then
    local http = require("resty.http")
    local httpc = http.new()
    local resp, err = httpc:request_uri("http://127.0.0.1:6001",{
     method = "GET",
     path = "/showinfo/"..goodsId
    })
    -- 获取结果
    goodsCache = resp.body
    -- 设置缓存时间
    local expireTime = math.random(600,1200)
    -- set(key,value); 设置缓存
    cache_ngx:set(goodsCacheKey,goodsCache,expireTime)
    end
    
    -- 日志输出
    ngx.log(ngx.ERR,"json------",goodsCache)
    -- 获取到JSON 模板!
    local cjson = require("cjson")
    local goodsCacheJSON = cjson.decode(goodsCache) -- 结果数据转换成JSON
    -- 响应参数封装 context 
    local context = {
    goodsname = goodsCacheJSON.spu.name,
    img = goodsCacheJSON.spu.images,
    introduction = goodsCacheJSON.spu.introduction,
    specItems = goodsCacheJSON.spu.specItems
    }
    -- 获取模板对象。
    local template = require("resty.template")
    template.render("item.html", context)   		-- context 传入指定模板静态页面!
    

    缓存

    local cache_ngx = ngx.shared.my_cache  				-- nginx 缓存模板对象
    
    local goodsCache = cache_ngx:get(goodsCacheKey) 	-- 根据get(key); 获取缓存中数据!
    -- 判断是否存在数据 “” 或 nil 就发送请求....
    if goodsCache == "" or goodsCache == nil then
    	-- 请求数据通过set方法,根据指定key 设置缓存/缓存时间(建议随机预防 缓存雪崩!)
    	-- 设置缓存时间
    	local expireTime = math.random(600,1200)
    	-- set(key,value); 设置缓存
    	cache_ngx:set(goodsCacheKey,goodsCache,expireTime)
    end
    

    ok。以上就是nginx 设置缓存的基本结构语法… 总的来说并不难!


    页面静态化处理

    nginx lua 通过:lua-resty-template实现大体内容有:

    • 模板位置:从哪里查找模板;
    • 变量输出/转义:变量值输出;
    • 代码片段:执行代码片段,完成如if/else、for等复杂逻辑,调用对象函数/方法;
    • 注释:解释代码片段含义;
    • include:包含另一个模板片段;

    模板位置

    • 我们需要告诉lua-resty-template去哪儿加载我们的模块
      此处可以通过set指令定义 template_location、template_root 或者使用 root指令定义的位置加载

    nginx执行的配置文件:指定该请求下的模板位置
    lua.conf

    #给nginx 分内存 128m 兆  缓存大小!用于存放热点数据(频繁使用的数据!)
    lua_shared_dict my_cache 128m;
    
    #nginx服务
    server {
    	listen	9090;		#指定端口9090,默认80
    	server_name	_;
    
    	#静态资源管理模板地址...
    	set $template_location "/templates";
    	set $template_root "D:/WSMwork/www/templates";
    	
    	root D:/WSMwork/www/templates;  	# "指定要导入的模板路径!"  
    	#注意这里不能设置 中文地址!
    
    	location /info{
    		default_type text/html;
    		content_by_lua_file D:/WSMwork/www/info.lua;
    	}
    }
    

    在这里插入图片描述
    加载顺序

    • 通过ngx.location.capture从template_location查找,如果找到(状态为为200)则使用该内容作为模板;
      此种方式是一种动态获取模板方式;

    • 如果定义了template_root,则从该位置通过读取文件的方式加载模板

    • 如果没有定义template_root,则默认从root指令定义的document_root处加载模板。

    • 建议首先template_root
      尽量不要通过root指令定义的document_root加载,因为其本身的含义不是给本模板引擎使用的。

    这时候,静态数据就已将放在了nginx服务器中,启动运行…
    在这里插入图片描述

    • 可以直接通过,请求来获取到服务器上部署的文件…
    • 当然对于静态的 html css Js...一些文件进行配置!注意html文件中引入的外部样式路劲进行更改!

    lua 脚本控制静态页面:变量输出

    -- 获取到JSON 模板!
    local cjson = require("cjson")
    local goodsCacheJSON = cjson.decode(goodsCache) 	-- 返回结果数据转换成JSON
    -- 响应参数封装 context 
    local context = {
    goodsname = goodsCacheJSON.spu.name,
    img = goodsCacheJSON.spu.images,
    introduction = goodsCacheJSON.spu.introduction,
    specItems = goodsCacheJSON.spu.specItems
    }
    
    -- 获取模板对象。
    local template = require("resty.template")
    --是否缓存解析后的模板,默认true
    template.caching(true)
    template.render("item.html", context)   		-- context 传入指定模板静态页面!
    

    在这里插入图片描述

    • item.html 商品详情页面。
      nginx 可以通过 context 给静态化页面设置一些变量实现 伪静态化页面 {* 变量名 *} 页面中输出值!

    更多实例:

    lua脚本
    info1.lua

    -- 中文转码
    ngx.header.content_type="text/html;charset=utf8"
    local template = require("resty.template")
     
    local context = {
        title = "测试",
        name = "张三",
        description = "<script>alert(1);</script>",
        age = 20,
        hobby = {"电影", "音乐", "阅读"},
        score = {语文 = 90, 数学 = 80, 英语 = 70},
        score2 = {
            {name = "语文", score = 90},
            {name = "数学", score = 80},
            {name = "英语", score = 70},
        }
    }
    template.render("t3.html", context)
    
    • 文件保存 utf-8 …格式;

    静态页面:

    lua.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1> nginx页面静态化 </h1>
    
        {# 不转义变量输出 #}
        姓名:{* string.upper(name) *}<br/>
        
        {# 不转义输出,html形式输出,JS CSS 格式数据会成立! #}
        {* description *}
        {# 转义变量输出,已文本形式输出... #}
        简介:{{description}}<br/>
        
        {# 可以做一些运算 #}
        年龄: {* age + 1 *}<br/>
        
        {# 循环输出 #}
        爱好:
        {% for i, v in ipairs(hobby) do %}
           {% if i > 1 then %},{% end %}
           {* v *}
        {% end %}<br/>
    
        成绩:
        {% local i = 1; %}
        {% for k, v in pairs(score) do %}
           {% if i > 1 then %},{% end %}
           {* k *} = {* v *}
           {% i = i + 1 %}
        {% end %}<br/>
        
        成绩2:
        {% for i = 1, #score2 do local t = score2[i] %}
           {% if i > 1 then %},{% end %}
            {* t.name *} = {* t.score *}
        {% end %}<br/>
        
        {# 中间内容不解析 #}
        {-raw-}{(file)}{-raw-}
    
    	{# 引入外部文件 #}
        {(lua2.html)}
    </body>
    </html>
    

    lua2.html

    <h1> 引入外部lua2.html 代码</h1>
    
    • {(include_file)}:包含另一个模板文件,相当于引入外部的 html 代码片段;
    • {* var *}:变量输出;
    • {{ var }}:变量转义输出, 不已以html 语法进行转义输出,可以使用 JS CSS等标签…
    • {% code %}:lua代码片段;
    • {# comment #}:注释;
    • {-raw-} 中间的内容不会解析,作为纯文本输出;

    nginx配置文件
    lua.conf 添加

    location /info1{
    		default_type text/html;
    		content_by_lua_file D:/WSMwork/www/info1.lua;
    	}
    
    • 模板最终被转换为Lua代码进行执行,所以模板中可以执行任意Lua代码。
    • 如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet来执行;
      而lua-resty-template模板引擎可以认为是JSP,其最终会被翻译成Lua代码,然后通过ngx.print输出。

    测试:

    在这里插入图片描述


    展开全文
  • 动态页面静态化工具,其实就是用来实现动态网站的静态化处理,帮助大家定时刷新生成多个静态文件。动态页面静态化工具直接将网页转换成静态,加快网页浏览速度 动态页面静态化工具使用方法 1、点击并添加新的任务...
  • 一、什么静态页面1、在静态html页面中,用户通过Web...2、为了让静态页面更加漂亮美观,通常静态页面还使用了javascript、VBScript、ajax这些特效代码再借助浏览器呈现给用户,服务器上并没有什么变化。3、静...

    一、什么是静态页面

    1、在静态html页面中,用户通过Web浏览器HTTP协议向web服务器发送一个响应请求,告诉web服务器要浏览这个网站的哪个页面,接着根据用户的响应请求返回一个html页面给用户,经过浏览器渲染解析呈现在用户眼前。

    2、为了让静态页面更加漂亮美观,通常静态页面还使用了javascript、VBScript、ajax这些特效代码再借助浏览器呈现给用户,服务器上并没有什么变化。

    3、静态web页面是没有数据库文件的,所以不能连接网络数据库;

    4、静态web页面主是通过HTML代码开发设计的;

    5、部分静态web页面为了页面的好看,使用了大量的JS代码,导致静态web页面打开速度慢。

    二、动态web页面

    在动态web页面中,依然要通过web服务器的http协议或https协议响应才能返回结果给用户,用户所有请求都必须要通过web服务器处理才能实现。

    用户的响应请求是一个静态的html页面,只需要响应请求web服务器从系统中调出用户响应的内容,将内容返回给客户端浏览器进行处理,再返回给用户。

    7e6dbcab5d1f63c486a4f618cb8baa33.gif

    如果用户响应请求的是动态页面资源,例如.jsp/.asp/.aspx、/.php等,响应步骤是先将用户请求发送给web服务器,web服务器再从数据库调出有户请求的数据,调出数据后将所需要展示给用户的内容发送给服务器,最后通过web服务器将需要展示给用户的内容返回给用户浏览器解析执行,展示给用户。

    更深一步解析web的访问过程:用户访问web页面时,其实是直接访问的服务器上的web服务器上jsp页面,web服务器将用户响应请求快速进行处理,在jsp中完成设置字符集和取得表单参数后再调用web服务器,返回到jsp,jsp根据用户响应表求快速生成一个html页面,该页面会返回到服务器,再由服务器,通过response对象返回给客户端,来完成一个用户请求处理业务的过程。

    7e6dbcab5d1f63c486a4f618cb8baa33.gif

    为什么需要web服务器?(web server)

    1)无论是什么样的网络资源,当想要其它计算机进行访问的时候,就必须有一个通信程序,当有用户访问这个网络资源时,这个通信程序就自动读取这个web网络资源,将用户请求该问的网络资源返回给用户。

    2)web服务器也可以看作是一个中继程序,可完成底层网络通迅、处理http协议、响应用户需求,要使用这些web服务器,web开发者不需要关心这些web网络资源是如何发送给用户,只需要关心这些eb网络资源如何编写才能更好的呈现给用户。

    常用的web资源动态开发技术有JSP/Servlet、ASP、PHP等。

    三、关于静态页面与动态页面两者区别

    1、静态页面是不具有交互性的,所以页面是开发设计者已经固定好的,无论任何人来访问这个资源都是一样的,静态html页面不需要web服务器在自己电脑本地通过浏览器就可以打开浏览。

    2、动态页面地自己本地电脑上就打不开,一定要通过服务器的解析执行才可以打开,不同的人、不同的时间段,访问页面显示的内容可能就不同,web网页开发设计者写好web程序上传到web服务器后,不再需要人工干预,程序会自运行,按照程序设计的逻辑进行运行。

    3、html是w3c规范的一种网络编程格式,是一种统一的web协议语言,静态网页我们一般看到.html页面都是属于静态页面,但也有一种伪静态页面,伪静态页面不是真实存在web服务器上的html页面,是通过程序设计生成的静态页面,jsp/php是一种动态语言,jsp/php可以实现html页面所有的功能任务。

    4、HTML是一种文本标记语言,属于html静态页面,而jsp/php是一种解释性开发语言,只要有一个浏览器就可以将jsp/php页面内容显示出来,不再另做编译。

    5、jsp/php是动态服务页同,必须要编过程序人员的编译利用浏览器才可以显示出来,经过编译后的文件会产生一个文件程序包,利用浏览器运行这个程序包就可以将内容呈现出来了。

    6、html和jsp程序头部都是一样的,JSP的程序头为“ ”,jsp中用进行表示,php则使用<?php ?>表示,而html则没有什么代码表示,两者也可以通过这个进行区别。

    7、jsp或者asp有些人不认认这程动态语言,如何进行区分呢?只需要记住一点,动态页面是要通过web服务器处理才能显示,页静态页面在自己电脑本地就可以打开显示。

    例如

    if(flag == a){

    a

    }else {

    b

    }

    %>

    服务器在读取到这段代码后,根据相应的业务逻辑,编译成相应的servlet,再由servlet输出到页面(输出的就是html)。

    四、实验测试

    1、创建jsp页面,开发软件不能直接解析jps程序表头,但可以以文本形式输出,也可以解析jsp程序中的部分html代码,想要将jsp页面全部显洋,就必须要通过web服务器进行解析执行输出html页面。

    7e6dbcab5d1f63c486a4f618cb8baa33.gif

    2、创建web请求,则需要启动web服务器,才能正常运行jsp程序,才能顺处输出jsp页面。

    7e6dbcab5d1f63c486a4f618cb8baa33.gif

    展开全文
  • 实现页面静态化,PHP是如何实现的?

    千次阅读 2019-05-29 17:17:53
    随着网站的内容的增多和用户访问量的...1、动态页面静态化 2、优化数据库 3、使用负载均衡 4、使用缓存 5、使用CDN加速 现在很多网站在建设的时候都要进行静态化的处理,为什么网站要进行静态化处理呢?我们...
  • 页面静态化和缓存

    千次阅读 2019-08-09 20:20:09
    页面静态化和缓存 网页静态化技术和缓存技术的本意都是为了减轻数据库的访问压力,实现网站优化,提高网站的访问效率。 定义不用: 静态化是将数据库静态化到页面,客户端访问不需要查询数据库,主要存放形式是静态...
  • java网站页面静态化方案

    万次阅读 2017-09-17 01:04:35
    什么都要把页面静态化呢?把页面静态化,好处有很多。例如:访问速度快,更有利于搜索引擎收录等。目前主流的静态化主要有两种: (1)一种是通过程序将动态页面抓取并保存为静态页面,这样的页面的实际存在于...
  • CMS系统的页面静态化流程

    千次阅读 2020-02-08 22:42:48
    1. 先将页面静态化,存储在文件系统里。 2. 再将pageId 页面标识 放到消息队列里, rabbitMQ的交换机通过不同的routingKey来放到各个子网站监听的交换机上。 3. 各个子网站监听到消息,就会从 文件系统...
  • .net页面静态化

    2012-04-19 09:15:30
    一个比较实用的页面静态化代码,可以很好地实现静态化的效果
  • 大型网站的页面静态化

    万次阅读 多人点赞 2019-07-10 20:21:38
    目录 前言 ... 伪静态 布局样式模板化 应用层nginx ...很多小伙伴们就会提出他们都采用了静态化的方案,这样用户请求直接获取静态数据html,就不需要访问数据库了,性能就会大大提高;而且提高网站SE...
  • vue 实现页面静态化

    万次阅读 2019-09-05 20:04:15
    使用 this.$router.push(location) 来修改 url,完成页面路由跳转 使用params来隐式传递url的参数,它类似post,url看不出,使用query来传递参数的话,类似get,url一定会被格式化为...
  • 页面静态化技术深入探究

    千次阅读 2016-10-20 12:52:10
    一、页面静态化的必要性 随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化...
  • 7.关于cdn、页面静态化

    千次阅读 2020-04-08 12:02:47
    我们之前一直都在介绍动态请求的加速,接下来讲一下静态请求,也就是cdn。 当请求来到服务器上时,如果是访问静态资源,那么就将请求解析到cdn加速域名中,再由cdn(海量的就近加速节点)就近看有没有存静态资源,...
  • 最近一直在研究动态页面生成,汇总了网络的有效资源、方法,在这里分享一下,希望对后来做静态化的同仁有所帮助。也包括自己公司实际成熟的设计方案。
  • asp.net 页面静态化、生成静态页面实例 asp.net 页面静态化、生成静态页面实例 asp.net 页面静态化、生成静态页面实例 asp.net 页面静态化、生成静态页面实例

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 342,963
精华内容 137,185
关键字:

页面静态化是什么意思