• ベストアンサー

HTML化によるホームページの高速化方法について

HTML内で外部サーバにあるCGIをjavascriptとして起動させて、 結果を表示する方法を行っていますが、実行させるjavascriptの数が多くなるに連れて ページが表示されるまでに時間がかかってしまいます。 そこで、ページが表示されるたびに毎回javascriptを表示させる方式(下例のold.html)ではなく、 old.html内のjavascript部分を実行させたものをHTML化したnew.htmlを 自動で作成するcgi(下例のtranslate.cgi)などを作りたいと考えていますが、 どのように作ればいいのでしょうか。 【old.html(一部抜粋)】 <BR>下記にtest.cgiの実行結果が表示されます!<BR> <SCRIPT language="javascript" src="http://www.xxx.com/test.cgi"></SCRIPT> 【test.cgi(一部抜粋)】 print "Content-Type: application/x-javascript\n\n"; print "document.write('<P>test.cgiの実行結果だよ</P>');"; 【new.html(一部抜粋)】 <BR>下記にtest.cgiの実行結果が表示されます!<BR> <P>test.cgiの実行結果だよ</P> ●translate.cgiの仕様は、下記の内容を考えています。 perlについては少しだけ理解はしているのですが、 (3)部分のプログラム方法がわかりません。 【translate.cgi】 (1)old.htmlファイルをオープンする (2)old.htmlファイルを一行ずつ読み込み、javascript以外であれば、 そのままnew.htmへ書き込む (3)javascriptの場合には、実行させた結果を取得しnew.htmlへ書き込む 大変お手数お掛けいたしますが、 どうぞよろしくお願い致します。

  • mmei
  • お礼率74% (120/161)
  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

CGIはJavascriptを実行することができません。 Javascriptはクライアント(ユーザ)の環境で動くものです。 実際、CGIがどのような作業をしているのかが分からないので、なんともいえませんが、大抵のことならばCGIで実行可能と思います。 どのようなことをなさりたいのかを補足してください。

mmei
質問者

お礼

早速のコメントありがとうございます。 私が行いたいものの内容についてもう少し説明させて頂きます。 まずは、大変お手数ですが下例のホームページをご覧ください。 http://ps3-head.xrea.jp/news.html このページ内には、下のような外部cgiの実行が javascriptで複数かかれています。 <script language="JavaScript" src="http://ps3-head.xrea.jp/rss/jsRSS.cgi?url=http://myrss.jp/rdf/rXXXXX.rdf?v10::line=7::enc=sjis::temp=jsRSS.tmp"></script> このような外部cgiは、実行数が多くなるにつれてページの表示が遅くなってしまいます。 そこで、上記の外部cgiを実行して得た結果を別のhtmlに埋め込みたいと考えているのです。 具体的には、参考でご紹介させて頂いたサイトは、 外部cgiとしてニュース情報を自動取得し、その結果を返しているものです。 そこで、ユーザへ「http://ps3-head.xrea.jp/news.html」のページを直接見せるのではなく、 ニュース情報を取得してHTML化したもの(例えば、news_output.html)をユーザへ 見せる方式にしたいと考えています。 (news_output.htmlでは、news.htmlのjavascript部分が実行されて取得した、  ニュース情報がhtmlとして直接記載されているイメージです) 私が作成したいHTML化cgi(translate.cgi)というのは、 「http://ps3-head.xrea.jp/news.html」のようなページを読み込み 外部cgi実行部分を実行し全てHTML化したnews_output.htmlを 作成するcgiになります。 cgiからjavascriptを実行するのが不可能であれば、 cgiから他の外部cgiを実行しその結果を取得できる方法があれば なんとか出来るのかなと感じていました。 このような例による効果を表しているものとしては、2chがあると聞いています。 2chではユーザが掲示板を閲覧する都度、cgiで記事データを処理参照して表示しているわけではなく、 普段はHTML化したページをユーザへ見せて、記事の更新があった場合に、 あらたにHTML化を行っていると聞いた記憶があります。 このようにすることで、ページの表示速度が向上しますし、何よりサーバへの負荷も軽減されます。 大変面倒なご質問でお手数お掛けいたしますが、 これが可能となることで様々な事へ応用が出来き、 多少負荷が多いと思われるページの作成も容易となります。 どうぞよろしくお願い致します。

その他の回答 (1)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

別のサーバーにあるcgi出力の取得は、perlではLWPというモジュールで出来るようですけど(使い方の詳細は御自分で調べて下さい)。 あと、別のサーバーにあるcgiの出力をJavaScript構文ではなく、html文書か、csv形式に変更できなければ、JavaScript構文解釈をperlにさせるのはとってもきついのでは? 相手のcgi出力のJavaScriptが、単純にdocument.write();の羅列だけなら、()の中身を取り出してファイル出力すれば良さそうではありますけど。

mmei
質問者

お礼

コメントありがとうございました。 相手のcgi出力のJavaScriptですが、単純にdocument.write();の羅列だけとなっています。 比較的に簡易に出来るかなと考えていたのですが、難しいようですね。LWPについては知っていましたが、再度勉強してみます。

関連するQ&A

  • HTML上(javascript)からCGIを実行する方法

    javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI) を実行する方法を探しています。 下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に 『test』と表示するのみ)を表示したいと考えています。 利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、 cgiが使用できるサーバ上のcgi結果を取得したいものです。 通常のcgiのように、1ページでcgi結果を表示するものではなく、 HTMLファイルの一部にcgi処理結果を表示させたいものです。 そもそも、SSIを使用しなければ下記のようなHTML内にcgiなどの 実行結果を表示する事は出来ないのでしょうか。 よろしくお願い致します。 ※下例のプログラムではcgi結果は表示されませんでした・・・。 ---<index.htm>---------------------------------------- <HTML> <BODY> <SCRIPT language="Javascript" src="http://xxx.xxx.xxx.xxx/test.cgi"></SCRIPT> </BODY> </HTML> ---<test.cgi>---------------------------------------- #!/usr/bin/perl print "test"

  • 外部ファイル記述内容をヒアドキュメント上で実行

    題名の通りなのですが、説明が難しいです.. 外部のテキストファイルを読み込み、もしPHPスクリプトが記述されていたら、それを実行させたいです。 例えば、下記のようなテキストファイルをディレクトリにアップし・・ (テキストファイルtext.txt内容) テスト,これはテストです。 <?php echo (date("Y年m月d日")); ?> テスト2,これはテストです2 下記のようなスクリプトがあったとして・・ (PHP実行ファイル内容) <?php $text = file_get_contents("text.txt"); $text = explode("\n", $text); $num0 = explode(',', $text[0]); $num1 = explode(',', $text[1]); $subject0 = $num0[0]; $subject1 = $num1[0]; $body0 = $num0[1]; $body1 = $num1[1]; echo <<<EOD <p>{$subject0}<br>{$body0}</p> <p>{$subject1}<br>{$body1}</p> EOD; ?> 実行すると、出力は・・ (実行結果) <p>テスト<br>これはテストです。 <?php echo (date("Y年m月d日")); ?></p> <p>テスト2<br>これはテストです2</p> ・・というようになるかと思います。 ようは、<?php echo (date("Y年m月d日")); ?>がそのまま文字列として出力されるだけです。 これを、下記のような出力結果が得られるようにしたいです・・ (欲しい実行結果) <p>テスト<br>これはテストです。 2016年11月10日</p> <p>テスト2<br>これはテストです2</p> 何か方法はありますでしょうか? ご教示頂けましたら幸いです。

    • ベストアンサー
    • PHP
  • リンク一覧の表示

    <SCRIPT language="JavaScript"> <!-- function ShowLinks(){ var msg = "リンクの一覧:<BR>"; for(i=0; i < document.links.length; i++){ msg = msg + "<A href=" + document.links[i] + ">" + document.links[i] + "</A><BR>"; } var new1 = window.open('','new1', 'toolbar=1, location=1, status=1, menubar=1, scrollbars=yes, resizable=1, width=650, height=800'); new1.document.write(msg); new1.document.close(); } //--> </SCRIPT> 下記のように表示されるのを リンクの一覧: http://***.ne.jp/bbns.cgi http://***.ne.jp/abc.cgi 下記のように番号を付けて表示したいのですが リンクの一覧: 0:http://***.ne.jp/bbns.cgi 1:http://***.ne.jp/abc.cgi

  • CGIで出力するテキスト内容をhtml側で表示する方法の2

    前回、 http://okwave.jp/qa4532069.html で質問させて頂いた者です。 その後、joker_mk2さんに教えていただいた方法を使って、下記のように表示できるようになりました。 (前回、ブラウザの設定を色々変えた後、再起動で動くようになったようです) 他のページも参考にして、html側の書き方を変えてみましたが、この方法でもOKでしょうか。 (動いているから、結果オーライかも知れないのですが) 1.CGIスクリプト(Perlで記述)を用意... test.cgi ----------------------------------------------------- #!/usr/bin/perl my $val = 123; print "Content-type: application/x-javascript\n\n"; print "document.write('<p>変数の値=$val</p>')"; ----------------------------------------------------- 2.htmlを用意 ... test.html ----------------------------------------------------- <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=x-sjis"> </head> <body> <script language='JavaScript' src="http://xxx/CGI/test.cgi"> </script> </body> </html> ----------------------------------------------------- 上記のとき、動作として、 ◆ブラウザからhtml(http://xxx/test.html)にアクセスした場合、 ブラウザ上に 「変数の値=123」 と表示された。 (元々、やりたかったのは、こういうことでした。ありがとうございました) ◆ブラウザからCGIのパス(http://xxx/CGI/test.cgi)に直接アクセスした場合、ファイルのダウンロード確認ダイアログが出た。 ファイルをダウンロードして中身を見ると、 「document.write('<p>変数の値=123</p>')」 と書かれていた。 以上です

    • 締切済み
    • CGI
  • HTMLからのpl実行

    htmlのタグに下記のように記述し(test.html) <FORM METHOD="POST" ACTION="http://192.168.100.100:8080/cgi-bin/test.pl"> cgi-binにあるtest.plを実行したいのですが、 test.plのコードの中身がブラウザに表示されてしまいます。 httpd.confの設定は下記のように設定してあり、 権限もtest.pl,test.htmlともに755で設定しています。 ** ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory "/usr/local/apache/cgi-bin/"> AllowOverride None Options None Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi .pl .rb

    • ベストアンサー
    • CGI
  • HTML5のテストの方法が分かりません

    http://www.youtube.com/html5 で試用版を有効にし、html5 と JavaScriptで以下のように書きました。 [test.html] <!DOCTYPE html> <html><head><script type="text/JavaScript" src="test.js"></script></head> <body><video id="video_player" src="http://www.youtube.com/demo/google_main.mp4" controls autobuffer> <p>ビデオ再生</p></video> <input type="button" value="10秒 スキップ" onclick="skip()" /></body> </html> ------------------ [test.js] function skip() { document.getElementById("video_player").currentTimes += 10; } ------------------- test.html を GoogleChrome で開きましたが、黒いバーと「[10秒 スキップ」ボタンが表示されるだけで、ボタンを クリックしても何も動きません。 HTML5 のテストはどのようにして行うのでしょうか?

    • ベストアンサー
    • HTML
  • 結果のなかにさらにjavascript

    HTML部に <script type=\"text/javascript\" src=\"test.php\" ></script> を記述して 外部のphpスクリプトを実行した結果を表示させたり、 ることは出来るのですが、 結果のなかにさらにjavascriptを記述して実行しても作動しません。 <script type=\"text/javascript\" src=\"test.php\" ></script> で返ってきたデータにはJavascriptは記述できないのでしょうか? よろしくお願いします。

  • 表示の負荷

    javascriptからcgiを呼び出して表示した場合、何個も同じファイルを呼び出すと以下の場合3回オーバーヘッドが発生して負荷がかかりますか?それとも同じファイルだから何回よびだしても1回の負荷ですみますか? <script type="text/javascript" src="hoge.cgi?new=1"></script> <script type="text/javascript" src="hoge.cgi?new=2"></script> <script type="text/javascript" src="hoge.cgi?new=3"></script> 質問2 phpで同じようにすると、1回のオーバーヘッドで済むのですか?

    • ベストアンサー
    • Perl
  • ホームページ作成

    ホームページ作成をしているのですが、以下のJavaScriptを入れると 「セキュリティ保護のためコンピュータにアクセスできるアクティブコンテンツは表示されないよう制限されています」と出てしまいます。他の人が閲覧した際にも表示され写真が見れないのではないかと心配しております。下記を修正すれば直るのでしょうか。それとも別な方法があるのでしょうか。あまり知識がないため申し訳ありませんがよろしくお願いします。 internet explorer ver6.0 <SCRIPT LANGUAGE="JavaScript"> var imgArray = new Array("○○.JPG", "○○.jpg", "○○.jpg"); var imageFile = imgArray[Math.floor(Math.random()*3)]; document.write("<IMG SRC = \"", imageFile , "\">"); document.write("<BR>"); </SCRIPT>

  • JavaScript PHP HTML

    新しいウィンドウを開きたいのですがうまくいきません。 どうか教えてください。 現在作成しているプログラムはあるメニュー画面から、キャッシュを使わないページのリンクをはっています。 ただ、このリンク先のページから戻ろうとすると、 キャッシュはクリアされているため、 警告 : ページの有効期限切れ となってしまいます。 そこで、新しいウィドウを開くことを思いついたのですが、JavaScriptで下記のようなものを作成し <SCRIPT LANGUAGE="JavaScript"> <!-- function openWindow(tmplurl) { window.open(tmplurl,"window","WIDTH=640,HEIGHT=300"); } //--> </SCRIPT> HTML側では ・<A HREF="javascript:openWindow(###TEMP###)">新しいウィンドウ</A><BR> PHP側では下記のようにHTML側の文字を置換しています。 str_replace(###TEMP###,http://wwww.test.co.jp/test.html,$body) 値もちゃんと入ってきてはいるのですが、うまくいきません。。。

    • 締切済み
    • PHP

専門家に質問してみよう