专栏首页Linyb极客之路为什么做页面优化要用静态化,静态化如何落地?

为什么做页面优化要用静态化,静态化如何落地?

在了解静态化之前,我们需要先了解什么叫静态网页,静态网页是服务器上面真实存在的页面,它不需要编译,用户就可以直接访问这样的网页,后缀一般为.html或者是.HTM。如果我们把这个网页上传到我们的服务器或者是空间,那么它就可以通过直接访问我们的域名去打开这个网页。

动态网页,是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号—“?”。首先它不是真实存在的,他需要执行ASP,php,asp.net这样的外边语言所生成的一个虚拟的网页。

静态化页面的好处:

1、网页打开速度快

动态页面存放在数据库中,当打开这个页面的时候程序调用数据库中的表文件,然后把内容展现出来,这个过程就需要一定的时间。静态页面的网页本身已经是储存在我们的数据库里面的真实的页面,当用户访问的时候它直接可以呈现给用户看。对于一个网站来说,首先是打开速度。一个页面打开时需要好几秒,这样的网站用户一定是直接关掉。所以为了减少用户的时间成本尽量选择静态页面。

2、有利于搜索引擎的抓取收录

对于蜘蛛来说,更加喜欢html,因为纯静态网站访问网站时候不需要调用数据库,直接访问,提高网站的速度,蜘蛛程序访问一个网站不是无时间限制的访问抓取,蜘蛛根据网站权重的高低,蜘蛛程序访问网站的时间是一定的,提高网站速度这样就能让蜘蛛在同一时间内抓取多个页面。

3、静态网页相对比较稳定

静态网页从安全角度讲,很少遭到黑客攻击,除开源程序采用的是开源cms。如果黑客不知道网站的后台、网站采用程序、数据库的地址,静态网页更不容易受到黑客的攻击网站静态化生成html有什么好处SEO网站优化。而且从网站稳定性来讲,静态网页不会因为程序等,而损失网站数据,影响正常打开,从而损失用户体验,影响网站信任度。

静态化方案

目前主流的静态化主要有两种:

(1)一种是通过程序将动态页面抓取并保存为静态页面,这样的页面的实际存在于服务器的硬盘中;

(2)另外一种是通过WEB服务器的 URL Rewrite的方式,它的原理是通过web服务器内部模块按一定规则将外部的URL请求转化为内部的文件地址,一句话来说就是把外部请求的静态地址转化为实际的动态页面地址,而静态页面实际是不存在的。这两种方法都达到了实现URL静态化的效果,但是也各有各自的特点。

(3)还有一种是把页面划分成子数据块,每个数据块可能是一个inc文件,也可能多个数据块包含在一个inc文件中。具体的数据块划分根据页面的业务结构来处理。比如:网站头尾等公共数据块可以独立成一个文件。

如何实时生成静态页面

使用freemarker实现生成静态页面,将页面的实际存在于服务器的硬盘中,然后通过nginx反向代理服务器访问资源;

将动态页面转化为实际存在的静态页面这种方法,由于静态页面的存在,少了动态解析过程,所以提高了页面的访问速度和稳定性,使得优化效果非常明显。所以这种方法被广泛采用。但是它的局限性同样存在。对于大型网站而言,这种方法将带来不可忽视的问题。

一、由于生成的文件数量较多,存储需要考虑文件、文件夹的数量问题和磁盘空间容量的问题;

二、页面维护的复杂性和大工作量,及带来的页面维护及时性问题,需要一整套站点更新制度。

虽然静态页访问速度快,但实现起来毕竟还是比较麻烦了,维护也是一个麻烦事情。如果您的站点更新速度快那么就需要在你的后台数据更新部分调用相应的createHTML方法实时的生成静态页面。如果更新速度不慢可以在后台手动更新或者利用操作系统的定时任务功能去执行你的静态页面生成程序。

实战商品详情页面静态化

输出文件的名称:商品id+“.html”

输出文件的路径:工程外部的任意目录。

网页访问:使用nginx访问网页。在此方案下tomcat只有一个作用就是生成静态页面。

工程部署:可以把生成页面服务部署到多个服务器上。

生成静态页面的时机:商品添加后,生成静态页面。可以使用mq,订阅topic(商品添加)

(1)商品添加时,发送topic消息给消息队列服务器;

(2)消息队列服务器收到topic消息后,将消息发送给订阅topic的静态页面生成服务,生成静态页面;

(3)有多个静态页面生成服务器订阅商品添加topic,因此保证了多台服务器都一致保存了商品信息,实现了备份;

(4)外界通过nginx反向代理根据并发量和任务强度访问不同的静态页面服务器;

(5)通过nginx的http服务器访问静态资源实现网站页面静态化。

Q&A

1、Freemaker生成静态页面的时机?

添加商品后使用mq广播消息,freemaker监听到消息去数据库查询商品生成静态页面

2、为什么不去redis中获取商品信息?

添加商品时还没有存到redis中

3、为什么不直接使用商品信息还要到数据库中查询?

不在一个项目中传输数据麻烦,也起不到提高效率的作用,而且修改数据时也要修改静态页面

WEB服务器的 URL Rewrite的方式

URL Rewrite方式特点同样鲜明,由于是服务器内部解析的地址,所以内容是实时更新的,也不存在文件管理和硬件问题,维护比较方便。在服务器级URL Rewrite重写技术并不影响页面的执行速度。但是URL Rewrite的门槛比较高,国内虚拟主机大多不支持,而且虚拟主机是目录级的URL Rewrite,通过遍历目录读物URL转发规则的方式将大大降低页面的执行速度。

将页面分成子数据块

把页面划分成子数据块,每个数据块可能是一个inc文件,也可能多个数据块包含在一个inc文件中。具体的数据块划分根据页面的业务结构来处理。比如:网站头尾等公共数据块可以独立成一个文件。

总结

对于一个大型网站来说,生成的页面数据会非常多,管理这些页面文件又是一个问题。例如有的页面被删除了,而已经生成的页面数据还会存在各个web服务器上。这时就需要通过后台系统记录这些页面文件的部署位置,以便今后统一管理。同时业务组件的量也可能会比较多,特别是存在多版本的情况下,所以也需要把业务组件的配置情况记录到数据库中,便于统一管理。

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

作者:chun_soft 来源:https://blog.csdn.net/ztchun/article/details/78007926

本文分享自微信公众号 - Linyb极客之路(gh_c420b2cf6b47),作者:chun_soft

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 尝试Java加锁新思路:原子变量和非阻塞同步算法

    前文中曾经对比同步方法的内置锁相比和显式锁,来说明它们各自的优势,但是无论是内置说还是显式锁,其本质都是通过加锁来维护多线程安全。

    lyb-geek
  • 网络编程之HTTP状态码详解

    lyb-geek
  • MySQL主从复制能完美解决数据库单点问题吗?

    2、从库的IO线程在指定位置读取主库binlog内容存储到本地的中继日志(Relay Log)中

    lyb-geek
  • 为什么要放弃 JSP ?

    随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会...

    乔戈里
  • 为什么要放弃 JSP ?

    随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会...

    一个优秀的废人
  • Redis详解(九)------ 哨兵(Sentinel)模式详解

    在上一篇博客----Redis详解(八)------ 主从复制,我们简单介绍了Redis的主从架构,但是这种主从架构存在一个问题,当主服务器宕机,从服务器不能够...

    IT可乐
  • Java Web项目为什么要放弃JSP

    随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会...

    秃头哥编程
  • 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog....

    Jerry Wang
  • 【二叉树打卡2】从上往下打印二叉树

    这个像相当于二叉树四种遍历中的层序遍历了,其思想是采用广度优先遍历,借助一个辅助队列,步骤如下:

    帅地
  • 机器学习与人工智能将应用于哪些安全领域?

    大数据文摘

扫码关注云+社区

领取腾讯云代金券