カレッヂ |
質問者 ひこ
投稿日 2/9(金) 17:16:48
(1).print文をいっぱい羅列するのと、 print <<"EOF"; EOF で処理させるのとでは、どちらが速いのでしょうか? (2).<FORM>の際のPOSTとGETどちらが速いのでしょうか? (3).$|=1;を記述しておくと、なにか良い事あるのでしょうか? 少しでも処理の速度を速くしたいのです。 特に、テレホタイムは重くって画面の表示もままなりません(涙) 当たり前の事でもいいので、何か方法があったら教えてください。 |
回答者 しあわせのツボ
[削除]
投稿日 2/9(金) 18:14:50
(1) ヒアドキュメントの方が速いそうです。print $a,'111',$b,'222'; などのように1文でまとめてprintさせるのも同等の速度が望めます。また、変数がない部分なら "文字列" でなく '文字列' にした方がいいかもしれません。 (2) 処理速度は殆ど違わないと思います。ただ、両方からデータを与えるのはオーバーヘッドがあると思います。 (3) printしたものがバッファされず即座に送信されます。書かなかったからと言って不具合が出ることはまずありませんが、書いた方が安全でしょう。 |
質問者 ひこ
[削除]
投稿日 2/9(金) 19:14:53
回答ありがとうございますv 早速試してみます。 ホントにありがとうございました(ペコリ) |
回答者 羊
[削除]
投稿日 2/9(金) 22:14:26
(3)に関してはこんなのが見つかりました。↓ http://www.wakusei.ne.jp/twn/lng/red/wwwlng.cgi?show+200005/00050127.txt |
回答者 さくら
[削除]
投稿日 2/10(土) 01:53:21
(2)GET と POST は perl とは直接関係無く、 HTTP の仕様で決められているリクエストメソッドの事です。 基本的には、 GET はリソースを要求するメソッドです つまりページそのものですね。 POST は情報を送信する為のメソッドです。 こう書くとPOSTの方が早そうですが、CGI の場合、WEBサーバーは POSTで送られたデータをCGIプログラムに渡します。 そしてそのプログラムが返したリソースをレスポンスとしてクライアントに返します。 GETでは、データは環境変数に格納して、CGIプログラムにリソースを要求します。 そしてそのプログラムが返したリソースをレスポンスとしてクライアントに返します。 で、結局どっちがはやいの? WEB サーバの処理速度は殆ど変わらないと思います。 ゴメンナサイ! 答えになってませんね。テストした事無いもので。。。 (3)これは、コマンドバッファリングと言うものだ。 簡単に言うと $| はデフォルトでは 0 で、0 以外の値を入れる事によって print の後にすぐフラッシュする。 バッファリングしないのではない事に注意。 (私は、$|=1; これでバッファしないと思っていたが、今らくだ本を見たら違っていました。 らくだ本をもっていたら 改訂版の146ページを参照して下さい。) ブロックバッファリングされるのです。 グラフィックを扱うスクリプトなどでは、 $| = 1; これを皆さん使っています。 バッファとは、cpu と他の機器との処理速度の差を埋める為に 一時的にデータを蓄積するものです。 |
質問者 ひこ
[削除]
投稿日 2/13(火) 14:40:13
皆さんイロイロな回答ありがとうございました。 (1)に関しましては、しあわせのツボ様の言われているとうり、ヒアドキュメントを使用して変数のない部分は“'”を使用するように変更しました。 (2)に関しましては、皆様処理速度には変わりがないと言われているので、処理の一貫性を保たせる為にGetを使用しようと思います。 (データを表示させる時はGet、データを更新する時はPostのように、処理方法は混在させない方がいいんですよね?) (3)に関しましては、皆様の回答を拝見する限り$|=1;を記述すれば少しでも処理が速くなるように感じられるのですが、 ただ、サーバーの重たい時間は皆同じ。 $|=1;を書く事で、サーバーに余計な負荷をかけてしまったりはしないのでしょうか? (本音を言えば、他の人はどうでも良くって、自分だけでも処理スピードがあがればいいのですが…(苦笑)) とりあえず、今のところは$|=1;の記述を入れてありますが、もしそういう事であれば、$|=1;の記述は外したいと思います。 |
回答者 さくら
[削除]
投稿日 2/14(水) 03:04:45
>(データを表示させる時はGet、データを更新する時はPostのように、処理方法は混在させない方がいいんですよね?) もう一度ご説明しますが、GET と POST はリクエストメソッドです。 これを、同時に使う事はできません。 CGIスクリプトを呼び出す場合、<A HREF="url"> <IMG SRC="url"> 等も有りますが、ご質問のFORM の場合、例えば、 <FORM ACTION="http://domail/script.cgi?query" METHOD="POST"> この様に呼び出します。 この場合、リクエストメソッドはPOSTです。 入力されたデータはCGIスクリプトに渡されます。ですから、CGIスクリプトでは、 標準入力からデータを読みこむことができます。STDIN からですね。 この時、?の後のqueryはどうなるのかと言うと、 ? はクエリーシンボルと言って、WEBサーバーはこれを見つけると、 この後のデータを環境変数にセットします。 環境変数は perl が持っている訳でなく、システムが持っているものです。 UNIXならUNIX環境変数です。perl では、%ENV でアクセスできます。 $ENV{'QUERY_STRING'} でquery を取得できます。 では、METHOD="GET" だったらと言うと、query は送られません、 入力データにオーバーライトされてしまいます。 HREF や IMG を使った場合は、貴方の使っているクライアント(ブラウザ)が、 GETリクエストを送信しています。 私の考えでは、POSTメソッドを使用して、クエリーデータを同時に渡しても、 問題は無いと思います。 リクエストヘッダーには、他にも、ホストやユーザーエージェントやリンク元等の さまざまなデータが渡されます。それらは、やはり環境変数にセットされます。 クエリーもその一つなのです。 仕組みが少し分かっていただけたでしょうか? 結果、どちらを使うかは貴方が決める事ですが、 私の意見はFORMではPOSTを使うほうが良いと考えています。 理由は2つあります。 一つは貴方も知っていると思いますが、送信データの量に制限がないという事。 もう一つは、POSTの場合は情報を送信する為のメソッドである為、 ほとんどの、WEBクライアントは、重複送信に対して、警告メッセージを出すように 設計されています。 オーダーFORMを扱うスクリプト等では、ユーザーに対しても、WEB管理者に対しても親切な設計であると言えるでしょう。 (3) $| = 1; これを使うと若干性能が低下するようです。 書きこむたびにフラッシュするのは、効率低下の原因になるようです。 ただ、グラフィックを扱う場合には、イメージデータの損失や破壊を防ぐ効果があるようです。 グラフィックを扱っているので無ければ、やめたほうが良いかもしれませんね。 |
返信(回答)する
Web裏技 |