宇宙通用版页面完全静态化插件 v1.0-by Sodoit

2016-07-07 15:00 来源:www.chinab4c.com 作者:ecshop专家



不好意思,宇宙通用,有点夸张了,不过这个插件的确是通用的,不仅仅所有版本的ecshop可用,任何其他程序也都可以用,而且使用简单,几乎不用修改原有的程序。

一、开发过程和原因

这两天在研究ecshop的速度,在使用linuxab命令对服务器进行压力测试后发现,虽然ecshop适用了页面缓存,数据缓存等一系列方法来进行加速,但是服务器的吞吐率(这里定义为服务器每秒能承受的最大访问次数requests per second,测试条件200请求数,并发100)却只有30左右。在init.php文件的最后一行加上die;重新测试,系统吞吐率并没有上升多少,可见,制约程序速度的瓶颈并不在页面的处理上,于是继续在init.php文件的前面行后面加上die,继续测试。最后,发现制约ecshop速度的瓶颈在那一堆类,函数的加载上面,如果把die放到

require(ROOT_PATH . 'includes/inc_c**tant.php');

require(ROOT_PATH . 'includes/cls_ecshop.php');

require(ROOT_PATH . 'includes/cls_error.php');

require(ROOT_PATH . 'includes/lib_time.php');

require(ROOT_PATH . 'includes/lib_base.php');

require(ROOT_PATH . 'includes/lib_common.php');

require(ROOT_PATH . 'includes/lib_main.php');

require(ROOT_PATH . 'includes/lib_insert.php');

require(ROOT_PATH . 'includes/lib_goods.php');

require(ROOT_PATH . 'includes/lib_article.php');

后面,吞吐率只有59.8,但是把die;放到这些前面,系统吞吐率马上上升到485.4,提升了8倍还多。于是,我设想是因为加载的文件数比较多,磁盘的IO速度制约了系统速度,于是我把这些文件合并成一个文件,并且去除所有注释和换行,但是吞吐率提升并不大,于是又尝试把这些文件缓存到memcache里,仍旧不行,于是确定了是这些类和函数的加载和初始化影响了系统吞吐率,但是这些类和函数对ecshop是不可缺少的,不能不加载,通过优化这些类和函数的方法对提升系统吞吐率帮助又不大。于是考虑页面静态化,这样就可以避开这些类和函数了。




二、功能设想和设计目标
1,实现一个宇宙通用的插件,不局限于ecshop,适用于所有程序
2,插件化、整合化、使用简单,尽量不用改动原有程序就可使用
3,程序高度优化,生成静态文件自动、高效、快速
4,适用性强,不管服务器是否开启了url重写模块都能适用,并且大幅提升系统吞吐率

三、插件的使用
ecshop里使用本插件,相当简单。
1,cls_page_cache.phppage_cache_config.phplib_page_cache.php三个文件复制到/includes文件夹
2,然后修改init.php文件,在define('ROOT_PATH', str_replace('includes/init.php', '', str_replace('\\', '/', __FILE__)));行后面添加require(ROOT_PATH . 'includes/lib_page_cache.php');
3,配置好page_cache_config.php文件(使用默认的也行)
4,建立/temp/page_caches/文件夹即可(page_cache_config.php里定义的$cache_path,根据配置修改)

四、插件可运行于模式1和模式2
经过测试,在模式2下,系统的吞吐率达到250-260,相比未使用插件前的59.8,提升将近4倍之多。 而在模式1下,绝对的静态化,系统的吞吐率达到了1100多,提升18倍。

五、使用说明
本插件免费使用

更多介绍,请查看文档里的说明文件。

回答:


下载地址:
http://app.megiga.com/page_cache.rar

测试地址:
http://sz.173ebuy.com/

欢迎下载和测试。

绝对是好东西。 第一个支持楼主

测试了一下 ,楼主给的地址。我找到一个商品的页面。分别这样打开
http://sz.173ebuy.com/goods.php?id=85
http://sz.173ebuy.com/goods-85.html

出乎意料。原来的那种地址比静态以后的速度要快。

不知道楼主的方案是不是真的可行

强烈支持,强烈占位,呵呵…………

下载下来研究一下先

河南网通,4M网速:很快,各个页面打开速度都快


测试了一下 ,楼主给的地址。我找到一个商品的页面。分别这样打开



出乎意料。原来的那种地址比静 ...
hemingxun 发表于 2011-3-5 23:22


感觉一样啊,没多少差别


另:上楼测试的页面,我在IE6下打开后发现变形,其他页面暂时没发现问题
提示楼主测试一下看看是不是这样



sodoit楼主,想问您几个问题:

1。页面动态数据是如何处理的?
①比如:商品点击数,这个是会随着用户点击次数的变化而变化的,这样的话,如果处理不好,是不是会不停的重新生成页面从而加重服务器负担呢?
②比如:前台价格,可能会随着用户登录状态的变化而变化,是不是也会随着登录状态变化而导致页面重新生成?

2。页面随机调用部分是如何处理的?
比如:我在商品页面随机关联5个商品,那么每次访问,当前页面是不是也会再次生成从而加重服务器负担呢?

3。分类页、搜索结果页数量会不会影响网页空间暴增?
我们知道,分类页会因为筛选参数数量自动生成若干“相近”POST,那么如果开启静态生成静态页面,是不是会生成若干静态页面而引起网页空间暴增呢?

************************************************
刚认真看了您的说明文档,里面提到:
对于页面里的动态数据,例如ecshop的会员登陆状态,类似这样的,应该修改程序和模板,使用ajax动态调用。这个不属于本插件要解决的问题。……


如果不修改程序和模板(怕影响升级),那这个插件还能用吗?
如果用的话是不是会导致页面随着动态数据变化而不断生成?


测试了一下 ,楼主给的地址。我找到一个商品的页面。分别这样打开



出乎意料。原来的那种地址比静 ...
hemingxun 发表于 2011-3-5 23:22


出乎你的意料是有可能的,因为这样测试,整个系统的瓶颈并不在服务器的处理能力上(这个站还在开发,几乎没有访问量),而很可能在网络的传输速度上。实际上,不管goods.php?id=85还是goods-85.html,访问的都是静态化的页面,区别在于,goods.php?id=85这样的url,静态化的调度在php层面(模式2),而goods-85.html是在apache层面(模式1)。

请下载到本地测试,这样就不会受网络速度的影响了。

感觉一样啊,没多少差别


另:上楼测试的页面,我在IE6下打开后发现变形,其他页面暂时没发现问题
...
zzhitch 发表于 2011-3-6 00:34


这个不是静态化的原因,是页面本身的问题,我试了下非静态化也是有问题的。



你的这几个关于页面的动态数据的问题,也是我在考虑的,实际上,这个是整个页面完全静态化和页面动态数据的不可解决的矛盾,也是速度和功能的矛盾,是需要我们权衡的地方。如果想要速度第一,那么必然会牺牲功能,如果要保留动态数据的功能,那么必然会牺牲速度,例如ecshop使用的页面局部静态化方式,保留了动态数据部分,这样显示页面的时候,程序里面必然要进行动态数据的解析和替换,影响到了速度(ecshop的lib_insert.php就是用于处理页面的动态数据部分的)。

我这个插件,最适合于无动态数据,或页面数据很少更新的页面和程序,例如cms,博客,ecshop的文章页等。对页面的动态数据部分,只能通过ajax动态调用了。

关于网页空间暴增的问题,如果产品很多,是有这个可能的,其实这个也是我们需要权衡的地方,是速度重要还是服务器硬盘空间重要。好在现在的硬盘已经很便宜了,这个问题已经不是我们要担心的问题了。如果不想要搜索结果生成静态页面,可修改page_cache_config.php文件,去除搜索页面url正则。





可否详说? 以便改进。

自己顶一下。

回复zzhitch

我这个插件,最适合于无动态数据,或页面数据很少更新的页面和程序,例如cms,博客,ecshop的文章页等。对页面的动态数据部分,只能通过ajax动态调用了。
sodoit 发表于 2011-3-6 09:01



这就不算宇宙通用了吧...再说了.现在硬盘可不便宜.一个146G的都要1千多....



1千多相对于购置新服务器来说,可便宜多了,如果购置新服务器,那么一年的托管费用最少要几千元啊,所以静态化还是有很大优势的.