PHP-如何高效的生成100万个的静态页面

PHP-如何高效的生成100万个的静态页面

瑾兮 发布于 2017-08-12 字数 409 浏览 1206 回复 6

现在想生成100万个静态页面
大致我说下我现在的过程:
首先利用数据库排名前1000的关键词逐个用sphinx来搜索出对应的软件应用列表
每个关键词生成的分页小于50个
然后利用文件操作函数去生成页面
大体就是这样

那天试了一下,效率很低,生成一次需要耗时24小时以上,现在很痛苦,最怕就是页面的元素有变化就要重新生成,除了对我答题程序的设计建议外,大家如果其他生成页面的好的方式可以分享一下

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

虐人心 2017-10-20 6 楼

你可以在后台编写一个脚本,每一小时执行一次(可以根据你需求改变),对比关键词上次生成静态页面时的数据和这次用户搜索时的数据进行对比,如果不同重新生成静态页,每次执行shell,只处理部分关键字,保证在一小时内执行完毕,如果服务器配置好的话你还可以多开几个进程同时处理,另外你可以建个控制表,一个关键字重新生成静态页面后设置个标志位并记录时间,这样你就可以让这个关键字一天(可以根据你需求改变)处理一次,每次执行shell处理这个关键时,检查这个时间若上次处理时间已超过一天再处理,若你开了多个进程,这个标志位就起作用了,每次处理这个关键字时还要检查这个标志位,以免多个进程同时处理这个关键字,浪费资源。

清晨说ぺ晚安 2017-10-17 5 楼

我觉得提前生成这么大数量的静态页面没有必要,因为数量太大,用时较长,如果页面改的将会执行删除 100万页面的操作。我现在想到的一种方式:
用户搜索关键字时生成静态页面,大概流程:判读有无静态页面,有则显示,无则生成,最终显示给用户,生成页面可以考虑异步,还可以判断生成的时间,有无必要重新生成,甚至可以配置强制重新生成。当然也可以根据判读关键字是否是在1000以内,进行有选择的生成,而且1000一个数字可以写成配置,也方便以后随意修改。

想挽留 2017-10-09 4 楼

生成100万个页面,这个本身工作量就不小,而且是一次性生成,速度慢是正常的,因为瓶颈主要在于CPU,再者还有磁盘IO和内存,而且还与服务器的性能硬件环境等有关系。所以再怎么优化也快不到哪去。

对于你腾讯、新浪这种新闻门户网站都是在发布一条新闻时就生成静态页面并发布到静态池,而用户访问则会通过前端SQUID来访问页面。由于这种新闻的网站在页面上所能浏览到的页面一般不会超过100个分页,所以当一个模板改版或者是修改了页面元素,它们并不会生成所有的页面,而是只生成这100个分页里的新闻,其它的新闻页面就不去生成,因为访问的人很少,而查看这些人的用户都是来自于搜索引擎,这样的用户不多,而且这些没有重新生成新版页面的内容也是可以查看的,并不影响用户的体验,也减轻了网站的压力。

如果当改版时,你一定要重新生成所有页面,那么建议你手动生成,可以单独拿出一台服务器来跑这个页面生成程序,甚至可以使用多线程来跑,并在用户访问低期(如:凌晨2:00等)时重新生成,这样就不会影响用户的使用。而对于搜索引擎来说,并不冲突,只要页面的URL没有变,其它的不重要。个人的解决方案是这样的。

灵芸 2017-09-29 3 楼

静态页太多了

利用访问热度,抽取其中十万条或者更少生成静态,其余的几十万个,丢用户出发生成、
有些新闻根本没有人访问得到,或者是几次,几十次,几百次,不划算。
当然了,第一个用户吃点亏。

瑾兮 2017-09-23 2 楼

如果一次性生成100个页面,但是实际上只有1w个页面是有用户访问的,那就浪费了很多磁盘空间和CPU资源,可以按需索取。以前我们公司的项目就是所有的缓存页面是由人工手动生成,在生成期间,其他操作就会很卡,由用户去触发生成静态页面是首选

浮生未歇 2017-09-15 1 楼

把生成静态页的这个动作交给用户去触发,当用户访问了这个页面才告诉PHP去执行生成静态页,这样就不用一次性生成这么多啦。