页面静态化
一、概念
静态化网站:纯Html、css、js做的网站
①请求到Apache,直接返回HTML页面,速度快(不需要加载PHP模块,不需要查询数据库)
②不使用数据库,sql注入等攻击方式无法下手(安全)动态化网站:包含PHP或其他动态脚本语言实现的网站
①更好的应对数据的变化(数据交互性好)为提高访问效率,将动态化网站转化为静态化网站,这就是页面静态化
压力测试
测试工具:Apache的ab测试(Apache安装目录、/bin/ab.exe)
需要配置bin目录到环境变量 ,检测是否配置,ab命令ab -n 1000 -c 100 http://www.tpshop.com/index.php
-n : 总的请求数
-c : 并发级别,同时发送的请求数网址:如果直接是域名,后面加/
可以将测试数据保存到文件
ab -n 1000 -c 100 http://www.tpshop.com/index.php > F:/abtest.txt
并发概念
QPS :query per second 每秒查询数
RPS :Request per second 每秒处理的请求数
二、真静态
页面静态化分为真静态和伪静态
真静态:
从url地址看,是静态页面,真实访问到的是静态页面
为动态页面生成静态页面,以后就访问静态页面
伪静态:
从url地址看,是静态页面,真实访问到的是动态脚本页面
通过Apache的重写机制,将静态页面的url访问地址,可以换成动态页面的访问地址
三、三大缓存技术
1.浏览器缓存、程序缓存、ob缓存
浏览器缓存:
浏览器接收服务器返回的数据,每达到一定的量,就显示到页面上,如果最后一次没达到量,也显示到页面
程序缓存:
每次发送PHP请求,php每一次的输出都会先存到程序缓存中,当整个PHP程序执行结束,在返回给apache,最后返回到浏览器
程序缓存是语言底层实现的,人为不可操控!
ob缓冲:
每次返送PHP请求,如果开启ob缓冲,php每一次的输出都会先存到ob缓冲中,当以下情况发生时,数据会从ob缓冲送到程序缓存
整个PHP程序执行结束
ob缓冲空间被占满
- 开发者手动操作
2.常用ob缓冲函数
ob_start() 开启ob缓冲
ob_get_clean() 获取然后清除ob缓冲区内容
ob_get_contents() 获取ob缓冲内容
ob_get_flush() 获取并送出ob缓冲内容,送到程序缓存后,清空ob缓冲空间
ob_clean() 清空ob缓冲
ob_end_clean() 清空并关闭ob缓冲
ob_end_flush() 送出并关闭ob缓冲
3.使用ob缓存实现真静态
真静态:将动态页面的输出内容,保存到静态html页面。
使用ob缓存,可以获取页面的输出内容,
使用file_put_contents函数将字符串写入文件。
比如以前台首页为例:修改Home分组Index控制器index方法
生成的静态文件
静态文件访问路径:http://www.tpshop.com/Static/index.html
如果数据库的数据发生变化,需要重新生成静态页面。
操作思路:方法一:在后台设置删除静态文件功能, 可以实时更新,但是需要手动删除,(需要手动删除静态文件,所以其实也不是严格实时)
方法二:设置真静态文件生命周期自动更新静态文件,但是有延迟
如果要严格遵循实时更新,要使用伪静态
4.真静态缓存生命周期
真静态文件的生命周期(有效期)
当前时间 - 文件生成时间 < 生命周期
通过fliemtime
函数获取文件上次被写入的时间
修改Home分组Index控制器index方法,使用静态化的html页面之前,先进行有效期判断。
四、伪静态
1.伪静态是相对真实静态来讲的,通常我们为了增强搜索引擎的友好面,都将文章内容生成静态页面,但是有的朋友为了实时的显示一些信息。或者还想运用动态脚本解决一些问题。不能用静态的方式来展示网站内容。但是这就损失了对搜索引擎的友好面。怎么样在两者之间找个中间方法呢,这就产生了伪静态技术。就是展示出来的是以html一类的静态页面形式,但其实是用PHP、ASP一类的动态脚本来处理的。
需要通过Apache的重写机制进行配置
1.修改apache主配置文件,开启rewrite模块
2.修改虚拟主机配置文件,在需要重写的站点,将所有的AllowOverride 配置项设置为All
3.重启apache
4.在项目根目录创建一个.htaccess文件.并设置对应的重写规则。
2.简单伪静态使用
原始页面:http://www.tpshop.com/index.php/Home/Index/detail/id/24
伪静态地址:http://www.tpshop.com/detail_24.html
修改项目根目录.htaccess文件,重新设置重写规则:
RewriteEngine 重写引擎
RewriteRule 重写规则 正则匹配的域名之后的内容 实际访问的地址
RewriteCond 重写条件
五、防盗链
盗链:盗用链接,在自己网站上,使用自己网站服务器上没有的一些资源文件。一般是使用技术手段,将别人服务器上的资源文件的链接地址获取到,在自己网站展示对应的资源。
原理:通过检测请求来源域名,如果不是本网站,则显示指定的页面或图片
在.htaccess文件中添加规则
注意:使用ueditor上传的图片无法获取到来源域名,如果需要在编辑器中正常显示图片,需要做以下兼容处理,但是该图片就不能防盗链了
六、综述
1、真静态、动态、伪静态的比较
纯静态网页优势:
1.当访问者访问网页的时候,不读取数据库,直接访问网站空间对应的文件。(直接读取文件)
2.纯静态的网页对搜索引擎友好,是最容易被搜索引擎所收录的。(易收录)
3.由于访问网页的时候,不需要服务器做过多的处理,对服务器的压力最小,所以,更容易应对高访问量。(节省服务器压力)
4.一些面对数据库的攻击比如SQL注入攻击,在面对静态网页的时候常常难以从地址入手。(安全性高)
纯静态网页劣势:
1.由于静态网页需要生成文件,所以当网站内容更新频率高,更新数据量大的时候,对服务器磁盘的写入也会很频繁;(服务器的负担)
2.在不采用其他技术的时候,如果更改了模板,所有相关的html网页都要重新生成,这在面对大数据量的时候,也不是一件很好玩的事。(模板修改、对应变化)
动态页优势:
- 动态页由于不用生成html文件,所以可以节省服务器空间,这样我们可以把更多的资金放在数据库上,节省出来的服务器空间可以用来放更多的图片附件等文件;(节省服务器空间)
- 更好的应对数据的变化。
动态页劣势:
1.不如静态的网页容易被收录(收录难)
2.一些面对数据库的攻击比如SQL注入攻击,在面对动态网页的时候常常容易从地址入手(安全性低)
伪静态页优势:
1.在网址的形式上看,伪静态的地址和静态的可以一摸一样,普通的访问者不容易分出是真静态还是伪静态,同时蜘蛛一般也会把这种形式的网页当做是静态的来处理。(易收录)
伪静态页劣势:
1.伪静态相对动态来说,更加消耗服务器资源,因为网页地址需要按事先设定好的伪静态规则来进行正则匹配,这一个过程是消耗资源的。(消耗服务器资源)
2、应用场景的说明
采用哪种方式完全取决于这个网站的定位和类型
从SEO的角度上来说,行业资讯与综合门户站都整体采用真静态页面,因为他们需要让百度搜索引擎抓取页面来引导流量维持网站的生存。
相对的企业网站和社交网站一般就会使用伪静态和动态页面,因为它们一般不从搜索引擎带流量,更注重其他的推广方式。
从制作网页的角度上来说,行业资讯和综合门户站因为内容过多,为了方便用户页面一般都会比较简单易懂,这样才可以在首页放下更多的内容和栏目,使用真静态页面。
而企业网站和社交网站的网页一般都比较高大上,各种flash特效或者JS特效,这种只能用伪静态和动态页面来做。