类别:FRONTEND / 前端 / 日期:2020-05-07 / 浏览:4612 / 评论:6

    最近在捣鼓站点前端框架的优化,发现博客的图片TTFB竟然高达1秒,而且还是40x40的缩略图.. 多番搜寻之后发现竟然是缩略图插件导致的,这就尴尬了,主要是我用的小鸡带宽很小,关闭缩略图的话,只能提供三四个人同时访问,因此只能想办法来解决这个问题。

解决Z-blog缩略图插件TTFB问题  zblog ttfb php 伪静态 缩略图 第1张

    期间咨询了一个插件开发者,在咨询问题的同时,突然灵光一闪,会不会是我伪静态规则导致的?果然给到我的答案就是,确实是插件伪静态的问题... 这就让我很尴尬了,如果按照插件作者讲的伪静态规则排序的话,我的网站直接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参数,至于删除理由就是,正常情况下我们只需要固定一种类型就可以了。最后就是设置,这种方式不需要站点伪静态的支持,因此不用开启伪静态。

解决Z-blog缩略图插件TTFB问题  zblog ttfb php 伪静态 缩略图 第2张

    现在即便是强制刷新静态图片,也不会上200MS,比原先动不动就500MS的情况好太多了。

解决Z-blog缩略图插件TTFB问题  zblog ttfb php 伪静态 缩略图 第3张

赞助

感谢您的打赏~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文使用「署名-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议 / Article Use Creative Commons Attribution-ShareAlike 4.0 International License「CC BY 4.0」

 可能感兴趣的文章

伤心叹戈

评论区

共有 6 条评论

user 历史大全 / 2021-03-01 22:01:37 / Windows 8.1 x64 / Google Chrome 69.0.3497.100 / 回复

看看怎么办到的

user 访客 / 2020-07-22 09:02:11 / Windows 7 / Google Chrome 78.0.3904.108 / 回复

学习一下

user 访客 / 2020-05-29 16:10:16 / Windows 10 x64 / QQBrowser 10.5.3863.400 / 回复

优秀来学习

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。

近期评论