小弟最近做了一个个人博客,有不同的栏目,由于服务器的性能限制(虚拟主机、IIS)以及权限的限制,虚拟主机没法一直跑着PHP,于是想把所有的博客文章全部生成静态HTML页面。每次在后台添加一篇文章数据,那么就会自动生成一个静态的HTML页面。
但是考虑到以后可能对整个博客的所有版面的布局、样式或者内容进行统一修改,所以还写了一个生成所有数据为静态HTML的函数。
在函数里面是这样处理的:
1.先读取静态HTML的模板(里面用[title]、[content]、[author]等类似的变量做数据替换)。
2.然后从数据库中一次性读取所有的博客文章数据。
3.然后使用foreach进行循环,用文章数据替换静态HTML模板中的[title]、[content]等变量并生成静态的HTML页面。
……接着就OK了……但是考虑到我是一次性将所有的博客文章数据读取出来,这样可能会存在问题。
当然现在我的博客文章才几十篇,可以一口气读取出来,然后foreach。
但是如果随着数据的增多,如果博客文章数据有了上千条甚至上万条、十万条,每条数据就是一篇博客,内容大概有几千字。
这样算下去就很恐怖了,如果到时候一次性读取所有数据出来,估计CPU、内存都严重不够用,所以现在考虑着改变方法,不能再像以前那样一次性把所有数据读取出来然后foreach。我想了两种可能的解决办法:
1.先只读取所有数据的文章id并存入数组中。
然后使用foreach循环,根据单个id读取单条数据,利用单条数据生成一个静态HTML页面。
2.使用MySQL的游标同样一条一条数据地来处理。现在想问问各位乡亲父老、大哥大嫂,对于这种大量数据生成HTML页面的情况,如何尽量在保持低CPU占用、低内存占用的情况尽量提高效率。
是否还有比我想到的方法更加专业的解决方案。
有的话请告之,
没有的话,请问:我采取上面哪一种方式比较好。(如果是游标的话,最好能讲解详细点,比如简单实例之类的,因为游标操作以前只在Oracle和SQL Server中使用过,而且还只是在数据库中测试了下,没在项目中实际应用)。在此先谢过各位了,临表涕零。不知所云……
但是考虑到以后可能对整个博客的所有版面的布局、样式或者内容进行统一修改,所以还写了一个生成所有数据为静态HTML的函数。
在函数里面是这样处理的:
1.先读取静态HTML的模板(里面用[title]、[content]、[author]等类似的变量做数据替换)。
2.然后从数据库中一次性读取所有的博客文章数据。
3.然后使用foreach进行循环,用文章数据替换静态HTML模板中的[title]、[content]等变量并生成静态的HTML页面。
……接着就OK了……但是考虑到我是一次性将所有的博客文章数据读取出来,这样可能会存在问题。
当然现在我的博客文章才几十篇,可以一口气读取出来,然后foreach。
但是如果随着数据的增多,如果博客文章数据有了上千条甚至上万条、十万条,每条数据就是一篇博客,内容大概有几千字。
这样算下去就很恐怖了,如果到时候一次性读取所有数据出来,估计CPU、内存都严重不够用,所以现在考虑着改变方法,不能再像以前那样一次性把所有数据读取出来然后foreach。我想了两种可能的解决办法:
1.先只读取所有数据的文章id并存入数组中。
然后使用foreach循环,根据单个id读取单条数据,利用单条数据生成一个静态HTML页面。
2.使用MySQL的游标同样一条一条数据地来处理。现在想问问各位乡亲父老、大哥大嫂,对于这种大量数据生成HTML页面的情况,如何尽量在保持低CPU占用、低内存占用的情况尽量提高效率。
是否还有比我想到的方法更加专业的解决方案。
有的话请告之,
没有的话,请问:我采取上面哪一种方式比较好。(如果是游标的话,最好能讲解详细点,比如简单实例之类的,因为游标操作以前只在Oracle和SQL Server中使用过,而且还只是在数据库中测试了下,没在项目中实际应用)。在此先谢过各位了,临表涕零。不知所云……
解决方案 »
- 伪静态规则怎么改变
- 非常急啊,php连接不上sqlserver2005
- 在php中如何使用java类
- 新手求教!输出库内数据到表格时的问题!标题长才有人看。。。。
- 关于Mysql数据库,一个很多程序员都会遇到的问题。
- 大家都是怎么解决smarty模板文件在设计时和程序运行时图片路径不同的问题的。
- 刚装Apache+php+mysqpl 不知如何配置Apache,不知如何配置配置C:\Apache2\conf\httpd.conf这个文件。(在线等)
- 对查询的结果集如何进行分页??
- 如何知道一个字符在字符串中是否存在?
- php中怎么样实现类似于<%jsp:forward 转发这样的功能?高分相送
- php 简单论坛
- 11行php+js 求改错
你都能把数据读到二维数组里了,自然不存在不会用的问题对于这种大量数据生成HTML页面的情况,如何尽量在保持低CPU占用、低内存占用的情况尽量提高效率。
虽然理论上的探讨的确很重要,但在实际应用中并无此需求。因为这种大量的生成只是偶尔为之
然后使用foreach循环,根据单个id读取单条数据,利用单条数据生成一个静态HTML页面。
我曾经做过一个采集的项目,也遇到和你一样的麻烦问题。
我想告诉你的是,不能简单的foreach,数组很大的时候,程序在30s内执行不完的。
我当时是foreach 20条数据之后结束循环,再次进入该程序页面,继续执行20条之后的数组,依次类推,这样就避免了数据很大,执行不完的情况。
简单分批: 如总1000条,每次处理50条。
综合分批: 按频道、按分类、每日期进行批次处理。这样,不管是脚本读取数据库的压力还是脚本先成文件的压力都可以控制。除了数组循环的方式,还可以用xml的方式实现异步处理。这样可以用综合分批的方式,多个批处理同时进行,加快处理速度。处理的过程中,要进行状态标记,如果遇到暂时的错误,应可以忽略,继续处理下一条。对于出错进行记录,以便审查时重新单独对出错的情况操作。