类别:FRONTEND / 前端 / 日期:2020-05-07 / 浏览:4612 / 评论:6
最近在捣鼓站点前端框架的优化,发现博客的图片TTFB竟然高达1秒,而且还是40x40的缩略图.. 多番搜寻之后发现竟然是缩略图插件导致的,这就尴尬了,主要是我用的小鸡带宽很小,关闭缩略图的话,只能提供三四个人同时访问,因此只能想办法来解决这个问题。
期间咨询了一个插件开发者,在咨询问题的同时,突然灵光一闪,会不会是我伪静态规则导致的?果然给到我的答案就是,确实是插件伪静态的问题... 这就让我很尴尬了,如果按照插件作者讲的伪静态规则排序的话,我的网站直接500,按照我的规则排序的话,伪静态虽然能生成,但是与程序无法配合处理? 开发者告诉我说是服务器问题,可是我真的是找不出什么问题,如果一定是有问题的话,那就是zblog程序本身伪静态的问题,兼容性太差! 闲话少说,先说说解决思路吧。
有两种解决方式,一种是修改插件看看他是怎么解析的,一种是在模板加入判断处理。当然是选择后者了,前两天改那个评论插件让我现在都感到后怕!这里我们先看下原本的模板代码
{php} $order = array('log_ViewNums'=>'DESC'); $where = array(array('=','log_Status','0')); $array = $zbp->GetArticleList(array('*'),$where,$order,array(6),''); {/php} {foreach $array as $hotlist} {php} $pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png|\.bmp]))[\'|\"].*?[\/]?>/"; $content = $hotlist->Content; preg_match_all($pattern,$content,$matchContent); if(isset($matchContent[1][0])) $src=IMGS::getPicUrlBy($matchContent[1][0],40,40,$type); //调用插件修改图片 else $src="/theme/{$theme}/style/images/pic.png"; {/php} {/foreach}
我们需要在IMGS插件处理图片之前加入IF判定,这里的加入方法有两种,一种是放在前面判断,如果没有发现缩略图,则调用插件修改图片,这种需要你能够解析计算出路径,主要是他的加密处理,跑起来也不见得会有多快。因此我选择了第二种,在后面加入判断,如下
该部分内容已隐藏,评论后 刷新页面 可见。
这个缩略图插件的虽然开启了伪静态重写,但是实际上他访问的仍然是php?src的地址,因此这里我们直接取$src是没问题的,他是不会经过插件处理的。 还有,这里的定义图片绝对地址是真正意义上的绝对地址,如果你是内网的话,可以考虑一下http的方式,如下
#举例1 if(@fopen( $src, 'r' )) { echo '存在的时候'; $test = $src; } else { echo '不存在的时候'; } #举例2 $curl = curl_init($src); curl_setopt($curl, CURLOPT_NOBODY, true); $result = curl_exec($curl); //$ret = false; $test = $result4; if ($result !== false) { $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($statusCode == 200) { //$ret = true; $test = $src; } } curl_close($curl);
外网的情况不建议使用此方式,内网可以优先考虑,因为这种方式不需要定义绝对路径。修改完成之后,你就会发现已经可以正常缓存了,这里要注意,插件建议把内置url规则的cuttype参数删掉,修改方式如下
//$this->cachefile=$blogpath.'imgs/'.$this->encodesrc.'-'.$this->width.'-'.$this->height.'-'.$this->cuttype.'-a.jpg'; this->cachefile=$blogpath.'imgs/'.$this->encodesrc.'-'.$this->width.'-'.$this->height.'-a.jpg';
根据上面的方式类推即可删除插件cuttype参数,至于删除理由就是,正常情况下我们只需要固定一种类型就可以了。最后就是设置,这种方式不需要站点伪静态的支持,因此不用开启伪静态。
现在即便是强制刷新静态图片,也不会上200MS,比原先动不动就500MS的情况好太多了。
共有 6 条评论
看看怎么办到的
学习一下
优秀来学习
发表评论 / 取消回复