在公网上做网站,总是希望百度搜索引擎能够尽量多的收录自己网站的页面,众所周知,搜索引擎更加喜欢抓取静态的页面,将动态页面静态化,特别是批量的将动态页面转换为静态页面,这除了是一个使用的问题,更是一个程序设计上的问题。在以往开发的网站后台中,我特地避开了静态化的功能开发,而通过伪静态的方式在实现。近期在clone一个老项目的时候,决定在代码中实现这个真正静态化的功能。
这里说到真正的静态化,是将动态网页通过浏览器模拟访问的方式保存为html的静态网页文件存放在哎服务器的根目录,可以通过绝对url直接访问到html网页。
上面的截图包含了一个完整的静态化操作的响应过程。点击“静态化”按钮,会调用页面的js脚本,启动一个与后端交互的ajax连接,由服务器后端完成静态化的动作,并将静态化的结果返回给前端网页,前端js接收到后端返回的信息后,根据控制流程做出可视化响应,比如弹出一个提示框。
在前端网页中的js动作设计中,运用到了一个递归的方法,使用递归来循环与服务器的请求,当然,每次请求传递的参数是不同的,目的是将参数下的所有数据条目转换为静态的html页面。
在点击“静态化”按钮时,触发的是a_static方法,在这个方法中,根据响应控制流程启动a_static_s过程,这是一个递归的方法,这样设计的出发点是将大量的数据分页请求,减小服务器内存、cpu以及磁盘I/O的占用,虽然服务器端配置比较低,通过合适的程序设计来保证程序的稳定性和健壮性。
后端运用到了php语言的ob缓存机制,通过缓存来获取网页的内容。另外有几个文件的操作函数。
判断静态文件是否已经存在,使用:
file_exists
获取到的网页缓存内容写入到磁盘文件,使用:
file_put_contents
file_put_contents可以新建文件,但不能创建目录,因此需要写创建目录的代码:
那么完整的后端代码如下:
由于代码篇幅太大,截图也没有完整截下来,算是主要的实现代码吧。
在服务器的指定目录,可以看到生成的静态html文件。
从数据的角度来看,对于一些不变的数据,以文件的形式保存下来,在查看的时候更加直观,另一方面将这些冷数据从数据库里删除,使得数据库里保存的总是最新的一少部分数据,可以保证查询语句是有比较高的性能。
通过静态化生成的文件,将作为下一次倒排索引搜索引擎试验的文本数据。