宇宙通用版页面完全静态化插件 v1.0-by Sodoit
2016-07-07 15:00 来源:www.chinab4c.com 作者:ecshop专家
不好意思,宇宙通用,有点夸张了,不过这个插件的确是通用的,不仅仅所有版本的ecshop可用,任何其他程序也都可以用,而且使用简单,几乎不用修改原有的程序。 一、开发过程和原因 这两天在研究ecshop的速度,在使用linux的ab命令对服务器进行压力测试后发现,虽然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.php,page_cache_config.php,lib_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网速:很快,各个页面打开速度都快 |
测试了一下 ,楼主给的地址。我找到一个商品的页面。分别这样打开 感觉一样啊,没多少差别 另:上楼测试的页面,我在IE6下打开后发现变形,其他页面暂时没发现问题 提示楼主测试一下看看是不是这样 |
sodoit楼主,想问您几个问题: 1。页面动态数据是如何处理的? ①比如:商品点击数,这个是会随着用户点击次数的变化而变化的,这样的话,如果处理不好,是不是会不停的重新生成页面从而加重服务器负担呢? ②比如:前台价格,可能会随着用户登录状态的变化而变化,是不是也会随着登录状态变化而导致页面重新生成? 2。页面随机调用部分是如何处理的? 比如:我在商品页面随机关联5个商品,那么每次访问,当前页面是不是也会再次生成从而加重服务器负担呢? 3。分类页、搜索结果页数量会不会影响网页空间暴增? 我们知道,分类页会因为筛选参数数量自动生成若干“相近”POST,那么如果开启静态生成静态页面,是不是会生成若干静态页面而引起网页空间暴增呢? ************************************************ 刚认真看了您的说明文档,里面提到: 对于页面里的动态数据,例如ecshop的会员登陆状态,类似这样的,应该修改程序和模板,使用ajax动态调用。这个不属于本插件要解决的问题。…… 如果不修改程序和模板(怕影响升级),那这个插件还能用吗? 如果用的话是不是会导致页面随着动态数据变化而不断生成? |
测试了一下 ,楼主给的地址。我找到一个商品的页面。分别这样打开 出乎你的意料是有可能的,因为这样测试,整个系统的瓶颈并不在服务器的处理能力上(这个站还在开发,几乎没有访问量),而很可能在网络的传输速度上。实际上,不管goods.php?id=85还是goods-85.html,访问的都是静态化的页面,区别在于,goods.php?id=85这样的url,静态化的调度在php层面(模式2),而goods-85.html是在apache层面(模式1)。 请下载到本地测试,这样就不会受网络速度的影响了。 |
感觉一样啊,没多少差别 这个不是静态化的原因,是页面本身的问题,我试了下非静态化也是有问题的。 |
你的这几个关于页面的动态数据的问题,也是我在考虑的,实际上,这个是整个页面完全静态化和页面动态数据的不可解决的矛盾,也是速度和功能的矛盾,是需要我们权衡的地方。如果想要速度第一,那么必然会牺牲功能,如果要保留动态数据的功能,那么必然会牺牲速度,例如ecshop使用的页面局部静态化方式,保留了动态数据部分,这样显示页面的时候,程序里面必然要进行动态数据的解析和替换,影响到了速度(ecshop的lib_insert.php就是用于处理页面的动态数据部分的)。 我这个插件,最适合于无动态数据,或页面数据很少更新的页面和程序,例如cms,博客,ecshop的文章页等。对页面的动态数据部分,只能通过ajax动态调用了。 关于网页空间暴增的问题,如果产品很多,是有这个可能的,其实这个也是我们需要权衡的地方,是速度重要还是服务器硬盘空间重要。好在现在的硬盘已经很便宜了,这个问题已经不是我们要担心的问题了。如果不想要搜索结果生成静态页面,可修改page_cache_config.php文件,去除搜索页面url正则。 |
可否详说? 以便改进。 |
自己顶一下。 |
回复zzhitch 这就不算宇宙通用了吧...再说了.现在硬盘可不便宜.一个146G的都要1千多.... |
1千多相对于购置新服务器来说,可便宜多了,如果购置新服务器,那么一年的托管费用最少要几千元啊,所以静态化还是有很大优势的. |
最近更新
常用插件
- ecshop2.7.1打印发货单插件
ecshop2.7.1打印发货单插件介绍:ecshop2.7.1和以前的ecshop版本不一样,ecs...
- ecshop商品分类名称增加样
ecshop插件介绍:本插件可以方便在后台管理,为ecshop商品分类名称增加样...
- ecshop二次开发详细页面生
插件介绍: ECSHOP系统,在很多时候,很多商品没有人购买,不但购买的人...
- ecshop分类批量扩展插件
ecshop分类批量扩展插件,这个插件是ecshop插件里面比较核心的插件。我们...
- ecshop二次商品订购人信息
ecshop二次商品订购人信息填写插件,有时候给朋友送花,或者是送礼品的...