** Caution!! For non-Japanese speaking people **
original page is written in Japanese only.
If you view this page via a translation site, you may not be able to accurately convey the nuances we intend.
■HTMLの編集アプリとして SeaMonkey を使ってますが・・・
自分しか使わないので、装飾機能等は極力省いた状態のものを1~10までPerlで書いて使用しています。必要十分
固定コンテンツ類に関しては市販アプリは一切使用しておらずフリーソフトだけで
完結させています。 テキストエディタでHTMLを入力するのはとても面倒なので
perlプログラム周りは Terapad, HTMLは SeaMonkey,で編集しています
なお画像加工は Windowsの標準アプリのペイント+jTrimの組み合わせです。
PerlでHTMLパーツを読み込み⇒HTMLを合成/引き渡し。
基本的には問題なく動いているんですけど SeaMonkeyが勝手に再編集する
HTMLコードに気に食わないところがあり、自作CMS側で吸収変換してます。
*横幅 80バイトあたりで改行制限とか、変なタグ挿入とか・・
SeaMonkeyで生成したHTMLファイルを都度アップロードする前にTerapadで開き直して手動再編集するのは
タダの無駄作業なので、自前で制作したCMS内のperlプログラム中で自動的に潰す用にしました。以下部分ソース。
│ $bufferio = "";
│
│ if(open(IN1,"< $inportfile")) {
│ #== 先に全ファイルをメモリへ読み込んでおいて閉める ==
│ while(<IN1>){ $bufferio = $bufferio."".$_; }
│ close(IN1);
│
│ #== SeaMonkeyの勝手な空白挿入とタグ内改行を強制修正 ==
│ $bufferio =~ s/ //g; #半角スペースが重なってるのを削除。
│ $bufferio =~ s/> </></g; #タグの間の半角スペースを削除
│ $bufferio =~ s/\"\n/\" /g; #"のあとに勝手に改行を足すのを削除
│ $bufferio =~ s/<img\n/<img/g; # タグ閉まる前に改行が入るのを削除
│ $bufferio =~ s/<a\n/<a/g; #タグ閉まる前に改行が入るのを削除
│ $bufferio =~ s/<font\n/<font/g; # タグ閉まる前に改行が入るのを削除
│ $bufferio =~s/<br><\/h2>/<\/h2>/g; #HTML上不要な<BR>削除
│ $bufferio =~s/<br><\/td>/<\/td>/g; #HTML上不要な<BR>削除
│ $bufferio =~s/<\/table>/<\/table>\n/g;
│ $bufferio =~ s/ moz-do-not-send=\"true\"//g;
│ $bufferio =~ s/\<img/\<imgloading=\"lazy\"/g;
│ $bufferio =~ s/\n//g;
│ $bufferio =~ s/\r//g;
│ $bufferio =~ s/\<tbody\>//g;
│ $bufferio =~ s/<\/tbody>//g;
│ $bufferio =~ s/\/h2>/\/h2>\n/g;
│ $bufferio =~ s/br\>/br\>\n/g;
│
│ if(open(IN1,"< $inportfile")) {
│ #== 先に全ファイルをメモリへ読み込んでおいて閉める ==
│ while(<IN1>){ $bufferio = $bufferio."".$_; }
│ close(IN1);
│
│ #== SeaMonkeyの勝手な空白挿入とタグ内改行を強制修正 ==
│ $bufferio =~ s/ //g; #半角スペースが重なってるのを削除。
│ $bufferio =~ s/> </></g; #タグの間の半角スペースを削除
│ $bufferio =~ s/\"\n/\" /g; #"のあとに勝手に改行を足すのを削除
│ $bufferio =~ s/<img\n/<img/g; # タグ閉まる前に改行が入るのを削除
│ $bufferio =~ s/<a\n/<a/g; #タグ閉まる前に改行が入るのを削除
│ $bufferio =~ s/<font\n/<font/g; # タグ閉まる前に改行が入るのを削除
│ $bufferio =~s/<br><\/h2>/<\/h2>/g; #HTML上不要な<BR>削除
│ $bufferio =~s/<br><\/td>/<\/td>/g; #HTML上不要な<BR>削除
│ $bufferio =~s/<\/table>/<\/table>\n/g;
│ $bufferio =~ s/ moz-do-not-send=\"true\"//g;
│ $bufferio =~ s/\<img/\<imgloading=\"lazy\"/g;
│ $bufferio =~ s/\n//g;
│ $bufferio =~ s/\r//g;
│ $bufferio =~ s/\<tbody\>//g;
│ $bufferio =~ s/<\/tbody>//g;
│ $bufferio =~ s/\/h2>/\/h2>\n/g;
│ $bufferio =~ s/br\>/br\>\n/g;
だけど、このHTML変換&成形作業って奴は・・・ブラウザから要求されて開かれるたびに
こんなことしてるとサーバ負荷をかけ反応が遅くなるだけなので、キャッシュ化処理を入れる。
キャッシュ錬成形式/次回自動先読みにして、perl負荷をかけないよう軽量化処理をする。
キャッシュを読む ⇒ タイムスタンプ一致するか見る ⇒ 一致すればそのままキャッシュ表示
⇒ 一致しなければキャッシュ廃棄して新しく ソースHTML読んで再変換 ⇒ キャッシュ保存
(固定系コンテンツはキャッシュヒット率がほぼ100%なので劇的に改善される率がデカい)
│ my $datas_filename = $_[0];
│ my $cache_filename ="cache.".$query_viewtype."/".$datas_filename;
│
│ # 引数不正ファイルの場合は何もせずリターン
│ if (open(DB,"$datas_filename")){
│ #==変換後のHTMLキャッシュファイルを読み出す/なきゃ空を作成 ==。
│ if(open(IN2,"< $cache_filename")) {
│ while(<IN2>){$DATA[$counter ++] = $_; }
│ close(IN2);
│ } else {
│ open(OUT, ">$cache_filename");
│ print OUT "";
│ close(OUT);
│ }
│ }else{ return; }
│
│ #キャッシュと原稿のタイムスタンプ取得
│ @filestat = stat $cache_filename;
│ $atime_c = $filestat[8];
│ $mtime_c = $filestat[9];
│ @filestat = stat $datas_filename;
│ $atime_m = $filestat[8];
│ $mtime_m = $filestat[9];
│
│ # Master と Cache と同じ更新日ならキャッシュファイルを適用。
│ # 差異があればキャッシュ廃棄して原稿からキャッシュを作り直す。
│ if ($mtime_m ne $mtime_c ){
│ $counter = 0;
│
│ $DATA[$counter ++] = "~~書き出す内容~~";
│
│ #完成後のHTMLファイルをキャッシュ用データとして一括保存
│ if(open(OUT, "+<$cache_filename")){ # 読み書きモードで開く
│ flock(OUT,2); # ロック確認。ロック
│ seek(OUT, 0,0); # ファイルポインタを先頭にセット
│ for( $vx = 0; $vx <$counter; $vx ++){ print OUT "$DATA[$vx]";}
│ truncate(OUT,tell(OUT)); # ファイルサイズを書き込んだサイズにする
│ close(OUT); # closeすれば自動でロック解除
│ }
│ #キャッシュ保存後、データの日付をそろえる
│ utime ( $mtime_m, $mtime_m,$cache_filename);
│ }
│ for( $vx = 0; $vx < $counter; $vx ++){ print"$DATA[$vx]"; }
│}
この手の技術は、枯れたテクニックなのですが、今どきの人は全てライブラリ任せなので、│ my $cache_filename ="cache.".$query_viewtype."/".$datas_filename;
│
│ # 引数不正ファイルの場合は何もせずリターン
│ if (open(DB,"$datas_filename")){
│ #==変換後のHTMLキャッシュファイルを読み出す/なきゃ空を作成 ==。
│ if(open(IN2,"< $cache_filename")) {
│ while(<IN2>){$DATA[$counter ++] = $_; }
│ close(IN2);
│ } else {
│ open(OUT, ">$cache_filename");
│ print OUT "";
│ close(OUT);
│ }
│ }else{ return; }
│
│ #キャッシュと原稿のタイムスタンプ取得
│ @filestat = stat $cache_filename;
│ $atime_c = $filestat[8];
│ $mtime_c = $filestat[9];
│ @filestat = stat $datas_filename;
│ $atime_m = $filestat[8];
│ $mtime_m = $filestat[9];
│
│ # Master と Cache と同じ更新日ならキャッシュファイルを適用。
│ # 差異があればキャッシュ廃棄して原稿からキャッシュを作り直す。
│ if ($mtime_m ne $mtime_c ){
│ $counter = 0;
│
│ $DATA[$counter ++] = "~~書き出す内容~~";
│
│ #完成後のHTMLファイルをキャッシュ用データとして一括保存
│ if(open(OUT, "+<$cache_filename")){ # 読み書きモードで開く
│ flock(OUT,2); # ロック確認。ロック
│ seek(OUT, 0,0); # ファイルポインタを先頭にセット
│ for( $vx = 0; $vx <$counter; $vx ++){ print OUT "$DATA[$vx]";}
│ truncate(OUT,tell(OUT)); # ファイルサイズを書き込んだサイズにする
│ close(OUT); # closeすれば自動でロック解除
│ }
│ #キャッシュ保存後、データの日付をそろえる
│ utime ( $mtime_m, $mtime_m,$cache_filename);
│ }
│ for( $vx = 0; $vx < $counter; $vx ++){ print"$DATA[$vx]"; }
│}
こういった小手先のプログラミング挟むだけで激安レンタルサーバでもレスポンス大幅改善する。
WordPress/データベース/高速化プラグインなどを一切利用しない、99円/月額プランで
運用していますが、個人の小型サイト運営しているぐらいならな~んの問題も発生してない。
(レンタルサーバ会社からは、”専用メールアドレスの利用” 向けプランとして出てるやつ)