標(biāo)簽:WordPress
WordPress技巧Apache上WordPress免插件生成適應(yīng)360站長(zhǎng)平臺(tái)sitemap.xml的php代碼
先森使用了WordPress的DX-Seo插件,該插件已經(jīng)能自動(dòng)生成sitemap.xml文件了,但是先森為什么還要折騰有張戈博客提供的代碼版呢?因?yàn)镈X-Seo生成的sitemap.xml文件360不能識(shí)別,而百度則識(shí)別正常。先來(lái)看看先森用了張哥代碼版的效果,我設(shè)置的代碼版是sitemap-360.xml文件:360站長(zhǎng)平臺(tái) Sitemap提交DX-Seo生成的sitemap.xml文件在360中鏈接數(shù)量一直顯示為0.而用了張哥的代碼版生成的則非常給力。下面就為大家介紹這個(gè)WordPress技巧。既然是代碼版,首先你得確定你有顆愿意折騰的心。PHP代碼部分張戈提供的代碼版sitemap.xml文件可以同時(shí)生成首頁(yè)、文章、單頁(yè)面、分類和標(biāo)簽,這點(diǎn)比網(wǎng)上其他代碼要完善的多。<?phprequire('./wp-blog-header.php');header("Content-type: text/xml");header('HTTP/1.1 200 OK');$posts_to_show = 1000; echo '<?xml version="1.0" encoding="UTF-8"?>';echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">'?><!-- generated-on=<?php echo get_lastpostdate('blog'); ?> Diy By 張戈博客(http://zhangge.net)--> <url> <loc><?php echo get_home_url(); ?></loc> <lastmod><?php $ltime = get_lastpostmodified(GMT);$ltime = gmdate('Y-m-d\TH:i:s+00:00', strtotime($ltime)); echo $ltime; ?></lastmod> <changefreq>daily</changefreq> <priority>1.0</priority> </url><?php/* 文章頁(yè)面 */ $myposts = get_posts( "numberposts=" . $posts_to_show );foreach( $myposts as $post ) { ?> <url> <loc><?php the_permalink(); ?></loc> <lastmod><?php the_time('c') ?></lastmod> <changefreq>monthly</changefreq> <priority>0.6</priority> </url><?php } /* 文章循環(huán)結(jié)束 */ ?> <?php/* 單頁(yè)面 */ $mypages = get_pages();if(count($mypages) > 0) { foreach($mypages as $page) { ?> <url> <loc><?php echo get_page_link($page->ID); ?></loc> <lastmod><?php echo str_replace(" ","T",get_page($page->ID)->post_modified); ?>+00:00</lastmod> <changefreq>weekly</changefreq> <priority>0.6</priority> </url><?php }} /* 單頁(yè)面循環(huán)結(jié)束 */ ?> <?php/* 博客分類 */ $terms = get_terms('category', 'orderby=name&hide_empty=0' );$count = count($terms);if($count > 0){foreach ($terms as $term) { ?> <url> <loc><?php echo get_term_link($term, $term->slug); ?></loc> <changefreq>weekly</changefreq> <priority>0.8</priority> </url><?php }} /* 分類循環(huán)結(jié)束 */?> <?php /* 標(biāo)簽(可選) */$tags = get_terms("post_tag");foreach ( $tags as $key => $tag ) { $link = get_term_link( intval($tag->term_id), "post_tag" ); if ( is_wp_error( $link ) ) return false; $tags[ $key ]->link = $link;?> <url> <loc><?php echo $link ?></loc> <changefreq>monthly</changefreq> <priority>0.4</priority> </url><?php } /* 標(biāo)簽循環(huán)結(jié)束 */ ?> </urlset>將以上代碼保存為sitemap.php,傳到網(wǎng)站根目錄。一定要記住,是網(wǎng)站根目錄。眼尖的同學(xué)估計(jì)已經(jīng)發(fā)現(xiàn),代碼結(jié)尾處有一個(gè)</urlset>的關(guān)閉標(biāo)簽,這并不是多寫(xiě)了哦,千萬(wàn)不要?jiǎng)h除。Apache偽靜態(tài)如果要看Nginx的偽靜態(tài)代碼可以去下面的原文鏈接張戈博客那里去看,先森本文著重講下Apache方面的偽靜態(tài)。張哥提供的Apache偽靜態(tài)代碼是在.htaccess中添加下面的代碼:RewriteRule ^(sitemap)\.xml$ $1.php先森實(shí)際操作后發(fā)現(xiàn),可能還需要在前面加上一句,也就是在.htaccess中添加下面的代碼:RewriteEngine onRewriteRule ^(sitemap)\.xml$ $1.php由于.htaccess是比較重要的文件,在修改前請(qǐng)務(wù)必備份。做好偽靜態(tài)規(guī)則后,就可以直接訪問(wèn)sitemap.xml看看效果了,比如 //www.cnidcc.cn/sitemap-360.xml 總結(jié)這篇WordPress技巧一定要有愿意折騰的心,實(shí)際操作中可能會(huì)出現(xiàn)很多意外的問(wèn)題。下面總結(jié)一下需要注意的地方:①php文件要放在網(wǎng)站根目錄下;②注意不要誤刪除結(jié)尾的</urlset>標(biāo)簽;③php代碼可以根據(jù)實(shí)際需求增減內(nèi)容,如刪除標(biāo)簽部分的php代碼;④修改.htaccess前注意備份;⑤php文件設(shè)置的什么文件名,.htaccess文件中寫(xiě)規(guī)則時(shí)則做相應(yīng)的修改。如新建的是sitemap-360.php,那么.htaccess規(guī)則中的(sitemap)需改成(sitemap-360)。
WordPress技巧WordPress針對(duì)360搜索智能摘要的優(yōu)化措施
先森之前將博客針對(duì)360搜索智能摘要進(jìn)行了優(yōu)化,做好之后提交了就沒(méi)有再管了。看站長(zhǎng)統(tǒng)計(jì)的時(shí)候看到了360搜索引擎引入的訪問(wèn),再去看360看關(guān)鍵詞搜索的效果,發(fā)現(xiàn)智能摘要生效了。再查詢了下收錄,看到收錄的文章中只要帶圖片的,都變成智能摘要的樣式了,效果不錯(cuò),趕緊分享下。雖然360流氓依舊,但是它流氓的結(jié)果還是比較顯著的——360搜索在搜索引擎中的分量越來(lái)越重。360瀏覽器、360導(dǎo)航被360有錢(qián)聯(lián)盟的能手們裝進(jìn)了家家戶戶,所以360搜索用的人就越來(lái)越多了。既如此,作為站長(zhǎng),就應(yīng)該滿足網(wǎng)民們的喜好。重點(diǎn)是,先森感覺(jué)相對(duì)于百度,360顯得要親民一些。360搜索智能摘要先森先將360的原文摘抄一下:智能摘要有什么好處?智能摘要有利于網(wǎng)站結(jié)果在網(wǎng)頁(yè)搜索中更具有時(shí)效性的展現(xiàn),有別于一般網(wǎng)站結(jié)果的展現(xiàn),將會(huì)吸引更多用戶的點(diǎn)擊。用戶的點(diǎn)擊增長(zhǎng)則對(duì)于網(wǎng)站收錄權(quán)重和排序權(quán)重都會(huì)帶來(lái)有力的影響。智能摘要實(shí)現(xiàn)的前提是需要站長(zhǎng)提供結(jié)構(gòu)化的數(shù)據(jù)結(jié)構(gòu)化數(shù)據(jù)在這里特定指對(duì)網(wǎng)站具有一致特征的數(shù)據(jù),每一列數(shù)據(jù)都不能再細(xì)分,數(shù)據(jù)類型一致,且數(shù)據(jù)之間是唯一關(guān)聯(lián)的數(shù)據(jù),所有關(guān)系型數(shù)據(jù)庫(kù)都可以理解為結(jié)構(gòu)化數(shù)據(jù)。智能摘要展現(xiàn)范例360搜索智能摘要,是通過(guò)網(wǎng)頁(yè)特殊的標(biāo)簽將需要的數(shù)據(jù)提供給搜索引擎,并在搜索結(jié)果中按照既定的模版展現(xiàn)的實(shí)現(xiàn)形式,目的是為了提升搜索結(jié)果的體驗(yàn),幫助站長(zhǎng)提升搜索結(jié)果點(diǎn)擊率。360搜索智能摘要得到很多大站的支持,包括阿里巴巴,搜狐,新浪,迅雷看看,縱橫中文網(wǎng),爆米花等等,取得良好效果。以上是360站長(zhǎng)平臺(tái)的解釋。如何優(yōu)化在網(wǎng)站上添加360智能摘要能識(shí)別的Meta標(biāo)簽:360搜索智能摘要標(biāo)準(zhǔn)化的標(biāo)簽?zāi)0嬗泻芏喾N類型,我們WordPress基本上都是被人拿來(lái)做博客,所以我們直奔博客的標(biāo)準(zhǔn)化標(biāo)簽?zāi)0迦ゾ托辛恕H缦率?60分享的博客標(biāo)準(zhǔn)化標(biāo)簽?zāi)0澹?lt;!--必填--><meta property="og:type" content="blog"/><meta property="og:image" content="圖片地址"/><meta property="og:release_date" content="發(fā)表時(shí)間"/><!--選填--><meta property="og:title" content=" 博客標(biāo)題"/><meta property="og:description" content=" 博客描述" /><meta property="og:author" content="博客作者"/>會(huì)DIY的同學(xué)估計(jì)自己兩下就能搞定了,先森借鑒一下張戈博客關(guān)于百度星火計(jì)劃的代碼,輕松實(shí)現(xiàn)。實(shí)話說(shuō),先森本身也是先部署了星火計(jì)劃的代碼,再來(lái)部署的360智能摘要的。只使用360搜索智能摘要的,則用以下代碼:/*** WordPress針對(duì)360搜索智能摘要的優(yōu)化措施* 只添加360搜索智能摘要版* 文章地址://www.cnidcc.cn/wpr_zd360ssznzydyhcs.html*/add_action('wp_head', 'starfire',0);if(!function_exists('starfire')){ function starfire(){ if (is_singular()) { date_default_timezone_set('PRC'); //必填部分 echo '<meta property="og:type" content="blog"/> <meta property="og:release_date" content="'.get_the_date('c').'"/> <meta property="og:image" content="'.get_mypost_thumbnail($post->ID).'" />'; //選填部分 //輸出文章標(biāo)題+分隔符+網(wǎng)站名稱,不喜歡這種形式的請(qǐng)自行改造(如果不需要這個(gè)標(biāo)簽,請(qǐng)刪除以下三行)。 echo '<meta property="og:title" content="'.trim(wp_title('',0)).' | '; bloginfo('name'); echo '" />'; //默認(rèn)截取文章220個(gè)字作為摘要,可以自行修改下行220為其他整數(shù) echo '<meta property="og:description" content="'.get_mypost_excerpt($post->ID, 220).'……" />'; //博客作者 echo '<meta property="og:author" content="'; bloginfo('name'); echo '" />'; } }}/*** WordPress 獲取文章摘要整理版 By 張戈博客*/function get_mypost_excerpt($post_ID,$len){ if (!function_exists('utf8Substr')) { function utf8Substr($str, $from, $len) { return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', '$1',$str); } } if(!$post_content){ $post = get_post($post_ID); $post_content = $post->post_content; } if ($post->post_excerpt) { $description = $post->post_excerpt; } else { if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){ $post_content = $result['1']; } else { $post_content_r = explode("\n",trim(strip_tags($post->post_content))); $post_content = $post_content_r['0']; } $description = utf8Substr($post_content,0,$len); return $description; }}/*** WordPress 獲取文章圖片加強(qiáng)版 By 張戈博客*/function get_mypost_thumbnail($post_ID){ if (has_post_thumbnail()) { $timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), 'full' ); $url = $timthumb_src[0]; } else { if(!$post_content){ $post = get_post($post_ID); $post_content = $post->post_content; } preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', do_shortcode($post_content), $matches); if( $matches && isset($matches[1]) && isset($matches[1][0]) ){ $url = $matches[1][0]; }else{ $url = ''; } } return $url;}如果想要即滿足百度的星火計(jì)劃,又想滿足360搜索的智能摘要,則使用下面的代碼:/*** WordPress針對(duì)360搜索智能摘要的優(yōu)化措施* 百度星火、360搜索智能摘要同時(shí)滿足版* 文章地址://www.cnidcc.cn/wpr_zd360ssznzydyhcs.html*/add_action('wp_head', 'starfire',0);if(!function_exists('starfire')){ function starfire(){ //新增判斷,如果是原創(chuàng)文章才加入星火計(jì)劃META申明 $copy = get_post_meta($post->ID, 'author', true); if (is_singular()) { date_default_timezone_set('PRC'); //360智能摘要必填部分 echo '<meta property="og:type" content="blog"/> <meta property="og:release_date" content="'.get_the_date('c').'"/> <meta property="og:image" content="'.get_mypost_thumbnail($post->ID).'" />'; //360智能摘要選填部分 //輸出文章標(biāo)題+分隔符+網(wǎng)站名稱,不喜歡這種形式的請(qǐng)自行改造(如果不需要這個(gè)標(biāo)簽,請(qǐng)刪除以下三行)。 echo '<meta property="og:title" content="'.trim(wp_title('',0)).' | '; bloginfo('name'); echo '" />'; //默認(rèn)截取文章220個(gè)字作為摘要,可以自行修改下行220為其他整數(shù) echo '<meta property="og:description" content="'.get_mypost_excerpt($post->ID, 220).'……" />'; //博客作者 echo '<meta property="og:author" content="'; bloginfo('name'); echo '" />'; if(empty($copy)){ //百度星火計(jì)劃必填部分 echo '<meta property="og:type" content="article"/> <meta property="article:published_time" content="'.get_the_date('c').'"/>'; echo '<meta property="article:author" content="';bloginfo('name');echo '" />'; //百度星火計(jì)劃選填部分 //輸出博客名稱,如果想改成其他內(nèi)容,比如作者請(qǐng)自行修改 bloginfo('name') echo '<meta property="article:published_first" content="'; bloginfo('name'); echo ','; the_permalink(); echo '" />'; } } }}/*** WordPress 獲取文章摘要整理版 By 張戈博客*/function get_mypost_excerpt($post_ID,$len){ if (!function_exists('utf8Substr')) { function utf8Substr($str, $from, $len) { return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', '$1',$str); } } if(!$post_content){ $post = get_post($post_ID); $post_content = $post->post_content; } if ($post->post_excerpt) { $description = $post->post_excerpt; } else { if(preg_match('/<p>(.*)<\/p>/iU',trim(strip_tags($post->post_content,"<p>")),$result)){ $post_content = $result['1']; } else { $post_content_r = explode("\n",trim(strip_tags($post->post_content))); $post_content = $post_content_r['0']; } $description = utf8Substr($post_content,0,$len); return $description; }}/*** WordPress 獲取文章圖片加強(qiáng)版 By 張戈博客*/function get_mypost_thumbnail($post_ID){ if (has_post_thumbnail()) { $timthumb_src = wp_get_attachment_image_src( get_post_thumbnail_id($post_ID), 'full' ); $url = $timthumb_src[0]; } else { if(!$post_content){ $post = get_post($post_ID); $post_content = $post->post_content; } preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', do_shortcode($post_content), $matches); if( $matches && isset($matches[1]) && isset($matches[1][0]) ){ $url = $matches[1][0]; }else{ $url = ''; } } return $url;}請(qǐng)將以上代碼二選一添加到WordPress主題functions.php函數(shù)模板當(dāng)中,新增的Meta標(biāo)簽將從wp_head()這個(gè)函數(shù)輸出到前臺(tái)。若發(fā)現(xiàn)沒(méi)效果,那就只有直接將代碼進(jìn)行修改,將輸出Meta標(biāo)簽部分單獨(dú)放置在header.php中的<head>中(個(gè)別主題可能未用wp_head()函數(shù))。使用第二段代碼的,如果不是原創(chuàng)文章,我們可以新增一個(gè)自定義欄目author,值任意或者填寫(xiě)原文地址。而原創(chuàng)文章則不新增這個(gè)欄目。有了這個(gè)自定義欄目做判斷,代碼就只會(huì)在原創(chuàng)文章頁(yè)面中插入星火計(jì)劃的META申明了,不至于違反百度的游戲規(guī)則!360搜索的智能摘要?jiǎng)t不會(huì)受到自定義欄目的影響。如果想對(duì)星火計(jì)劃有更多了解的朋友,可以去看看張戈博客的介紹:張戈博客:WordPress針對(duì)百度星火計(jì)劃2.0原創(chuàng)保護(hù)的優(yōu)化措施前臺(tái)效果上文為大家提供了兩種代碼,不同的代碼效果也是不一樣的,我們只需要針對(duì)文章和頁(yè)面進(jìn)行優(yōu)化,所以代碼中有文章和頁(yè)面的判斷。加入代碼后,到前臺(tái)隨便打開(kāi)一篇文章,然后查看源代碼即可見(jiàn)到代碼的效果。首先是只使用360搜索智能摘要的:360搜索智能摘要然后是百度星火、360搜索智能摘要同時(shí)滿足版:百度星火、360搜索智能摘要同時(shí)滿足版到這里,關(guān)于兩個(gè)搜索引擎的Meta標(biāo)簽優(yōu)化就做好了,至于兩種標(biāo)簽規(guī)范放在一起是否會(huì)產(chǎn)生問(wèn)題,短時(shí)間內(nèi)還不得而知,不過(guò)問(wèn)了下張戈博客的張哥,好像是沒(méi)什么問(wèn)題的。讓時(shí)間來(lái)檢驗(yàn)吧。部署好之后,還要到360站長(zhǎng)平臺(tái)提交哦,提交鏈接的注意事項(xiàng)請(qǐng)看下文。360智能摘要的要求根據(jù)上面的解釋我們不難看出,360推出的這個(gè)智能摘要是為了增加點(diǎn)擊、權(quán)重的,符合我們站長(zhǎng)的需求。而提交的前提符合智能摘要的要求,先森整理了一下基本的注意事項(xiàng):1. 提交之前檢查頁(yè)面是否被收錄,只有索引了頁(yè)面才有可能被展現(xiàn),進(jìn)而通過(guò)提升點(diǎn)擊率來(lái)影響權(quán)重,因而建議選擇被索引,有展現(xiàn),最好是有點(diǎn)擊的頁(yè)面進(jìn)行重點(diǎn)提交。2.正確的按照要求插入了頁(yè)面標(biāo)簽。3.提交預(yù)覽URL必須是可以正常訪問(wèn),解析的。4. 檢查站點(diǎn)是否限制了360蜘蛛的抓取,如果限制了蜘蛛抓取,會(huì)因?yàn)闊o(wú)法下載頁(yè)面而不能展現(xiàn),且多次提交會(huì)被拉入限制申請(qǐng)黑名單。5. 一個(gè)站點(diǎn)一個(gè)類型提交一個(gè)預(yù)覽地址即可,避免重復(fù)提交,一定時(shí)間內(nèi)提交次數(shù)太頻繁,會(huì)被視為作弊。6.提交并不一定展現(xiàn),展現(xiàn)與否取決于頁(yè)面的質(zhì)量和整體頁(yè)面的相關(guān)性。
WordPress技巧WordPress站長(zhǎng)們,快給你的文章加上文字統(tǒng)計(jì)吧
先森閑著沒(méi)事就愛(ài)逛逛張戈博客等WordPress大神們的博客,發(fā)現(xiàn)大神們的文章頁(yè)面中,很多都加上了文字字?jǐn)?shù)統(tǒng)計(jì)。不怎么起眼,但看到了會(huì)感覺(jué)很貼心。百度了一下,發(fā)現(xiàn)代碼基本上是來(lái)自知更鳥(niǎo)博客的,鳥(niǎo)叔確實(shí)厲害啊。先森體驗(yàn)了一把,代碼部署起來(lái)非常簡(jiǎn)單,先將下面的代碼放到functions.php里://字?jǐn)?shù)統(tǒng)計(jì)function count_words ($text) {global $post;if ( '' == $text ) { $text = $post->post_content; if (mb_strlen($output, 'UTF-8') < mb_strlen($text, 'UTF-8')) $output .= '本文共' . mb_strlen(preg_replace('/\s/','',html_entity_decode(strip_tags($post->post_content))),'UTF-8') . '個(gè)字'; return $output;}}然后在single.php中或其它希望顯示字?jǐn)?shù)統(tǒng)計(jì)的位置加上:<?php echo count_words ($text); ?>但是鳥(niǎo)叔也說(shuō)了,中文統(tǒng)計(jì)沒(méi)有什么問(wèn)題,但英文統(tǒng)計(jì)的是字母。英文按字母統(tǒng)計(jì),也就意味著一個(gè)字母統(tǒng)計(jì)就會(huì)+1。而我們WordPress最多接觸的就是代碼,代碼的字母動(dòng)輒就是成百上千。一篇文章看著沒(méi)有多少內(nèi)容,字?jǐn)?shù)統(tǒng)計(jì)卻會(huì)顯示幾千字,看著著實(shí)有點(diǎn)不爽。先森想要的效果是,中文按字?jǐn)?shù)統(tǒng)計(jì),英文按單詞統(tǒng)計(jì)。先森特意看了下Word,發(fā)現(xiàn)Word就是這種統(tǒng)計(jì)規(guī)則。但是令先森無(wú)奈的是,在各大搜索引擎搜了一遍,沒(méi)有找到能夠解決這個(gè)問(wèn)題的教程。鳥(niǎo)叔雖然也分享了統(tǒng)計(jì)英文博客文字的代碼,但是經(jīng)先森測(cè)試,好像不會(huì)對(duì)本站的代碼部分進(jìn)行統(tǒng)計(jì),總之就是統(tǒng)計(jì)出來(lái)的英文字?jǐn)?shù)不對(duì)。想要中文代碼統(tǒng)計(jì)文字時(shí)排除字母,再加上英文單詞統(tǒng)計(jì)的想法破滅了~請(qǐng)看下面內(nèi)容↓不過(guò)先森在搜索的時(shí)候,另外發(fā)現(xiàn)了我愛(ài)水煮魚(yú)關(guān)于如何統(tǒng)計(jì)中文字?jǐn)?shù)研究的文章。文章介紹了PHP中,計(jì)算字符串長(zhǎng)度的三種函數(shù)strlen,mb_strlen,mb_strwidth。水煮魚(yú)用這三個(gè)函數(shù)去測(cè)試統(tǒng)計(jì)字符串的長(zhǎng)度,看看它們分別把中文算成幾個(gè)字節(jié):echo strlen("你好ABC") . "";// 輸出 9echo mb_strlen("你好ABC", 'UTF-8') . "";// 輸出 5echo mb_strwidth("你好ABC") . "";// 輸出 7上面的測(cè)試顯示:strlen 把中文字符算成 3 個(gè)字節(jié),mb_strlen 不管中文還是英文,都算 1 個(gè)字節(jié),而mb_strwidth 則把中文算成 2 個(gè)字節(jié)。而實(shí)際上,mb_strwidth 才是正確的:中文 2 個(gè)字節(jié),英文 1 個(gè)字節(jié)。現(xiàn)在再返回去看鳥(niǎo)叔提供的代碼,統(tǒng)計(jì)的函數(shù)用的是第二種:mb_strlen。通過(guò)三種函數(shù)統(tǒng)計(jì)結(jié)果對(duì)比可知,這個(gè)函數(shù)是統(tǒng)計(jì)出來(lái)數(shù)字最少的一種。所以,在找到解決方法之前,鳥(niǎo)叔提供的代碼已經(jīng)是最好的解決方案了,將就著用吧。先森之前一直搜索的是WordPress的方法,但后來(lái)通過(guò)搜索PHP的方法,找到了一些解決方案。方案一:php 統(tǒng)計(jì)字?jǐn)?shù)(支持中英文)的實(shí)現(xiàn)代碼首先還是在functions.php中添加下面代碼;//php 統(tǒng)計(jì)字?jǐn)?shù)(支持中英文)的實(shí)現(xiàn)代碼function count_word($str){ $str = preg_replace('/[\x80-\xff]{1,3}/', ' ', $str,-1,$n); $n += str_word_count($str); return $n; }然后在希望顯示字?jǐn)?shù)統(tǒng)計(jì)的位置加上:<?php echo ";本文共".count_word($post->post_content)."個(gè)字";?>方案二:PHP統(tǒng)計(jì)中英文單詞數(shù)(UTF-8編碼)注:這種方案不會(huì)統(tǒng)計(jì)標(biāo)點(diǎn)符號(hào)。其實(shí)還有一種GB2312編碼的方法,但據(jù)說(shuō)無(wú)法統(tǒng)計(jì)中文,所以此處沒(méi)提。一樣的,在functions.php中添加下面代碼;//PHP統(tǒng)計(jì)中英文單詞數(shù)(UTF-8編碼)define( "UTF8_CHINESE_PATTERN", "/[\x{4e00}-\x{9fff}\x{f900}-\x{faff}]/u" );define( "UTF8_SYMBOL_PATTERN", "/[\x{ff00}-\x{ffef}\x{2000}-\x{206F}]/u" );// count only chinese wordsfunction str_utf8_chinese_word_count($str = ""){ $str = preg_replace(UTF8_SYMBOL_PATTERN, "", $str); return preg_match_all(UTF8_CHINESE_PATTERN, $str, $arr);}// count both chinese and englishfunction str_utf8_mix_word_count($str = ""){ $str = preg_replace(UTF8_SYMBOL_PATTERN, "", $str); return str_utf8_chinese_word_count($str) + str_word_count(preg_replace(UTF8_CHINESE_PATTERN, "", $str));}也是一樣的,在希望顯示字?jǐn)?shù)統(tǒng)計(jì)的位置加上:<?php echo ";本文共".str_utf8_mix_word_count($post->post_content)."個(gè)字";?>先森在測(cè)試的時(shí)候,發(fā)現(xiàn)不含代碼,文字較多的文章,這兩種方案統(tǒng)計(jì)除出來(lái)的數(shù)字會(huì)比鳥(niǎo)叔代碼統(tǒng)計(jì)出來(lái)的多。下圖中,第一個(gè)是鳥(niǎo)叔代碼統(tǒng)計(jì)出的,第二個(gè)是方案一統(tǒng)計(jì)出的,第三個(gè)是方案二統(tǒng)計(jì)出的。可以看到,方案一和方案二都比鳥(niǎo)叔的多,方案一又比方案二多。為什么會(huì)比鳥(niǎo)叔代碼統(tǒng)計(jì)的多先森沒(méi)懂,但是方案一又比方案二多確實(shí)符合了方案二不統(tǒng)計(jì)標(biāo)點(diǎn)符號(hào)的特性。純文字文章三種代碼文字統(tǒng)計(jì)情況而在存在代碼的文章中,后面的兩種方案統(tǒng)計(jì)出來(lái)的數(shù)字又會(huì)比鳥(niǎo)叔的小很多。存在代碼文章三種代碼文字統(tǒng)計(jì)情況總結(jié)本文共分享了三種統(tǒng)計(jì)代碼,要使用哪一種就根據(jù)各位自己的喜好來(lái)了。正是因?yàn)橄壬瓫](méi)有搞明白方案一、二兩種統(tǒng)計(jì)方式上面的那種情況到底是怎么回事,所以先森用的還是鳥(niǎo)叔的代碼。若有更合適的代碼,還請(qǐng)網(wǎng)友告知。
經(jīng)驗(yàn)雜筆用cookie記住用戶信息后ajax實(shí)現(xiàn)實(shí)時(shí)顯示Gravatar頭像并實(shí)時(shí)緩存到本地
首先說(shuō)一點(diǎn),本文的內(nèi)容是先森研究了幾天的成果,并且還導(dǎo)致了網(wǎng)站幾天沒(méi)有更新。先森之前遇到了開(kāi)啟CDN后網(wǎng)站會(huì)連先森登錄之后的顯示樣式一起緩存的問(wèn)題。想想還是很危險(xiǎn)的,要是文章頁(yè)第一次是被已知用戶訪問(wèn),那么其他所有人訪問(wèn)后就是他看到的樣子,那樣說(shuō)不定連他的郵箱地址都被暴露了。這個(gè)問(wèn)題很容易解決,通過(guò)張戈博客的cookie記住用戶信息的方法,再加上讓所有人訪問(wèn)網(wǎng)站都是未登錄狀態(tài),這個(gè)問(wèn)題就OK了。再加上一些優(yōu)化用戶體驗(yàn)的操作,也沒(méi)有花先森多少時(shí)間,但是gravatar頭像的事情,卻一直橫在了先森心中,先森的強(qiáng)迫癥就又犯了。關(guān)于過(guò)往研究的歷程,先森已經(jīng)分享過(guò)了,如果沒(méi)有看的最好可以去看看,本文是建在之前的基礎(chǔ)之上的:用cookie解決網(wǎng)站開(kāi)啟CDN緩存之后已知用戶頭像昵稱被緩存等系列問(wèn)題用cookie記住用戶信息后隱藏信息輸入框,優(yōu)化用戶體驗(yàn)預(yù)期效果先森想實(shí)現(xiàn)的顯示Gravatar的方式,并不是簡(jiǎn)單的用多說(shuō)或者Gravatar中國(guó)的服務(wù)器的那種。先森之前就用的是將頭像本地緩存,用以提高加載速度。所以先森想實(shí)現(xiàn)的是:1.用戶是已知用戶的時(shí)候,頁(yè)面打開(kāi)時(shí)自動(dòng)加載緩存在本地服務(wù)器的其郵箱對(duì)應(yīng)的Gravatar頭像。2.如果用戶修改或填寫(xiě)郵箱的時(shí)候,則自動(dòng)將其對(duì)應(yīng)的Gravatar緩存到本地服務(wù)器,再顯示出來(lái)。如果服務(wù)器不使用本地服務(wù)器的話,上面的兩條很容易實(shí)現(xiàn)。因?yàn)椴挥镁彺妫鳪ravatar的頭像鏈接又是固定的http://www.gravatar.com/avatar/xxxx(xxxx為郵箱的md5加密值),只要獲取到郵箱,將郵箱通過(guò)哈希算法變?yōu)閙d5加密值,將這段MD5值填入鏈接中,就是用戶的頭像了。但難就難在先森想要將頭像同時(shí)本地緩存。不過(guò),經(jīng)過(guò)幾天的努力,繞了很大的圈子,總算是搞定了。效果實(shí)現(xiàn)相信很多WordPress站長(zhǎng)的評(píng)論源代碼,是由comments.php、comments-ajax.php、comments-ajax.js三個(gè)文件構(gòu)成。如果是則很會(huì)很方便,不是也沒(méi)有多大差別。1.將Gravatar頭像緩存到本地服務(wù)器這個(gè)教程早就已經(jīng)爛大街了,為了本文內(nèi)容先森不得不重提一遍。為什么要緩存到本地服務(wù)器?因?yàn)镚ravatar是國(guó)外服務(wù)器的,很容易被墻,且容易訪問(wèn)超時(shí),導(dǎo)致網(wǎng)頁(yè)加載速度變慢。緩存到本地服務(wù)器就可以有效的解決這個(gè)尷尬。當(dāng)然,你也可以直接把頭像緩存到七牛云儲(chǔ)存,也就沒(méi)有本文這么麻煩了。為什么先森要選擇麻煩的方法?愛(ài)折騰唄~將Gravatar頭像緩存到本地服務(wù)器的方法就是,在你的functions.php中加入以下代碼://本地緩存gravatar頭像function fa_cache_avatar($avatar, $id_or_email, $size, $default, $alt){ $avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "gravatar.duoshuo.com", $avatar); $tmp = strpos($avatar, 'http'); $url = get_avatar_url( $id_or_email, $size ) ; $url = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "gravatar.duoshuo.com", $url); $avatar2x = get_avatar_url( $id_or_email, ( $size * 2 ) ) ; $avatar2x = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "gravatar.duoshuo.com", $avatar2x); $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp); $tmp = strpos($g, 'avatar/') + 7; $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp); $w = home_url(); $e = ABSPATH .'avatar/'. $size . '*'. $f .'.jpg'; $e2x = ABSPATH .'avatar/'. ( $size * 2 ) . '*'. $f .'.jpg'; $t = 1209600; //緩存更新時(shí)間 if ( (!is_file($e) || (time() - filemtime($e)) > $t) && (!is_file($e2x) || (time() - filemtime($e2x)) > $t ) ) { copy(htmlspecialchars_decode($g), $e); copy(htmlspecialchars_decode($avatar2x), $e2x); } else { $avatar = $w.'/avatar/'. $size . '*'.$f.'.jpg'; $avatar2x = $w.'/avatar/'. ( $size * 2) . '*'.$f.'.jpg'; if (filesize($e) < 1000) copy($w.'/avatar/default.jpg', $e); if (filesize($e2x) < 1000) copy($w.'/avatar/default.jpg', $e2x); $avatar = "<img alt='{$alt}' src='{$avatar}' srcset='{$avatar2x}' class='avatar avatar-{$size} photo' id='real-time-gravatar' height='{$size}' width='{$size}' />"; } return $avatar;}add_filter('get_avatar', 'fa_cache_avatar',1,5);如果你的網(wǎng)站已經(jīng)實(shí)現(xiàn)則忽略,沒(méi)有的話就先添加備用。2.新建gravatar.php上面的代碼是修改了WordPress的get_acatar函數(shù)。而我們想要實(shí)時(shí)的緩存Gravatar郵箱,則需要將郵箱的MD5值傳遞給get_acatar函數(shù)。上面的代碼最后會(huì)有輸出,而我們并不需要它的輸出,只要它將頭像緩存即可。所以我們需要新建一個(gè)gravatar.php文件,將ajax傳遞過(guò)來(lái)的郵箱MD5值接收,并讓get_acatar函數(shù)將對(duì)應(yīng)的頭像緩存。gravatar.php的代碼如下:<?php //緩存頭像if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) { header('Allow: POST'); header('HTTP/1.1 405 Method Not Allowed'); header('Content-Type: text/plain'); echo "請(qǐng)不要直接訪問(wèn)該頁(yè)面"; exit;}require( dirname(__FILE__) . '/../../../wp-load.php' );//使用 WordPress自帶函數(shù)進(jìn)行數(shù)據(jù)提交 $email = $_POST['email'];//獲取郵箱md5值 get_avatar( $email, $size = '48' ); //將頭像緩存 ?>其中,下面這段代碼很重要:require( dirname(__FILE__) . '/../../../wp-load.php' );如果不加上的話會(huì)導(dǎo)致數(shù)據(jù)存入失敗,POST訪問(wèn)也會(huì)返回錯(cuò)誤500。這也是擋住了先森研究很久的一個(gè)問(wèn)題。之前代碼中之后最后的兩句,獲取和緩存,結(jié)果一直顯示不成功。訪問(wèn)錯(cuò)誤500后來(lái)在百度找原因一直沒(méi)找到,卻意外看到了一篇寫(xiě)用ajax提交評(píng)論的優(yōu)點(diǎn)的文章中有一句“使用wordpress自帶的admin-ajax.php進(jìn)行數(shù)據(jù)提交”,先森感覺(jué)腦子一炸,將comments-ajax.php中一句不起眼的代碼(即上面那句)復(fù)制過(guò)來(lái)。一嘗試。OK返回成功。3.ajax動(dòng)態(tài)刷新ajax是一種在不刷新整個(gè)頁(yè)面,與服務(wù)器實(shí)現(xiàn)數(shù)據(jù)交換的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。這個(gè)技術(shù)被稱為稱為“藝術(shù)”,但先森是不懂藝術(shù)的,所以這幾天花的最多的時(shí)間就是在這里了。先森還專門(mén)跑去w3school學(xué)了一下ajax方面的教程,結(jié)果也沒(méi)懂個(gè)啥,僅僅是對(duì)概念更清楚了些。這個(gè)技術(shù)在本文的擔(dān)當(dāng)是,動(dòng)態(tài)的將郵箱md5值提交給服務(wù)器,服務(wù)器將頭像緩存。我們的ajax代碼,可以加入到comments-ajax.js中,也可以自己新建一個(gè)js文件。首先,我們需要將Gravater郵箱地址變換為MD5值,需要用到一串復(fù)雜的算法,將以下代碼加入js中:Gravatar頭像郵箱轉(zhuǎn)MD5下載因?yàn)楸容^長(zhǎng),所以提供下載,不直接將代碼貼出來(lái)了。接下來(lái)將下面的代碼加入comments-ajax.js或你準(zhǔn)備好的js文件中:/**張戈博客原創(chuàng)*成航先森修改* //www.cnidcc.cn/ycookiejzyhxxhsxssxsgravatartxbsshcdbd.html ?*/var Umail = decodeURIComponent(GetCookie('email'));//通過(guò)cookie獲取用戶郵箱,并解碼var Uname = decodeURIComponent(GetCookie('author'));var Umail_md5 = "";if (Umail != "null" && Umail != "" && Umail != null) {//如果郵箱有內(nèi)容,則賦值 var Umail_md5 = hex_md5(Umail);}if (Umail_md5 != "" && Umail_md5 != null && Umail_md5 != "null") {//如果郵箱哈希后存在內(nèi)容 jQuery(document).ready(function($) { jQuery('#comment-author-info').hide();//隱藏信息填寫(xiě)框 }); /*下面的real-avatar是包裹著頭像的div*/ document.getElementById('real-avatar').innerHTML = "<img src='//cos.capjsj.cn/avatar/96*" + Umail_md5 + ".jpg' width='48' height='48' alt='avatar' class='avatar avatar-48 photo' id='real-time-gravatar'>"; var changeMsg = '修改信息'; var closeMsg = '關(guān)閉'; function toggleCommentAuthorInfo() { jQuery('#comment-author-info').slideToggle('slow', function() { if (jQuery('#comment-author-info').css('display') == 'none') {//如果信息填寫(xiě)框被隱藏 jQuery('.switch-author').text(changeMsg);//改變標(biāo)簽內(nèi)容為“修改信息” } else { jQuery('.switch-author').text(closeMsg);//改變標(biāo)簽內(nèi)容為"關(guān)閉" } }); }}var gar_img = document.getElementById("real-time-gravatar");/*頭像img標(biāo)簽*/var U_email = document.getElementById("email");var textarea = document.getElementById("comment");/*評(píng)論輸入框*/var KaK = navigator.userAgent.toLowerCase();/*獲取瀏覽器信息*/var chrome = KaK.indexOf('webkit') != -1;function changeGravatar() { email_value = U_email.value; email_md5 = hex_md5(email_value); php_url=js_url.replace('comments-ajax.js','gravatar.php');//替換js鏈接中的文件名 $.ajax({ type:'POST', data:{ "email": email_value, }, //ajax對(duì)象文件:gavater.php url:php_url, cache: false, }); new_ga = "//cos.capjsj.cn/avatar/48*" + email_md5 +".jpg"; newGravatar(new_ga);/*啟動(dòng)下面的腳本*/};function newGravatar(new_ga) { gar_img.setAttribute('src', new_ga);/*將圖片鏈接換成新的鏈接*/};if (chrome) { U_email.onblur = changeGravatar;/*鼠標(biāo)離開(kāi)輸入框時(shí)執(zhí)行 JavaScript 代碼*/} else { U_email.onchange = changeGravatar;/*在內(nèi)容改變的時(shí)候執(zhí)行*/};textarea.onmouseover = changeGravatar;/*在鼠標(biāo)指針移動(dòng)到元素上時(shí)觸發(fā)行 JavaScript 代碼代碼是從張戈博客那里扒來(lái)的,因?yàn)閺埜陮?shí)現(xiàn)的是Nginx自動(dòng)將Gravatar頭像本地緩存,所以他不用擔(dān)心先森的這種緩存問(wèn)題。所以先森將張哥的代碼稍作修改,增加了ajax代碼,既可以滿足先森的要求了。上面的代碼中,ajax代碼是下面這串:$.ajax({ type:'POST', data:{ "email": email_value, }, //ajax對(duì)象文件:gavater.php url:php_url, cache: false, });如果你需要調(diào)試,可以將代碼緩存下面這樣,根據(jù)彈窗信息確認(rèn)是否成功: $.ajax({ type:'POST', data:{ "email": email_value, }, //ajax對(duì)象文件:gavater.php url:php_url, cache: false, error: function(){ alert('發(fā)生意外錯(cuò)誤!'); //彈窗顯示 return false; }, success:function(){ alert('緩存成功'); } });應(yīng)網(wǎng)友要求,先貼出comments.php中form標(biāo)簽的內(nèi)容,以供參考。 <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform"> <div class="comt-title" id="comt-title"> <div class="comt-avatar pull-left" id="real-avatar"> <?php //輸入評(píng)論上的頭像 global $current_user; get_currentuserinfo(); if ( is_user_logged_in() ) //$current_user->user_email獲取郵箱 echo get_avatar( $current_user->user_email, $size = '48' ,'');//如果是管理員 elseif( !is_user_logged_in() && get_option('require_name_email') && $comment_author_email=='' ) echo get_avatar( $current_user->user_email, $size = '48','');//沒(méi)有登錄,但是是已知用戶 elseif( !is_user_logged_in() && get_option('require_name_email') && $comment_author_email!=='' ) echo get_avatar( $comment->comment_author_email, $size = '48','');//, $touxiang else echo get_avatar( $comment->comment_author_email, $size = '48' ,'');//, $touxiang ?> </div> <div class="comt-author" id="switch-author"> <?php if ( is_user_logged_in() ) {//判斷登錄 printf('<b id="nickname">'.$user_identity.'</b><span>發(fā)表我的評(píng)論</span>'); }else{ if( get_option('require_name_email') && !empty($comment_author_email) ){//如果沒(méi)登錄,但是是已知用戶 printf('<b id="nickname">'.$comment_author.'</b><span>歡迎回來(lái)</span> <b>【<a class="switch-author" href="javascript:toggleCommentAuthorInfo();" data-type="switch-author" style="font-size:15px;">修改信息</a>】</b>'); }else{//如果是未知用戶 printf('<b id="nickname"></b><span id="huilai">歡迎發(fā)表評(píng)論</span>'); } } ?> <?php //如果關(guān)閉了WP Super Cache中的讓已知用戶匿名,則要?jiǎng)h除下面的<b>標(biāo)簽?> <b id="switch-author" style="display:none">【<a class="switch-author" href="javascript:;" data-type="switch-author" style="font-size:15px;">修改信息</a>】</b> </div> <a id="cancel-comment-reply-link" class="pull-right" href="javascript:;">取消評(píng)論</a> </div> <div class="comt"> <div class="comt-box"> <textarea placeholder="說(shuō)點(diǎn)什么吧,您的回復(fù)是對(duì)先森最大的支持!" class="input-block-level comt-area" name="comment" id="comment" cols="50%" rows="3" tabindex="1" onkeydown="if(event.ctrlKey&&event.keyCode==13){document.getElementById('submit').click();return false};"></textarea> <div class="comt-ctrl"> <button class="btn btn-primary pull-right" type="submit" name="submit" id="submit" tabindex="5"><i class="fa fa-check-square-o"></i> 提交評(píng)論</button> <div class="comt-tips pull-right"><?php comment_id_fields(); do_action('comment_form', $post->ID); ?></div> <span class="muted comt-mailme"><?php deel_add_checkbox() ?></span> <span data-type="comment-insert-smilie" class="muted comt-smilie"><i class="fa fa-smile-o"></i> 表情</span> <div id="comment-smilies" class="hide" style="display:"><?php include(TEMPLATEPATH . '/smiley.php'); ?></div> </div> </div> <?php if ( !is_user_logged_in() ) { ?> <?php if( get_option('require_name_email') ){ ?> <div class="comt-comterinfo" id="comment-author-info"<?php if ( !empty($comment_author) ) echo 'style="display:none"';else echo 'style="display:block"'; ?>> <h4>Hi,您需要填寫(xiě)昵稱和郵箱!</h4> <ul> <li class="form-inline"><label class="hide" for="author">昵稱</label><input class="ipt" type="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" tabindex="2" placeholder="昵稱"><span class="help-inline">昵稱 (必填)</span></li> <li class="form-inline"><label class="hide" for="email">郵箱</label><input class="ipt" type="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" tabindex="3" placeholder="郵箱"><span class="help-inline">郵箱 (必填)</span></li> <li class="form-inline"><label class="hide" for="url">網(wǎng)址</label><input class="ipt" type="text" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" tabindex="4" placeholder="網(wǎng)址"><span class="help-inline">網(wǎng)址</span></li> </ul> </div> <?php } ?> <?php } ?> </div> </form>總結(jié)文中的代碼涉及到了很多標(biāo)簽的ID,請(qǐng)參考本站的設(shè)置情況進(jìn)行對(duì)應(yīng)修改。因?yàn)榇a逐行執(zhí)行的速度比服務(wù)器緩存的速度快,所以當(dāng)剛修改郵箱的時(shí)候,可能圖片會(huì)顯示404,但再次觸發(fā)更換頭像鏈接函數(shù)的時(shí)候,相關(guān)的頭像已經(jīng)被緩存成功就會(huì)顯示出來(lái)了。先森目前沒(méi)有想到解決的辦法,所以最后有一個(gè)經(jīng)過(guò)評(píng)論輸入框的時(shí)候也會(huì)觸發(fā)函數(shù)。這樣增加觸發(fā),頭像就能很好的顯示出來(lái)了,目前先這樣,等以后想到解決辦法再說(shuō)。這樣設(shè)置后的好處還有一點(diǎn),就是默認(rèn)頭像始終都是你設(shè)置本地緩存中的那個(gè)默認(rèn)頭像。
經(jīng)驗(yàn)雜筆用cookie記住用戶信息后隱藏信息輸入框,優(yōu)化用戶體驗(yàn)
上一篇文章,先森解決了設(shè)置CDN緩存后,用戶信息無(wú)法被記住的問(wèn)題。使用的是JS代碼操作cookie,用cookie記住用戶信息,這樣就可以無(wú)視緩存了。但這解決的只是初步的技術(shù)難題,后續(xù)我們還需要對(duì)用戶體驗(yàn)做好優(yōu)化。先森是這樣想的,當(dāng)cookie中,保存了用戶有效信息后,起碼要做到這幾點(diǎn):1.昵稱、郵箱、網(wǎng)址的填寫(xiě)框就應(yīng)該自動(dòng)隱藏。2.頭像旁邊顯示用戶昵稱。3.同時(shí),還需要在旁邊增加一個(gè)按鈕,方便用戶修改信息。隱藏信息填寫(xiě)框其實(shí)很簡(jiǎn)單,我們只需要在讀取cookie信息并寫(xiě)入填寫(xiě)框之后,添加一段代碼即可。關(guān)于用cookie保存用戶信息的全部代碼,大家請(qǐng)看前篇文章:用cookie解決網(wǎng)站開(kāi)啟CDN緩存之后已知用戶頭像昵稱被緩存等系列問(wèn)題我們?cè)凇凹虞d用戶信息”那一段中添加代碼。你們可以把前文中的“加載用戶信息”部分的代碼換成下面這段(主要是19行)://加載用戶信息function LoadRememberInfo() { var strName=GetCookie("author"); var strEmail=GetCookie("email"); var strHomePage=GetCookie("url"); var bolRemember=GetCookie("chkRemember"); var a_vlaue= document.getElementById("author"); if (a_vlaue != null){ if(bolRemember=="true"){ //如果勾選了“記住我” //通過(guò)decodeURIComponent對(duì)內(nèi)容解碼 if(strName){document.getElementById("author").value=decodeURIComponent(strName);//從 cookie獲取填寫(xiě)昵稱 }; if(strEmail){document.getElementById("email").value=strEmail;};//從 cookie獲取填寫(xiě)郵箱 //通過(guò)decodeURIComponent對(duì)內(nèi)容解碼 if(strHomePage){document.getElementById("url").value=decodeURIComponent(strHomePage);};//從 cookie獲取填寫(xiě)網(wǎng)址 if(bolRemember){document.getElementById("saveme").checked=bolRemember;};//----------------新增代碼-開(kāi)始--------------------- document.getElementById("comment-author-info").style.display="none";//隱藏“需要填寫(xiě)昵稱郵箱” document.getElementById("nickname").innerHTML=document.getElementById("author").value;//讓頭像旁邊,顯示已知用戶的名稱 document.getElementById("huilai").innerHTML='歡迎回來(lái)';//將“歡迎發(fā)表評(píng)論”改為“歡迎回來(lái)” document.getElementById("switch-author").style.display="";//顯示“修改信息”//----------------新增代碼-結(jié)束--------------------- } if(GetCookie("username")){ document.getElementById("author").value=unescape(GetCookie("username")); } } }主要是上面新增代碼部分,后面的注解寫(xiě)的很清楚了,請(qǐng)根據(jù)自己的實(shí)情修改。
經(jīng)驗(yàn)雜筆用cookie解決網(wǎng)站開(kāi)啟CDN緩存之后已知用戶頭像昵稱被緩存等系列問(wèn)題
先森之前也提到過(guò),CDN開(kāi)啟網(wǎng)頁(yè)HTML緩存之后,一篇文章在沒(méi)有緩存的情況下,如果第一次訪問(wèn)是先森自己訪問(wèn)的(或者是其他已知訪客訪問(wèn)的),那CDN緩存的時(shí)候,就會(huì)把先森登錄后顯示的界面緩存下來(lái)。先森自己的頭像被緩存也就是其他訪客訪問(wèn)的時(shí)候,會(huì)顯示“內(nèi)容管理”、“登出”、評(píng)論框會(huì)顯示先森的頭像,前面兩個(gè)因?yàn)闆](méi)有登錄,所以點(diǎn)擊之后也沒(méi)有用,但是評(píng)論框顯示先森的頭像的時(shí)候,沒(méi)有更改昵稱和郵箱的選項(xiàng),當(dāng)訪客寫(xiě)好評(píng)論提交的時(shí)候會(huì)提示“請(qǐng)輸入昵稱和郵箱”。雖然可以修改PHP代碼,讓昵稱和郵編填寫(xiě)框都顯示出來(lái),但是這樣是逃避問(wèn)題,治標(biāo)不治本。免費(fèi)資源部落的博主提醒先森,可能是開(kāi)了瀏覽器緩存的問(wèn)題。但是先森看了百度云加速的緩存設(shè)置,瀏覽器緩存最低設(shè)置時(shí)間都是兩個(gè)小時(shí),沒(méi)有關(guān)閉瀏覽器緩存的選項(xiàng)。而且,先森仔細(xì)想了一下,覺(jué)得也不可能是瀏覽器緩存的問(wèn)題,先森的問(wèn)題是當(dāng)先森自己訪問(wèn)后一篇文章后,別人在自己的電腦上再訪問(wèn)同樣的網(wǎng)頁(yè)后,會(huì)顯示和先森一樣的界面。而瀏覽器緩存,只會(huì)存在自己的電腦上。解決問(wèn)題在網(wǎng)上搜索了半天解決方法都沒(méi)有找到類似的教程,最后終于在張戈博客找到了很適合的解決方案。就是用cookie來(lái)記住已知用戶,摒棄WordPress本身的記住用戶。先森的想法是:1.WordPress方面。用WP Super Cache設(shè)置訪客訪問(wèn)到的頁(yè)面樣式。用之前介紹過(guò)的兩個(gè)設(shè)置“不要為已知用戶緩存”和“讓已知用戶匿名使他們?yōu)g覽的內(nèi)容是緩存文件”來(lái)使所有訪客訪問(wèn)到的頁(yè)面都相同,并且不增加服務(wù)器的負(fù)擔(dān)。WP Super Cache的兩個(gè)設(shè)置2.CDN方面。通過(guò)了第一步的設(shè)置,CDN再設(shè)置緩存除后臺(tái)外的所有內(nèi)容,則不會(huì)再出現(xiàn)緩存到已知用戶頭像和昵稱的問(wèn)題了。因?yàn)榫退闶钦鹃L(zhǎng)登錄,網(wǎng)頁(yè)中顯示的也是未登錄的狀態(tài)。3.JS方面。通過(guò)上面兩步設(shè)置之后,即使是以前在網(wǎng)站評(píng)論過(guò)的小伙伴,每次評(píng)論也都需要重新填寫(xiě)昵稱和郵箱,這樣對(duì)用戶體驗(yàn)不好,所以我們就要使用上文提到的將已知用戶信息存在用戶自己的設(shè)備cookie中,每次進(jìn)入網(wǎng)站,會(huì)自動(dòng)從cookie讀取填寫(xiě)信息,這樣就不用勞煩已知用戶們自己填寫(xiě)了。當(dāng)然,昵稱郵箱這些并不是私密等級(jí)非常高的信息,我們沒(méi)必要用session了。WordPress的WP Super Cache設(shè)置和CDN的設(shè)置很簡(jiǎn)單,需要注意的是緩存的時(shí)間,這個(gè)根據(jù)自己網(wǎng)站來(lái)設(shè)定。關(guān)鍵的是JS代碼布置的問(wèn)題。張戈為我們分享了他的代碼,前后共有兩篇文章,前篇是舊的代碼分享及如何布置,后篇是改良之后的代碼分享:WordPress記住評(píng)論用戶信息的js版本,直接操作cookie無(wú)視緩存解決JS操作Cookies出現(xiàn)的亂碼問(wèn)題,修復(fù)WordPress評(píng)論亂碼先森以為布置起來(lái)會(huì)很麻煩,但是經(jīng)過(guò)實(shí)踐后發(fā)現(xiàn),布置起來(lái)還是很快的,只要你和張戈一樣,使用的是原生的WordPress評(píng)論。部署代碼很簡(jiǎn)單,將下面的代碼加入主題的comments-ajax.js中,或者其他js里面:/**WordPress記住評(píng)論用戶信息的js版本,直接操作cookie無(wú)視緩存*https://zhangge.net/4538.html*https://zhangge.net/4684.html*///設(shè)置Cookiefunction SetCookie(sName, sValue,iExpireDays) { if (iExpireDays){ var dExpire = new Date(); dExpire.setTime(dExpire.getTime()+parseInt(iExpireDays*24*60*60*1000)); document.cookie = sName + "=" + escape(sValue) + "; expires=" + dExpire.toGMTString()+ "; path=/;domain=.capjsj.cn"; } else{ document.cookie = sName + "=" + escape(sValue)+ "; path=/;domain=.capjsj.cn"; }}// 目的: 返回Cookiefunction GetCookie(sName) { var arr = document.cookie.match(new RegExp("(^| )"+sName+"=([^;]*)(;|$)")); if(arr !=null){return unescape(arr[2])}; return null; }//加載用戶信息function LoadRememberInfo() { var strName=GetCookie("author"); var strEmail=GetCookie("email"); var strHomePage=GetCookie("url"); var bolRemember=GetCookie("chkRemember"); var a_vlaue= document.getElementById("author"); if (a_vlaue != null){ if(bolRemember=="true"){ //如果勾選了“記住我” //通過(guò)decodeURIComponent對(duì)內(nèi)容解碼 if(strName){document.getElementById("author").value=decodeURIComponent(strName);//從 cookie獲取填寫(xiě)昵稱 }; if(strEmail){document.getElementById("email").value=strEmail;};//從 cookie獲取填寫(xiě)郵箱 //通過(guò)decodeURIComponent對(duì)內(nèi)容解碼 if(strHomePage){document.getElementById("url").value=decodeURIComponent(strHomePage);};//從 cookie獲取填寫(xiě)網(wǎng)址 if(bolRemember){document.getElementById("saveme").checked=bolRemember;}; } if(GetCookie("username")){ document.getElementById("author").value=unescape(GetCookie("username")); } } }//通過(guò)jQuery ready在頁(yè)面加載時(shí)自動(dòng)從cookies中載入已保存的用戶信息jQuery(document).ready(function($){ LoadRememberInfo();//給評(píng)論提交按鈕綁定信息保存函數(shù) $("#respond #submit").click(function(){ SaveRememberInfo(); });//給評(píng)論重置按鈕綁定信息移除函數(shù) $("#respond #reset").click(function(){ RemoveRememberInfo(); });});//保存信息函數(shù)function SaveRememberInfo() { var strName=document.getElementById("author").value; var strEmail=document.getElementById("email").value; var strHomePage=document.getElementById("url").value; var bolRemember=document.getElementById("saveme").checked; //通過(guò)encodeURIComponent對(duì)內(nèi)容進(jìn)行url編碼 SetCookie("author",encodeURIComponent(strName),365); SetCookie("email",strEmail,365); //通過(guò)encodeURIComponent對(duì)內(nèi)容進(jìn)行url編碼 SetCookie("url",encodeURIComponent(strHomePage),365); SetCookie("chkRemember",bolRemember,365); }//移除信息函數(shù)function RemoveRememberInfo() { SetCookie("author",'',365); SetCookie("email",'',365); SetCookie("url",'',365); SetCookie("chkRemember",'false',365);}當(dāng)然上面的代碼還是要根據(jù)你自己主題設(shè)置的標(biāo)簽ID來(lái)更改。新的問(wèn)題但是布置好之后,先森卻遇到了麻煩。cookie可以記錄郵箱和網(wǎng)址的信息,卻死活記錄不了昵稱的信息。在網(wǎng)頁(yè)cookie中看到,author的信息顯示的是undefined(未定義)。昵稱author顯示undefined先森前前后后折騰了幾個(gè)小時(shí),百度各種搜索,甚至還在張戈博客留言問(wèn)張哥。最后還是顯示在凌晨1點(diǎn)多,想要放棄的時(shí)候,發(fā)生了轉(zhuǎn)機(jī)。先森之前測(cè)試cookie的時(shí)候,只填寫(xiě)了昵稱和郵箱,但是昵稱author始終顯示undefined,而網(wǎng)址一欄的cookie顯示的是空值。開(kāi)始先森沒(méi)有在意,后來(lái)一想,如果昵稱是沒(méi)有獲取到值的話,為什么不是和網(wǎng)址一樣,顯示的是空值呢?這樣一想就醒悟了,應(yīng)該是標(biāo)簽的ID存在沖突了。果然,先森發(fā)現(xiàn),文章頁(yè)中,標(biāo)題下的編輯的<span>標(biāo)簽,也用的author標(biāo)簽。標(biāo)簽ID重復(fù)把標(biāo)簽的ID換了,刪除緩存,刷新查看。果然,該緩存的都緩存了。另外,下圖中的comment_author_****的三行代碼,是WordPress比較通用的comments-ajax.php中添加的,其實(shí)使用這種方法之后,這些cookie就可以刪掉了。但是先森覺(jué)得有點(diǎn)麻煩,還沒(méi)鉆研透,也就還沒(méi)刪。等以后鉆研透了再刪除,畢竟cookie信息也會(huì)影響網(wǎng)頁(yè)打開(kāi)速度。cookie測(cè)試成功刪改代碼經(jīng)過(guò)這樣一番整改之后,網(wǎng)站前端在設(shè)計(jì)的時(shí)候,增加的一些判斷管理員登錄的代碼都失效了,所以這類內(nèi)容就可以刪除了。功能-登錄-管理網(wǎng)站先森網(wǎng)站上比較突出的,就是登錄之后的管理按鈕,這些都可以直接刪除了。<?php if ( function_exists('dynamic_sidebar') && dynamic_sidebar() ) : else : ?> <p class="categoryName1"><?php _e('Meta'); ?></p> <img src="<?php bloginfo('template_url'); ?>/images/news_fenge2.jpg" alt="分段圖" title="分段圖"><ul class="categoryName2 login_ul"><?php wp_register(); ?><li><?php wp_loginout(); ?></li><?php wp_meta(); ?></ul> <?php endif; ?>總結(jié)用cookie的方式記錄訪客信息,訪客信息會(huì)放在訪客自己的設(shè)備上,只要訪客自身不禁用cookie,就沒(méi)有什么問(wèn)題。經(jīng)過(guò)本文的設(shè)置之后,gavater頭像就不能實(shí)時(shí)顯示了。當(dāng)然,也有解決辦法,實(shí)時(shí)顯示gavater頭像的教程很多。但先森不滿足,因?yàn)橹跋壬膅avater頭像都緩存到了自身服務(wù)器,先森不想使用多說(shuō)等其他服務(wù)器。先森目前已經(jīng)實(shí)現(xiàn)了實(shí)時(shí)將訪客輸入的郵箱對(duì)應(yīng)的gavater頭像緩存到自身服務(wù)器,并顯示出來(lái),相關(guān)教程如下:用cookie記住用戶信息后ajax實(shí)現(xiàn)實(shí)時(shí)顯示Gravatar頭像并實(shí)時(shí)緩存到本地用cookie記住用戶信息后隱藏信息輸入框,優(yōu)化用戶體驗(yàn)cookie保存信息失敗,要檢查是否是因?yàn)闃?biāo)簽的ID沖突原因。
WordPress技巧通過(guò)研究CDN緩存登錄信息問(wèn)題對(duì)WP Super cache的一些新的領(lǐng)悟
先森之前也發(fā)文提到過(guò),網(wǎng)站已經(jīng)接入百度云加速,開(kāi)啟了全站緩存。先森使用了兩天之后,感覺(jué)很不錯(cuò),就把體驗(yàn)的結(jié)果寫(xiě)了一篇文章發(fā)布了。但是突然又發(fā)現(xiàn),先森終于用到了讓很多站長(zhǎng)頭疼的動(dòng)態(tài)數(shù)據(jù)的問(wèn)題。先森發(fā)現(xiàn),CDN開(kāi)啟網(wǎng)頁(yè)HTML緩存之后,一篇文章在沒(méi)有緩存的情況下,如果第一次訪問(wèn)是先森自己訪問(wèn)的,那CDN緩存的時(shí)候,就會(huì)把先森登錄后顯示的界面緩存下來(lái)。也就是訪客訪問(wèn)的時(shí)候,會(huì)顯示“內(nèi)容管理”、“登出”、評(píng)論框會(huì)顯示先森的頭像,前面兩個(gè)因?yàn)闆](méi)有登錄,所以點(diǎn)擊之后也沒(méi)有用,但是評(píng)論框顯示先森的頭像的時(shí)候,沒(méi)有更改昵稱和郵箱的選項(xiàng),當(dāng)訪客寫(xiě)好評(píng)論提交的時(shí)候會(huì)提示“請(qǐng)輸入昵稱和郵箱”。先森的網(wǎng)站本來(lái)評(píng)論就少,這樣一來(lái)豈不是更收不到評(píng)論了。動(dòng)態(tài)判斷內(nèi)容被緩存為了解決這個(gè)問(wèn)題,暫時(shí)又沒(méi)找到合適的解決方法,只得把CDN的緩存HTML給關(guān)了。在找解決方法的時(shí)候,先森又回頭研究WP Super Cache,這次對(duì)WP Super Cache又有了新的領(lǐng)悟,所以趕緊寫(xiě)篇文章記錄一下。對(duì)WP Super Cache新的領(lǐng)悟1.WP Super Cache有兩種緩存機(jī)制WP Super Cache 設(shè)置->內(nèi)容里面,點(diǎn)擊列出所有已緩存的文件網(wǎng)頁(yè)會(huì)刷新出一個(gè)顯示框,里面有“最新的 WP-Cached 文件”和“最新的 Super Cached 文件”。之前先森以為都是沒(méi)有什么區(qū)別,或者說(shuō)沒(méi)弄明白有什么區(qū)別。WP Super Cache的兩種緩存經(jīng)過(guò)一番研究終于搞明白,WP Super Cache緩存的內(nèi)容有兩種,一種是對(duì)已知用戶的,一種是對(duì)未知用戶的。這兩種緩存文件放置的位置和格式都不相同。其實(shí)這一點(diǎn),先森也發(fā)現(xiàn)WordPress大學(xué)中,倡萌早有提及。倡萌的介紹比先森自己寫(xiě)的更規(guī)范易懂,但先森也發(fā)現(xiàn)有些描述也與現(xiàn)在的插件不吻合了,所以先森自己重新引用整理一下,讓先森自己和更多的人看明白:WP Super Cache 緩存機(jī)制有兩種,WP Cache 和 Super Cache。WP Cache 緩存時(shí),會(huì)在你的“wordpress 安裝文件夾/wp-content/cache/”文件夾下生成一系列wp-cache-xxxxxx.php格式的文件。而且先森發(fā)現(xiàn),每個(gè)不同的已知用戶即使他們?cè)L問(wèn)同一個(gè)頁(yè)面,都為單獨(dú)的為他們緩存一個(gè)新的文件,因?yàn)樗麄兊年欠Q、郵箱、網(wǎng)址是不同的;為已知用戶緩存Super Cache 緩存時(shí),則在你的“wordpress 安裝文件夾/wp-content/cache/supercache/”文件夾下生成對(duì)應(yīng)每一篇文章或者標(biāo)簽等的目錄。名稱為xxx.html,取決于你的文章ID是怎么設(shè)置。目錄下面就是靜態(tài)的 index.html 文件。為未知用戶緩存當(dāng)你一個(gè)訪問(wèn)者來(lái)的你的站點(diǎn),他沒(méi)有登錄或者也沒(méi)有留言,這樣他得到是一個(gè)在 WordPress cache 文件夾下的 supercache 子文件夾下的純靜態(tài)文件,其實(shí)你都可以自己到上面的 supercache 目錄下去查看同樣的永久鏈接的 HTML 文件的備份。如果要判斷一個(gè)頁(yè)面是否已經(jīng)被緩存了,在頁(yè)面中右鍵查看該頁(yè)面的源代碼,最后一行會(huì)有“Cached page generated by WP-Super-Cache+緩存時(shí)間”這行字,就像下面這行代碼一樣:<!-- Dynamic page generated in 0.840 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2016-04-13 17:48:08 -->而如果你開(kāi)啟了壓縮頁(yè)面,緩存會(huì)多一行如下代碼:<!-- Compression = gzip -->判斷網(wǎng)頁(yè)是否被WP Super Cache緩存2.WP Super Cache高級(jí)設(shè)置雜項(xiàng)中的兩個(gè)設(shè)置的作用搞明白了WP Super Cache的兩種緩存機(jī)制之后,加上CDN緩存HTML出現(xiàn)的問(wèn)題,先森又對(duì)WP Super Cache高級(jí)設(shè)置里,雜項(xiàng)的兩個(gè)設(shè)置的作業(yè)有了領(lǐng)悟。兩個(gè)雜項(xiàng)設(shè)置的作用上圖紅框中的兩個(gè)設(shè)置,以前先森不知道這兩個(gè)設(shè)置所對(duì)應(yīng)的情景是怎樣的,現(xiàn)在終于有所感悟了。“不要為已知用戶緩存”的作用。很明顯,開(kāi)啟之后,在“wordpress 安裝文件夾/wp-content/cache/”文件夾下就不會(huì)生成一系列wp-cache-xxxxxx.php格式的文件了。在開(kāi)啟CDN緩存HTML文件后,緩存期內(nèi),誰(shuí)第一個(gè)訪問(wèn)一個(gè)頁(yè)面,后來(lái)者顯示的都是他打開(kāi)后顯示的頁(yè)面。所以即使繼續(xù)為已知用戶緩存,他們也訪問(wèn)不到為他們單獨(dú)緩存的界面。因此,勾選這個(gè)選項(xiàng)就很有必要了。“讓已知用戶匿名使他們?yōu)g覽的內(nèi)容是緩存文件”的作用。上面也說(shuō)了,開(kāi)啟CDN緩存HTML文件后,緩存期內(nèi),誰(shuí)第一個(gè)訪問(wèn)一個(gè)頁(yè)面,后來(lái)者顯示的都是他打開(kāi)后顯示的頁(yè)面。而產(chǎn)生這個(gè)問(wèn)題的原因,就是WordPress會(huì)記住評(píng)論者的信息,這些人就成為了WP Super Cache中的已知用戶,他們?cè)诖蜷_(kāi)文章的時(shí)候,會(huì)自動(dòng)填上昵稱、郵箱等內(nèi)容。而勾選了這個(gè)選項(xiàng)之后,這些已知用戶訪問(wèn)頁(yè)面的時(shí)候,會(huì)強(qiáng)制匿名,讓他們也成為未知用戶。其實(shí)勾選這兩個(gè)設(shè)置之后,基本能解決CDN緩存昵稱、頭像的問(wèn)題,但是這樣也導(dǎo)致了已知用戶們每次訪問(wèn)都會(huì)重新輸入一系列信息,對(duì)用戶體驗(yàn)非常之不好。對(duì)于這一點(diǎn),先森也大致找到了解決方法,等研究好了再分享出來(lái)。2016年4月22日更新針對(duì)CDN緩存問(wèn)題,先森將近期的解決方法更新上來(lái),有興趣的朋友可以去看看:用cookie解決網(wǎng)站開(kāi)啟CDN緩存之后已知用戶頭像昵稱被緩存等系列問(wèn)題用cookie記住用戶信息后隱藏信息輸入框,優(yōu)化用戶體驗(yàn)用cookie記住用戶信息后ajax實(shí)現(xiàn)實(shí)時(shí)顯示Gravatar頭像并實(shí)時(shí)緩存到本地3.緩存的機(jī)制這一點(diǎn)的名字可能很多人會(huì)沒(méi)看懂,其實(shí)先森是自己進(jìn)入了一個(gè)牛角尖,沒(méi)有對(duì)緩存的機(jī)制徹底領(lǐng)悟。先森一直在想,WP Super Cache是怎么做到讓訪客訪問(wèn)的"www.域名.com/*.html"加載的內(nèi)容變成“www.域名.com/wp-content/cache/supercache/*.html”的呢?也就是怎么讓頁(yè)面的內(nèi)容直接訪問(wèn)到緩存的內(nèi)容。開(kāi)始先森在想,是不是301跳轉(zhuǎn)什么的,先森記得有個(gè)什么隱形跳轉(zhuǎn),就是鏈接不變,內(nèi)容變了。后來(lái)先森想明白了,WP Super Cache會(huì)將規(guī)則寫(xiě)入.htaccess中,用這個(gè)規(guī)則進(jìn)行訪問(wèn)緩存文件。可能有人會(huì)對(duì)這第三點(diǎn)感到很不屑,但是先森覺(jué)得自己弄明白了一件事,還是非常高興的。
經(jīng)驗(yàn)雜筆全站CDN緩存加速之接入百度云加速
先森現(xiàn)在待業(yè),時(shí)間比較多,所以折騰網(wǎng)站的時(shí)間就比較多了。成航先森已經(jīng)接入過(guò)騰訊云、VeryCloud兩家的全站CDN了,接入經(jīng)過(guò)也跟大家分享了。而現(xiàn)在,先森又將網(wǎng)站接入到百度云加速了。雖然接入時(shí)間不長(zhǎng),但是先森還是將自己汲取到的經(jīng)驗(yàn)趕緊分享出來(lái),不然自己都忘了就不好了。百度云加速關(guān)于接入騰訊云、VeryCloud的經(jīng)歷,有興趣的童鞋可以去看看:全站CDN緩存加速之接入騰訊云全站CDN緩存加速之接入VeryCloud接入百度云加速先森之前CDN的默認(rèn)解析使用的是VeryCloud,電信線路解析的是騰訊云。使用了一段時(shí)間,先森發(fā)現(xiàn)電信線路下,網(wǎng)站經(jīng)常莫名的打不開(kāi):同一個(gè)WIFI網(wǎng)絡(luò)下,電腦打不開(kāi),手機(jī)卻正常;手機(jī)不能打開(kāi)內(nèi)容頁(yè),電腦卻正常等等各種奇葩問(wèn)題。還有就是聯(lián)通線路下,網(wǎng)頁(yè)再怎么刷新,響應(yīng)頭中還是顯示的MISS,沒(méi)有命中緩存,雖然Linux中通過(guò)命令查看可以HIT,但是先森是強(qiáng)迫癥的嘛,心里總是有個(gè)疙瘩。綜上所述,再加上想鼓搗一下百度云,所以就跟換到百度云加速了。怎樣接入百度云加速,網(wǎng)上的教程一大堆,先森就不再贅述了。WordPress嘛,使用CDN主要的一點(diǎn),就是不能把后臺(tái)也給緩存進(jìn)去了。我們要使用百度云加速的規(guī)則自定義,設(shè)置緩存和不緩存的內(nèi)容。百度云加速免費(fèi)版只能設(shè)置3條規(guī)則,各位小伙伴要根據(jù)實(shí)情設(shè)置。先森要求不高,暫時(shí)3條完全夠用。規(guī)則自定義-百度云加速根據(jù)張戈博客張哥的建議,先森這里只設(shè)置了網(wǎng)站后臺(tái)細(xì)致緩存,其他全緩存(細(xì)致緩存其實(shí)就是只緩存靜態(tài)文件)。百度云加速經(jīng)驗(yàn)歸納1.免費(fèi)版國(guó)內(nèi)線路不包括移動(dòng)百度云加速設(shè)置有免費(fèi)版和專業(yè)版。CDN節(jié)點(diǎn)免費(fèi)版不提供移動(dòng)節(jié)點(diǎn),也就是移動(dòng)網(wǎng)絡(luò)訪問(wèn)你的網(wǎng)站,將會(huì)從電信、聯(lián)通等其他服務(wù)器獲取數(shù)據(jù)。免費(fèi)版與專業(yè)版的區(qū)別-百度云加速對(duì)于這個(gè)問(wèn)題,先森的解決辦法是單獨(dú)設(shè)置移動(dòng)解析線路,解析到騰訊云。要怎么解決這個(gè)問(wèn)題,或者解析到什么CDN服務(wù)商,大家就根據(jù)自己的喜好來(lái)了。2.查看回源與命中緩存先森提交工單問(wèn)客服,百度云加速給網(wǎng)站響應(yīng)頭加入哪些信息,又分別是什么意思,尤其是怎么查看是否命中緩存。其實(shí)先森自己心中已經(jīng)有了猜測(cè),只是想找客服證實(shí)一下。工單客服竟然說(shuō),Request Method(請(qǐng)求的方法)是GET則命中緩存。可愛(ài)的客服還截了本站的圖,將GET部分給我看。最后把這位客服虐了一遍,他讓我第二天上班時(shí)間找QQ在線客服(4008768800)。先森問(wèn)了在線客服,了解到實(shí)際上重點(diǎn)需要關(guān)注的信息有兩個(gè):CF-Cache-Status:HITCF-RAY:291d911c1d5d1cc5-CTUCF-Cache-Status的話,HIT表示命中緩存,MISS表示回源。CF-RAY是查看通過(guò)什么節(jié)點(diǎn)訪問(wèn)的,這里表示的是通過(guò)成都節(jié)點(diǎn)訪問(wèn)的。至于如何來(lái)查看是通過(guò)是什么節(jié)點(diǎn)訪問(wèn),客服說(shuō)有需要可以詢問(wèn)他們,沒(méi)有公開(kāi)的查詢方式。3.雙重設(shè)置百度云加速中,規(guī)則自定義中設(shè)置規(guī)則里的選項(xiàng),在網(wǎng)站通用設(shè)置中也有同樣的選項(xiàng)設(shè)置,如瀏覽器檢查、CC防護(hù)等設(shè)置。優(yōu)先級(jí)是規(guī)則自定義大于通用設(shè)置。4.安全防護(hù)百度云能設(shè)置WAF等安全防護(hù),小站表示會(huì)很放心。重點(diǎn)是這些是免費(fèi)的。需要注意的是,不知道是WAF里的瀏覽器檢查,還是ADS里的CC防護(hù)(或者是規(guī)則自定義里的CC防護(hù)),開(kāi)啟之后(CC防護(hù)設(shè)置為強(qiáng)力防護(hù))會(huì)讓如奇云測(cè)等網(wǎng)站檢測(cè)工具的訪問(wèn)HTTP狀態(tài)返回503。5.七牛訪問(wèn)源站響應(yīng)超時(shí),錯(cuò)誤503不知道是真的只是當(dāng)時(shí)源站響應(yīng)超時(shí)還是百度云加速的問(wèn)題,反正先森網(wǎng)站上新的圖片不能訪問(wèn),單獨(dú)打開(kāi)顯示以下內(nèi)容:{"error":"get from image source failed: E503"}先森的想法是:1.設(shè)置了瀏覽器檢查的原因;2.WAF防護(hù)過(guò)猛,把七牛給防在外面了。先森覺(jué)得瀏覽器檢查平時(shí)沒(méi)什么用,訪客首次打開(kāi)還會(huì)顯示5秒的瀏覽器檢查頁(yè)面,所以就把它關(guān)了。至于WAF防護(hù),WAF可以設(shè)置白名單,先森趕緊發(fā)起七牛工單,將七牛的回源IP段添加到白名單中了。七牛給先森的回復(fù)如下,需要的童鞋也趕緊添加吧:鏡像回源User Agent: qiniu-imgstg-spider-1.0鏡像回源IP段 :183.136.139.0/24當(dāng)然,百度云加速只能添加IP段,用戶代理User Agent加在哪先森就不清楚了。不知道是哪個(gè)設(shè)置生效了,網(wǎng)站上的圖片又能被七牛鏡像緩存了。6.關(guān)閉了瀏覽器檢查,但是訪問(wèn)網(wǎng)站還是經(jīng)常有“瀏覽器檢查中”的界面?瀏覽器檢查,功能很好,對(duì)于明顯不是瀏覽器的訪問(wèn)請(qǐng)求予以拒絕,以防止惡意抓取和垃圾信息。但是先森覺(jué)得對(duì)用戶體驗(yàn)并不好。別人打開(kāi)你的網(wǎng)站找教程,結(jié)果還要等5秒你的網(wǎng)站才開(kāi)始加載,有幾個(gè)會(huì)乖乖的等著的?百度云加速瀏覽器檢查界面有時(shí)我們會(huì)發(fā)現(xiàn),明明在設(shè)置中關(guān)閉了“瀏覽器檢查”,但是打開(kāi)的時(shí)候還是存在這個(gè)界面。第一種可能,上面也說(shuō)過(guò),你僅僅關(guān)閉了通用設(shè)置中的“瀏覽器檢查”,在規(guī)則自定義中還有個(gè)一個(gè)“瀏覽器檢查”的設(shè)置,而且這個(gè)設(shè)置的優(yōu)先級(jí)還高于通用設(shè)置中的。第二種可能,你設(shè)置的CC防護(hù)的等級(jí)是“強(qiáng)力防護(hù)”,這個(gè)在規(guī)則自定義中也有設(shè)置,但是名字是“游覽器檢查”(先森向客服反饋,被證實(shí)為錯(cuò)字。客服已經(jīng)反饋上去了,估計(jì)很快會(huì)修正)。客服告訴先森,設(shè)置CC防護(hù)等級(jí)為“高”,則不會(huì)再檢查瀏覽器了。同時(shí),設(shè)置為“高”的時(shí)候,再開(kāi)啟“瀏覽器檢查”,用戶訪問(wèn)也不會(huì)顯示“瀏覽器安全檢查中...”的字樣。百度云加速CC防護(hù)7.沒(méi)有日志與API接口百度云加速和VeryCloud、騰訊云不同的是,沒(méi)有API,也沒(méi)有日志。8.實(shí)時(shí)同步百度云加速可以打開(kāi)實(shí)時(shí)同步,也就不做任何緩存,直接回源,這一點(diǎn)非常方便。總結(jié)用了兩天的百度與云加速,感覺(jué)還是非常不錯(cuò)的。同一個(gè)頁(yè)面,第一次訪問(wèn)顯示MISS,刷新一下就顯示HIT了,見(jiàn)效特別快,先森覺(jué)得特別痛快。雖說(shuō)WordPress要多折騰,但是也確實(shí)很感謝如VeryCloud、騰訊云、七牛云、百度云加速這些能為我們提供免費(fèi)服務(wù)的CDN服務(wù)商,它們讓我們這些草根站長(zhǎng)能見(jiàn)識(shí)的更多,擁有更多可能,謝謝。
經(jīng)驗(yàn)雜筆VeryCloud、騰訊云CDN使用技巧總結(jié)之一些經(jīng)驗(yàn)
先森用了幾天的VeryCloud、騰訊云兩個(gè)云服務(wù)商的CDN,時(shí)間雖短,卻問(wèn)題不斷。為了不讓自己忘記這些來(lái)之不易的經(jīng)驗(yàn),先森覺(jué)得把它們寫(xiě)出來(lái),記下來(lái)。當(dāng)然能幫上人就更好了。除了本篇文章,先森之前還寫(xiě)了一篇總結(jié),有興趣的也可以去看看:第一篇:VeryCloud、騰訊云CDN使用技巧總結(jié)之查看命中緩存情況下面,先森來(lái)做新一輪的總結(jié)。1.搜索引擎線路解析什么是搜索引擎線路?即專為搜索引擎單獨(dú)設(shè)置的DNS解析線路。為什么要設(shè)置搜索引擎線路?先森主要是在張戈博客接收到了這么一個(gè)理念,搜索引擎蜘蛛也許有一個(gè)DNS的解析緩存,對(duì)你網(wǎng)站解析的IP會(huì)保存一段時(shí)間,這個(gè)時(shí)間大概一兩天。而我們使用的CDN是讓訪客訪問(wèn)就近的服務(wù)器節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都有單獨(dú)的IP,而且這個(gè)IP還不是長(zhǎng)時(shí)間保留的。這就相當(dāng)于我們的網(wǎng)站經(jīng)常更換服務(wù)器,這樣我們自己都會(huì)感覺(jué)不好吧,何況是蜘蛛?同時(shí),我們的網(wǎng)站設(shè)置CDN后,搜索引擎蜘蛛訪問(wèn)的也是節(jié)點(diǎn)IP,而一旦蜘蛛對(duì)這個(gè)IP進(jìn)行緩存,緩存時(shí)間大于CDN的IP存在時(shí)間的時(shí)候,蜘蛛就訪問(wèn)不了這個(gè)IP了。那么蜘蛛就會(huì)判定我們的網(wǎng)站存在問(wèn)題,最終導(dǎo)致SEO受到傷害。大概就是這么一個(gè)觀點(diǎn),詳細(xì)的內(nèi)容還請(qǐng)大家去看看張戈博客的原文:淺析網(wǎng)站更換ip或使用CDN會(huì)不會(huì)影響SEO排名而解決或者說(shuō)不產(chǎn)生上面的問(wèn)題的方法,就是設(shè)置搜索引擎線路。雖然張戈已經(jīng)說(shuō)得很清楚了,如何設(shè)置搜索引擎線路,但還是有很多站長(zhǎng)在問(wèn)設(shè)置問(wèn)題。包括先森自己,也是研究了一下,才想明白該如何設(shè)置。首先,奉勸和我之前一樣,一直使用萬(wàn)網(wǎng)域名解析的,趕緊換換吧。下面再次簡(jiǎn)單講講先森的經(jīng)歷。萬(wàn)網(wǎng)解析只支持百度、谷歌、必應(yīng)三家的搜索引擎線路,重點(diǎn)是解析的還不準(zhǔn)確。不,是非常不準(zhǔn)確。先森用百度抓取診斷,該抓取CDN節(jié)點(diǎn)IP的還是抓取,設(shè)置和沒(méi)設(shè)置完全沒(méi)有什么兩樣。萬(wàn)網(wǎng)設(shè)置搜索引擎線路后的百度抓取診斷百度抓取的IP實(shí)為騰訊云的CDN節(jié)點(diǎn)IP問(wèn)張戈博客的張哥,張哥給我兩個(gè)解決辦法,一是換DNSPod解析,二是使用百度云加速,因?yàn)樵萍铀儆凶詣?dòng)的搜索引擎回源。先森因?yàn)椴砰_(kāi)始使用VeryCloud不久,還想再研究研究,就選擇了使用DNSPod的方法。關(guān)于如何將域名解析從萬(wàn)網(wǎng)轉(zhuǎn)移到DNSPod,先森也分享過(guò)方法,因?yàn)镈NSPod的方法有點(diǎn)老舊了:將萬(wàn)網(wǎng)/阿里云域名DNS地址修改到DNSPod如何設(shè)置搜索引擎線路?首先新增一個(gè)解析記錄,然后開(kāi)始設(shè)置。主機(jī)記錄:根據(jù)需求,如果直接解析域名,填“@”;域名、二級(jí)域名都要解析,填“*”;只解析一個(gè)二級(jí)域名,填二級(jí)域名的值,如“www”。先森就只解析www的。記錄類型:選擇A記錄。線路類型:DNSPod支持百度、谷歌、必應(yīng)、搜搜、搜狗、奇虎,和相當(dāng)于默認(rèn)搜索引擎線路的“搜索引擎”。先森是每個(gè)搜索引擎線路都單獨(dú)設(shè)置了一條A記錄。記錄值:這里就設(shè)置自己源站服務(wù)器IP,即真實(shí)IP,要小心,不要泄露。其他各項(xiàng)就根據(jù)自己的需求設(shè)置了。下面貼出先森的設(shè)置情況:DNSPod搜索引擎線路設(shè)置設(shè)置之后,先森立馬到百度站長(zhǎng)工具去抓取診斷,秒秒鐘虐了萬(wàn)網(wǎng):抓取IP為源站IP2.詳讀“常見(jiàn)問(wèn)題”這一點(diǎn),就是讓大家去仔仔細(xì)細(xì)的將VeryCloud、騰訊云的“常見(jiàn)問(wèn)題”看完,這樣能使我們少走很多彎路。這也是先森在問(wèn)了售后很多問(wèn)題之后發(fā)現(xiàn)的,有很多問(wèn)題,都已經(jīng)寫(xiě)入“常見(jiàn)問(wèn)題”中了,相信售后的心是崩潰的。其實(shí)說(shuō)到底,就是多讀、多看、多想。兩個(gè)CDN服務(wù)商都有常見(jiàn)問(wèn)題頁(yè)面,但是先森覺(jué)得VeryCloud的常見(jiàn)問(wèn)題比較偏原理解釋,重點(diǎn)介紹了什么是CDN、CDN如何工作、CDN的優(yōu)勢(shì)、什么是緩存命中率等等:VeryCloud常見(jiàn)問(wèn)題其實(shí)VeryCloud的話,大家更應(yīng)該點(diǎn)擊上圖紅框中的云分發(fā),看更多更有針對(duì)性的解決問(wèn)題方法。單頁(yè)不能忽視這一頁(yè)15個(gè)常見(jiàn)問(wèn)題的作用,這些基礎(chǔ)知識(shí)能讓我們對(duì)CDN更加了解。更多詳情就希望大家自己查看了:VeryCloud云分發(fā)-使用幫助VeryCloud常見(jiàn)問(wèn)題而騰訊云的常見(jiàn)問(wèn)題頁(yè)面,則做的更加細(xì)致,問(wèn)題更加全面,也有著很好的針對(duì)性。騰訊云對(duì)自家服務(wù)進(jìn)行了介紹,其中有優(yōu)勢(shì),有原理,有功能。從基礎(chǔ)介紹,接入相關(guān),日常使用,問(wèn)題排查四個(gè)方面回答問(wèn)題,顯得簡(jiǎn)單明了。其中就有如何判斷用戶訪問(wèn)是否命中CDN cache、接入cdn之后網(wǎng)站打不開(kāi),如何排查、命中率低是什么原因呢等經(jīng)典問(wèn)題,這些問(wèn)題有很多都是現(xiàn)在自己搞了很久才弄明白的,沒(méi)想到這里就很清楚的寫(xiě)著:騰訊云常見(jiàn)問(wèn)題在這里,先森也把騰訊云的相關(guān)鏈接貼出來(lái),騰訊云還有一個(gè)內(nèi)容分發(fā)網(wǎng)絡(luò)的幫助文檔,文檔中包含以上內(nèi)容,查看卻沒(méi)有以上內(nèi)容方便,但先森還是一并貼出來(lái):騰訊云CDN常見(jiàn)問(wèn)題騰訊云內(nèi)容分發(fā)網(wǎng)絡(luò)常見(jiàn)問(wèn)題騰訊云內(nèi)容分發(fā)網(wǎng)絡(luò)CDN論壇騰訊云還介紹了一個(gè)可以管理查看CDN中緩存文件軟件SVN的使用方法,但是騰訊云卻沒(méi)有使用SVN源了,讓我們使用他們的對(duì)象儲(chǔ)存業(yè)務(wù)COS。3.查看日志不管是VeryCloud還是騰訊云,都支持查看日志。但是他們的日志下載之后,打開(kāi)顯得非常凌亂,雖然很詳細(xì),但遠(yuǎn)不如直接在網(wǎng)站上查看統(tǒng)計(jì)分析來(lái)的簡(jiǎn)單明了。主要還是,關(guān)于CDN日志,他們都沒(méi)有提供什么統(tǒng)計(jì)分析軟件。不過(guò)先森覺(jué)得,查看日志主要也是排查問(wèn)題的,很具有針對(duì)性。簡(jiǎn)單的來(lái)說(shuō),騰訊云統(tǒng)計(jì)里可以看到訪問(wèn)返回碼,我們可以看到產(chǎn)生了多少次的404,但是看不到是哪些頁(yè)面出現(xiàn)了404,這時(shí)候就需要查看日志了。先森問(wèn)了騰訊云的售后,售后推薦使用notepad++,sublime兩款軟件。日志的內(nèi)容顯得很亂,但都是每行一條,每條里面有很多數(shù)據(jù),這些數(shù)據(jù)是按照順序來(lái)的。VeryCloud日志:例:12.243.121.90 - - [24/Mar/2015:12:42:18 +0800] "GET http://www.verycloud.cn/usr/uploads/201503/20150302100356_29670.flv HTTP/1.1" 200 1933334 "http://portal.verycloud.cn/galileo/20150306/8ad1637dbf7cd191f1fe728fc18658d9.swf" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" TCP_MEM_HIT 0.947 58.22.102.229字段參數(shù)客戶端真實(shí)ip12.243.121.90請(qǐng)求時(shí)間24/Mar/2015:12:42:18方法GETURLhttp://www.verycloud.cn/usr/uploads/201503/20150302100356_29670.flvhttpversionHTTP/1.1狀態(tài)碼200請(qǐng)求字節(jié)1933334Refererhttp://portal.verycloud.cn/galileo/20150306/8ad1637dbf7cd191f1fe728fc18658d9.swfUAMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36結(jié)果TCP_MEM_HIT處理請(qǐng)求時(shí)間0.947節(jié)點(diǎn)IP58.22.102.229騰訊云日志:拿先森自己網(wǎng)站的日志中的一行作為例子:20160407104007 180.97.171.210 www.cnidcc.cn /qzcdnhcjszjrtxy.html 12276 120 2 200 NULL 1 "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"字段參數(shù)請(qǐng)求時(shí)間20160407104007訪問(wèn)域名的客戶端IP180.97.171.210被訪問(wèn)域名www.cnidcc.cn文件請(qǐng)求路徑/qzcdnhcjszjrtxy.html本次訪問(wèn)字節(jié)數(shù)大小12276省份120運(yùn)營(yíng)商2http返回碼200referer信息NULLrequest-time(毫秒)1User-Agent"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"關(guān)于省份和運(yùn)營(yíng)商代碼所代表的含義,還需要我們?nèi)ゲ榭打v訊云的映射表查看地域及運(yùn)營(yíng)商編碼映射表注:Referer信息,保存的是訪問(wèn)該網(wǎng)頁(yè)是從哪個(gè)頁(yè)面鏈接過(guò)來(lái)的,我們統(tǒng)計(jì)搜索引擎跳轉(zhuǎn),就是用的這個(gè)信息。4.文件刷新使用CDN有一個(gè)很大的問(wèn)題,就是動(dòng)態(tài)數(shù)據(jù)的顯示問(wèn)題。最容易涉及到的,就是文章的訪問(wèn)量,以及最新評(píng)論的問(wèn)題。關(guān)于訪問(wèn)量,無(wú)傷大雅,只要設(shè)置緩存策略的時(shí)候緩存時(shí)間設(shè)短一些就還好。至于文章的最新評(píng)論,就有點(diǎn)不好了。別人在你的網(wǎng)站上留了言,明明通過(guò)審核了,卻還是顯示之前的頁(yè)面,最新的評(píng)論就沒(méi)有顯示出來(lái)。這時(shí)候我們?cè)偃ナ謩?dòng)的刷新緩存的話,就會(huì)比較麻煩。所以,我們就需要用到刷新緩存的API了。我們使用API,實(shí)現(xiàn)當(dāng)頁(yè)面增加了評(píng)論的時(shí)候,刷新該頁(yè)面。具體的使用方法是將一些代碼放入WordPress主題functions.php文件中即可,代碼是張戈博客提供的,需要的小伙伴可以去看看:VeryCloud:WordPress發(fā)布/更新文章、提交/審核評(píng)論自動(dòng)清理VeryCloud緩存騰訊云:WordPress發(fā)布/更新文章、提交/審核評(píng)論自動(dòng)清理騰訊云CDN緩存另外,VeryCloud的API,是不對(duì)外開(kāi)放的,向售后工程師申請(qǐng)的時(shí)候,也要保證自己網(wǎng)站帶寬夠大,才能申請(qǐng)成功。售后工程師給先森的回復(fù)是要達(dá)到20M的帶寬,這對(duì)張戈博客當(dāng)然不成問(wèn)題,但是對(duì)我們這些小站來(lái)說(shuō),差的太遠(yuǎn)。雖然有小伙伴在先森交《全站CDN緩存加速之接入VeryCloud》一文中回復(fù)說(shuō),VeryCloud開(kāi)放了API接口,但先森查看之后發(fā)現(xiàn),實(shí)際還是需要讓你想客服索要API。總結(jié)回顧一下,本文主要介紹了如何設(shè)置搜索引擎解析線路,通過(guò)詳讀“常見(jiàn)問(wèn)題”來(lái)少走彎路,如何查看VeryCloud的日志,日志內(nèi)容的參數(shù)含義,以及如何用API接口來(lái)實(shí)現(xiàn)刷新緩存。現(xiàn)在就總結(jié)這些,如果以后還有什么好的經(jīng)驗(yàn),先森還會(huì)默默的更新的。
經(jīng)驗(yàn)雜筆VeryCloud、騰訊云CDN使用技巧總結(jié)之查看命中緩存情況
先森用了幾天的VeryCloud、騰訊云兩個(gè)云服務(wù)商的CDN,時(shí)間雖短,卻問(wèn)題不斷。發(fā)現(xiàn)問(wèn)題→解決問(wèn)題是使人進(jìn)步的途徑。這來(lái)來(lái)回回的問(wèn)題,雖然讓先森愁白了頭,也讓先森get到了很多技能。此文的作用,是為了不讓自己忘記這些來(lái)之不易的經(jīng)驗(yàn),如果能幫到人,那就更好了。1.騰訊云關(guān)于騰訊云的命中緩存,先森一開(kāi)始用騰訊云CDN就發(fā)起工單問(wèn)了售后。估計(jì)先森遇到了一個(gè)騰訊云的雛,直接回復(fù)先森的沒(méi)有通過(guò)響應(yīng)頭查看命中緩存的方式。先森也是醉了,他讓先森看前后對(duì)比,后面讓先森檢驗(yàn)MD5:騰訊云雛鳥(niǎo)后來(lái)先森通過(guò)實(shí)際使用,終于發(fā)現(xiàn)了正確的使用方法,并且又發(fā)起工單證實(shí)了。以下是一位騰訊云老鳥(niǎo)的回復(fù):“您好:如何判斷用戶訪問(wèn)是否命中CDN cache查看訪問(wèn)回包頭部的X-Cache-Lookup信息X-Cache-Lookup:Hit From MemCache 表示命中CDN節(jié)點(diǎn)的內(nèi)存X-Cache-Lookup:Hit From Disktank 表示命中CDN節(jié)點(diǎn)的磁盤(pán)X-Cache-Lookup:Hit From Upstream 表示沒(méi)有命中CDN”簡(jiǎn)單明了爽快。先森用的聯(lián)通,只有電信線路解析的是騰訊云。通過(guò)360的奇云測(cè),先森發(fā)現(xiàn)電信線路大部分都有命中緩存。騰訊云CDN命中緩存2.VeryCloudVeryCloud是否命中緩存的查看方法,其實(shí)先森已經(jīng)在網(wǎng)站接入VeryCloud一文中已經(jīng)介紹過(guò)了,但是這里為了做一個(gè)歸納,且先森發(fā)現(xiàn)了新的方法,所以再次貼出。首先,查看是否緩存命中的方法還是看響應(yīng)頭,有一項(xiàng)很顯眼的Powered-By-VeryCDN,HIT表示命中緩存,MISS表示回源,沒(méi)有命中緩存:VeryCloud命中緩存其實(shí)讓先森很不開(kāi)心的,就是用奇云測(cè)還能看到一些HIT命中緩存的情況,先森本地嘗試則重來(lái)沒(méi)有命中過(guò)緩存,為這事先森找了幾次客服。今天先森遇到了認(rèn)識(shí)的第四個(gè)VeryCloud售后工程師,他告訴先森,是因?yàn)槊看嗡⑿略L問(wèn)的CDN節(jié)點(diǎn)不同導(dǎo)致的。我們知道,CDN是在網(wǎng)頁(yè)第一次被訪問(wèn)的時(shí)候緩存,第二次訪問(wèn)的時(shí)候訪問(wèn)緩存。而每次訪問(wèn)的節(jié)點(diǎn)不同,就導(dǎo)致不停的在為不同的DN節(jié)點(diǎn)緩存,而沒(méi)有命中緩存。并且這位工程師教了先森一項(xiàng)更準(zhǔn)確的檢查方式。先森查看響應(yīng)頭用的是瀏覽器的方式,這位工程師教的則是Linux命令查詢了。幸好先森虛擬機(jī)里裝了Linux,雖然是圖形界面的,但是也能用。當(dāng)然,我們要讓Linux聯(lián)網(wǎng),怎么聯(lián)網(wǎng)先森就不贅述了。使用的是wget命令,熟悉Linux的童鞋應(yīng)該會(huì)常用到。這里主要是介紹給和先森一樣沒(méi)怎么接觸過(guò)Linux的站長(zhǎng),反正先森是感到很驚奇啦。進(jìn)入Linux,右鍵“在終端打開(kāi)”,進(jìn)入類似windows中cmd的界面。代碼有以下兩種:wget -SO /dev/null urlwget -SO /dev/null url -ehttp_proxy=ip其中,將url改成你想要測(cè)試的鏈接,ip改為你想要測(cè)試的CDN節(jié)點(diǎn)IP。下面是先森用Linux的測(cè)試情況:wget -SO /dev/null urlwget -SO /dev/null url -ehttp_proxy=ip總結(jié)這樣能滿足我們對(duì)緩存設(shè)置情況進(jìn)行檢查,但是要使每個(gè)CDN節(jié)點(diǎn)都能命中緩存,要不就內(nèi)容預(yù)取,要不就只有增加自己網(wǎng)站的訪問(wèn)量了。因?yàn)镃DN畢竟是訪客第一次訪問(wèn)的時(shí)候直接回源并開(kāi)始緩存,第二次訪問(wèn)的時(shí)候命中緩存。訪問(wèn)量要是多的話,當(dāng)然就更容易命中緩存了。

川公網(wǎng)安備 51011202000104號(hào)