Add Me!Close Menu Navigation
Add Me!Open Categories Menu

ばいお軽量化

ばいお軽量化

ばいおブログが激重だと評判が悪かったので、簡単なPHPスクリプトを作ってみた。index.php?entry=318のように、エントリナンバーを後ろに付けると特定の記事を読める。

やるべきことは次の通り。

URLからの引数を得る

entry=318のような書き方をしたとき、そのパラメータを取得する。これは

if(isset($_GET['entry']))
{
	$entry = $_GET['entry'];
}

のようにGET[]の連想配列で取得できるようだ。

HTTP GETする

これはその辺にサンプルコードが転がっているので、それを拝借する。

正規表現でiframeを除去する

これが今回の主目的。ばいおブログが重いのは、iframe(インラインフレーム:Webページの中に別のWebページを表示する)が多用されていて、それが自己参照だったり、自分の他のブログを参照していたりする。

ほとんどのブラウザでiframe内のiframeは無視されるようになっているが、理屈上は

  1. ばいおブログを開く
  2. iframeで3つのばいおブログを開く
  3. 3つのばいおブログの中のiframeがまたばいおブログを開く

とねずみ算式に読むファイルが増えて、ブラウザが重くなる。ブラクラの一種と言えるが、前述のように無限ループにはならないので、重くなる程度で済む。

これが重い原因であるので、HTTP GETしてHTMLだけ読んで、その中からiframeを除去してWebブラウザに渡せば軽いブログになる。

リンクを書き換える

こうしてiframeを除去したページも、ブログ内リンクをクリックすると次からは本家にアクセスしてしまい重くなるので、ブログ内リンクは「ばいお軽量化」へのリンクに書き換える。

軽くなったのか?

ばいおもiframeを減らしてだいぶ軽くなったようだが、以前は読み終わるまで数分かかる激重サイトだった。それを「ばいお軽量化」を使ってアクセスすると、おいらの環境で5秒以内には読み終わるようになった。劇的な高速化が図れたことになる。

そもそもHTMLを読むだけなら200msくらいしか時間を使わない。ほとんどの時間はHTMLのレンダリングとかJavaScriptの処理に食われる。画像とか読むものがあれば追加で読む。

この「ばいお軽量化」では、まず「ばいお軽量化」にアクセスし「ばいお軽量化」がばいおブログのHTMLだけ取得する。ここで余分に200msくらい時間を使うが、その後の軽量化が大きく全体としてだいぶ高速化する。

PHPソース

<?php
function http_get($url)
{
	$h=fopen($url,'r');
	$meta_data=stream_get_meta_data($h); // both PHP4, PHP5 OK
	$headers=$meta_data['wrapper_data'];
	$result['content']=stream_get_contents($h); // only PHP5, you need write the function for PHP4
	fclose($h);

	if( preg_match('/^HTTP\/([0-9]\.[0-9]) ([0-9]+)/',$headers[0],$matches) ){
		$result['response']=$matches[2];
	}

	return $result;
}
?>

<?php

	$baioblog = "http://baiodao.blog86.fc2.com/";

	if(isset($_GET['entry']))
	{
		$entry = $_GET['entry'];
		$baioblog .= "blog-entry-" . $entry . ".html";
	}

	$response = http_get($baioblog);
	$html = preg_replace('//', '', $response['content']);	

	$pattern = '/http:\/\/baiodao.*?blog-entry-(\d*?)\.html/';
	$replace = 'http://www.onaneet.org/baio/index.php?entry='.'${1}';
	$html = preg_replace( $pattern, $replace, $html);

	echo($html);

?>

もう少しずる賢く行う

PHPを使ってもう少しずる賢くiframeを貼る方法:

<?php
	$path = “ログを置く場所”;
	$now = getdate();
	$hour = $now[hours];

	// IPアドレスを得る
	$ip = getenv(“REMOTE_ADDR”);

	// ログをまだ作っていない状態回避
	$log = fopen($path, “a”);
	fclose($log);

	// ログファイルが見つかったとき
	if( file_exists($path) == true )
	{
		// フラグがFALSEの場合は初めてのIPアドレス
		$flag = FALSE;

		// ログを開いて、ログにIPアドレスが記録されているかチェック
		$log = fopen($path, “r”);
		while( ! feof( $log ) )
		{
			$line = trim(fgets( $log ));
			if( strcmp($ip,$line) == 0 )
			{
				$flag = TRUE;
				break;
			}
		}
		fclose($log);

		// IPアドレスがログにない(最初の訪問の)場合)
		if( $flag != TRUE )
		{
			$log = fopen($path, “at”);
			fputs( $log, $ip.”\n” );
			fclose($log);
			echo ‘<iframe src=”アクセスしたいサイト“ width=”0” height=”0”>’;
		}
	}
?>

このように、初回だけPHPでiframeを貼れば迷惑する度合いは減るはず。どうせ同じIPから何度もアクセスしてもカウントされないだろうから。で、夜中の12時にログをcronで削除してやればOK。

さらに上手にやるとしたら、初回はWebページを表示しないでiframeだけ表示して、JavaScriptですぐにリロードをかけてしまう方法が考えられる。すると、最初のアクセスではカウンタだけ回してリロードして二回目以降はiframeしない。

PHPのコードはHTMLには現れないのでユーザからは見えないが、初回にソースを見られるとPHPが出力したiframeが見えてしまう。なので、JavaScriptがそもそもオフのときはコードを実行しないとかすればステルス性は相当高くなるかな。

「週4時間」だけ働く。

  • 著者/訳者:ティモシー・フェリス
  • 出版社:青志社( 2011-02-03 )
  • 単行本:640 ページ
  • ISBN-10 : 4905042097
  • ISBN-13 : 9784905042099
  • 定価:¥ 1,995

プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~

  • 著者/訳者:秋葉拓哉 岩田陽一 北川宜稔
  • 出版社:マイナビ( 2012-01-28 )
  • 単行本(ソフトカバー):368 ページ
  • ISBN-10 : 4839941068
  • ISBN-13 : 9784839941062
  • 定価:¥ 3,444
Posted By onaneetX.Q

Leave a Reply




最近の投稿

最近のコメント

ブログロール

連絡先


mixi : http://mixi.jp/show_profile.pl?id=21508488
twitter : http://twitter.com/honour_neat

Twitter: honour_neat

  • http://t.co/Zw3YJN0D 「死期が迫った金持ちなら、自分を2chで誹謗中傷した人間を全員殺してから死のうと思っても何ら不思議ではないわけだ。そこまでDQNな金持ちが歴史上いなかったというだけ」金持ちならDQNであるとバレないようにやるだろう。 ReplyRetweetFavorite
  • 何度も言うが、友愛とか民主とか尊師というのは本来は悪い意味じゃないのに今では胡散臭い言葉になってしまった気がする。@SHINOYAMA_Hanta ReplyRetweetFavorite
  • 『鳩山由紀夫元首相が活動名を「友紀夫」に変更 「友愛」の一字を取って』http://t.co/O9ayJfiZ 「友愛精神が十分に伝わっていない」散々友愛しておいてこれ以上まだ友愛しようというのか。 ReplyRetweetFavorite
  • 『トルコ旅行いってきたから写真うpする』http://t.co/qmhlktsq うp主はおいらではない。猫天国。 ReplyRetweetFavorite
  • ふと前にiPodを台湾で買ったときのことを思いだして配達記録を見てみた。Pudong International Airportって何処だよと思ったら上海浦東国際空港のことか。ということは中国から来るのだな。日本にも届けてくれないかなあ。貨品運送僅限台灣地區かorz ReplyRetweetFavorite
  • NZに行った時の写真をあげてく⇒ http://t.co/eTvee7Kj ReplyRetweetFavorite
  • 『iBooks Author が規約改訂、iBooks 形式以外は iBookstore 以外でも販売可能に』http://t.co/cXWbq6xq 意外と早かったけど結局こうなったか。 ReplyRetweetFavorite
  • http://t.co/PWCDysss 「ソニーで働く人達は、新卒入社の段階では日本で最も優秀なエンジニアの卵だったはずです。その人達が一生懸命働いて8年間、一円の価値も生んでいないなんてびっくりです」ちきりんは給与が費用であることを理解していないのだろうか。 ReplyRetweetFavorite
  • 『【矢板明夫の中国ネットウオッチ】コント盗作疑惑に「漢字を盗んだ日本人のアイデア使っても大丈夫」 http://t.co/Yc4x84cs』別に盗んだものではない。誰かから教わることが盗むのだとしたら現代中国人は全員漢字を盗んでいる。 ReplyRetweetFavorite
  • RT : 【よくわかる2010年代】70代「ワシらはようやったよ...」60代「最近の若者は...」50代「老後どうしよ年金貰えるかな...」40代「家のローンが...」30代「結婚...」20代「就活ェ...転職ェ...」10代「ドッドッドリランド! ... ReplyRetweetFavorite