您现在的位置是:网站首页 > 心得笔记
PHP页面静态化
1、页面的分类
1.1、动态压面:当我们加载页面时 它会首先去执行动态文件中的动态程序,这些动态程序主要有jsp asp php等
动态文件执行阶段:语法分析-》编译-》运行
1.2、静态页面:其实就是一个全静态的html文件 这个文件里的程序都是以html的语言格式呈现的
静态文件执行阶段:直接运行
2、如何优化页面响应时间
2.1、动态页面静态化(这里主要讲解的是动态页面静态化)
2.2、优化数据库
2.3、使用负载均衡
2.4、使用缓存
3、动态页面静态化:
3.1、使用场景:
如果页面中有一些内容不经常改动,动态页面静态化是非常有效的加速方法。比如新浪首页www.sina.com.cn 它实际执行的首页文件就是index.shtml
3.2、实质:
生成静态的html文件
3.3、好处:
1、减少服务器脚本的计算时间
2、降低服务器的响应时间
为什么可以降低服务器的响应时间?
1.1、因为动态文件执行过程是:语法分析-》编译-》运行;静态文件执行过程直接就是运行。从这方面来说,可以减少一部分时间
1.2、动态程序获取动态内容,需要链接数据库服务器 或者缓存服务器 还会从服务器中获取数据 然后把数据填充到相应的模板之中 最后呈现给用户;静态文件直接把生成好的静态文件展示出来
说明:动态页面静态化不适用于内容经常改变的引用,比如:微博 (基本以每秒更新数计算)
4、关于动态url地址设置静态形式
动态url地址:https://www.blog.blonglee.me/act?orgId=2212&orgName=yahan
静态url地址:https://www.blog.blonglee.me/yahan-act-2212.html
问题1:是不是我把动态地址转化为静态地址后,再去访问静态地址这个页面,它呈现的内容就是静态页面呢?
答案1:加载的内容不是静态页面。转换静态地址之后,他的根还在动态页面 加载之后还是动态页面的形式
问题2:动态地址怎么转静态地址?
答案2:是通过服务器配置的
把动态url转换为静态url的过程,称之为“伪静态”!
5、静态化介绍
纯静态:它其实就是纯净态的html文件 他是通过PHP程序去生成的静态html文件 前端访问时 其实是去加载我们生成好的html文件
局部纯净态:也可以理解为局部动态化 如果静态化页面中存在局部动态化的内容,就称为局部纯静态
比如说新浪体育台下的数据就是动态数据。这块数据使用ajax从服务器获取数据 再通过js将数据填充到页面中
伪静态:其实就是把我们动态页面url地址转化为静态页面的url地址,需要服务器配置
6、纯静态化案例实现
6.1、buffer的认知
PHP生成纯静态化页面是围绕buffer来进行讲解的
buffer就是一个缓冲区,一个内存地址空间 主要用来存储数据
ob_start();开启PHP缓冲区
ob_get_contents();获取PHP缓冲区内容
6.2、PHP如何实现页面纯静态化
基本方式:
1、file_put_contents($filename, $data)函数 把相关内容写到文件里 返回数据:成功返回写入文件字节数 失败返回false
2、使用PHP内置缓冲区机制实现页面静态化 —— output_buffering(具体配置在PHP.ini中) PHP对output_buffering有几个内置函数ob_操作缓存区的函数
这里主要讲解以下几个:
ob_start();—— 打开输出缓冲区 (执行PHP输出时,数据都是先经过缓冲区 再输出来)
ob_get_contents();—— 返回输出缓冲区的内容
ob_clean();—— 清空输出缓冲区
ob_get_clean();—— 得到当前缓冲区的内容并删除当前输出缓冲区(效果相当于前两个函数)
6.3、纯静态化案例实现
PHP实现纯静态化的最终目的是生成一个纯静态的html页面存放在磁盘!
步骤:
步骤一:连接数据库,从数据库中查询数据
步骤二:把获取到的数据填充到模板文件
步骤三:需要把动态的页面转为静态页面——生成纯静态化文件
laravel框架中生成静态页面代码实例(我这里是在本地环境下测试的):
/** * 笔记页面展示 * @author Sheng Yue * @time 2018/11/23 */ public function index (Note $note) { //1、查询数据 $list = $note->getNoteList(); //2、将数据填充到html页面 $htmlStrings = view('front.notes.index')->with('list',$list)->__toString();//注意:获取页面通常用curl //3、生成静态页面 $path = public_path().'\\'.'html\\notes';//定义存放静态页面路径 $result = self::create_dir($path);//创建路径文件 if ($result) { $this->create_static_page($path, 'note-static.html', $htmlStrings);//写入文件 生成静态页面 View::addExtension('html', 'php');//扩展名 echo view()->file($path.'\\'."note-static.html")->render();//注意:这里使用view()不能抛出异常 所以需要使用render()抛出异常 } } //获取到的页面内容写入到指定文件中 文件路径 文件名 写入文件内容 public function create_static_page ($path, $filename, $content) { file_put_contents($path.'/'.$filename, $content); } //创建目录 public static function create_dir ($path) { return is_dir($path) or (self::create_dir(dirname($path)) and mkdir($path, 0777)); }
执行代码 后 可见,已经生成静态页面note-index.html了!这说明成功了
1、页面添加缓存时间
这时候代码如下:
/** * 笔记页面展示 * @author Sheng Yue * @time 2018/11/23 */ public function index (Note $note) { $path = public_path().'\\'.'html\\notes'; if (is_file($path."\\". "note-static.html") && (time() - filemtime($path."\\". "note-static.html")) < 300) { View::addExtension('html', 'php');//扩展名 echo view()->file($path.'\\'."note-static.html")->render(); } else { $path = public_path().'\\'.'html\\notes';//定义存放静态页面路径 $result = self::create_dir($path);//创建路径文件 $list = $note->getNoteList(); $htmlStrings = view('front.notes.index')->with('list',$list)->__toString();//注意:获取页面通常用curl if ($result) { $this->create_static_page($path, 'note-static.html', $htmlStrings);//写入文件 生成静态页面 View::addExtension('html', 'php');//扩展名 echo view()->file($path.'\\'."note-static.html")->render(); } } } //创建存放静态页面的文件夹 public static function create_dir ($path) { return is_dir($path) or (self::create_dir(dirname($path)) and mkdir($path, 0777)); } //生成静态文件 public function create_static_page ($path="", $filename="", $content="") { file_put_contents($path.'/'.$filename, $content); }
当后台管理员点击开始更新时,就是重新生成静态页面!链接数据库-》请求数据-》填充到页面中-》生成静态页面,没有了哪些判断。直接从数据库中查询最新的数据
3、crontab定时扫描时间
7、局部动态化案例实现
静态页面中想加载动态的内容就需要用到局部动态化,需要用到ajax技术。
举例说明:有很多页面都有这样的加载效果。开始加载一部分页面 当鼠标移到页面底部后 会继续ajax请求数据并填充到页面上
jquery中ajax请求方式
$.ajax({ url:'', type:'get/post', dataType:'json', error:function(){ }, success:function(result){ },})
实现步骤:
步骤一:编写接口
步骤二:ajax请求接口数据 请求成功后,将数据拼成需要的格式动态塞到页面中
8、伪静态
8.1、定义:伪静态就是把动态的url地址转换为类似于静态的url地址 我们通过伪静态的url地址访问的页面 其实还是一个动态页面
8.2、设计成伪静态原因:
1、 url没挂
2、让百度谷歌等浏览器收录
8.3、PHP方式处理伪静态(正则表达式)