ひろぺいんのブログ

岡山在住「ひろぺいん」の日々の生活記録と趣味のブログ。 愛車セレナの各種DIY情報やスーパーGTをはじめレース観戦、冬場はスノーボード、そして岡山近辺のおでかけ情報も。 テーマは定まってませんが(汗)よろしくです。

2012年11月

PHPのプログラム内に重い処理を実行する部分がある場合、普通はその処理が終わるまでプログラムは先に進みまない。
ホームページの表示途中で重い処理がある場合、その処理を終わらせないと、ページは表示されない。

せめて途中まででも表示してくれればと思うが、まったくダメ。
固まっているかのように表示が変わらない。

まず、ホームページの軽い部分だけでも先に表示しておいて、重い部分は「Loading」などを表示ながらバックグラウンドで実行。実行できたら結果をHPに表示する。
これが、やりたいことである。


実際やり方はいくつかあると思われる。
だが、なるべくカンタンな方法で実現したい。

いろいろ調べたが結局この方法が一番カンタンだということで自分の中で落ち着いた。
ajaxの非同期処理を使ってバックグラウンドでphpを実行する方法である。


重いphpの処理とはいろいろあると思うが、カンタンにsleep(10);で代用する。

例えば、a.phpというプログラムがある。
<!--a.php-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>
<body>
表示スタート
<?php
sleep(10);

print "10秒経過!!";
?>
</body>
</html>
「表示スタート」を出力し、10秒経過後、「10秒経過!」を出力するというもの。
このページにアクセスすると、ページは10秒経過しないと表示されない。


これをajaxを使って、先にページを表示し、10秒かかる処理はバックグラウンドで実行するようにしてみる。
上記でphpで処理している部分をfullwait.phpに切り出す。
<?php
//fullwait.php
sleep(10); print "10秒経過!!";
?>


このphpプログラムをajaxを使って呼び出して実行するようにしてみると、

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<!--jquery.min.js読み込みは必須-->
		<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'>
</script> <script type="text/javascript"> $(function(){ $("#sample").load("./fullwait.php"); }) </script> </head> <body> 表示スタート <div id="sample" align="center"> <!--処理を実行中に表示する内容を記載--> <img src="ajax-loader.gif"alt="Now Loading..." /> <!--ローディング画像--> <p style="text-align:center;">Loading・・・</p> <!--ローディング表示--> </div> </body> </html>
 
これで、phpの重い処理はバックグラウンドで処理される。
このプログラムでは、処理結果が<div id="sample">の中に、バックグラウンドで処理中の際に表示される内容を記載しておき、fullwait.phpの処理が終わったら、fullwait.phpでの出力内容が<div id="sample">に置き換わって表示される。

これで、多少重たい処理も気にならなくなるし、ロード中が今風でよい感じ!!


関連)
デコメテンプレートをスマートフォン(アンドロイド)にダウンロードするPHP

    このエントリーをはてなブックマークに追加 Clip to Evernote

若干しつこいが、さらに温度計の表示温度の検証をしてみたから追加でアップ。
ちょっと個人的にこだわりたい内容なもので・・・


先日の記事で、車内温度センサーの設置場所を変更した。
車内温度センサー設置場所再調整

【商品情報】カシムラ 車内外温度計(サーモ) AK-109


車外は相変わらず正確と思われる温度を表示している。
(たまに道路わきに表示されている温度との比較により)

それに比べ、車内温度はその時点の正確な温度が何℃なのか比較のしようがない。

というか、その温度を知りたいから温度計をつけているのであって・・・・。




うーーん。




で、

100円ショップで思わず購入。
画像1
アナログ温度計(笑)

本末転倒という気もするのだが、まぁ、とりあえず温度表示があっているか確認しないことには満足できないし。
100円だしいっか、ってことで。一応、湿度計までついている。


とりあえず計測してみると、
画像3
時間は朝。
アナログ温度計は12.5℃ぐらい。で車内温度計は約11℃。微妙だ。
この時のiPhoneの温度表示。
画像4
どの地点の温度なのか、一番あてにならないけど、たまたま見たらこの温度表示。


次に時間を変えて、
画像4
夜撮影。
光の加減で見にくいが、これはお互い12℃ぐらい。


さらに、違う日の昼間に比較。
画像1
お互い16℃ぐらい。

ここからさらに1時間ぐらい走ってみる。
画像1
暖房をつけたこともあってか室内温度上昇。
でも、どちらの温度計の表示も遜色ない温度表示である。

結果、いずれの場合もそんなに大きく違わなくて、室内温度も正確な温度表示になっている様子。

少なくともこの季節は大丈夫のようで、大満足。

問題はこの設置場所で夏場でも正確な温度計測ができるかどうか。
当分はこのまま設置しておくことにしよう。

【商品情報】カシムラ 車内外温度計(サーモ) AK-109

    このエントリーをはてなブックマークに追加 Clip to Evernote

このページのトップヘ