• ベストアンサー

PHP、JavaScript、どちらでも処理可能な場合の選択法

javascriptとPHPの使い分けについてにお聞きします。 ソースを隠すことのできるPHPと、 クライアントサイドスクリプトの強みを持つjavascript。 それぞれの特長を活かし、適材適所に使い分ける、 ということは分かっているつもりです。 その上でお聞きしたいことがあります。 どちらの言語でも可能な処理(ブラウザに時刻を表示する等)の場合には、 一体どちらを使うべきでしょうか。 考え方の指針をどなたかお与え下さい。 ソースを隠すことに重きを置かない場合、 処理速度の速さなど、パフォーマンス面で優れた方を、 ケースバイケースでチョイスしていけたらと思っています。

  • march4
  • お礼率83% (628/754)
  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
回答No.4

サーバサイドとクライアントサイド、というところになりますが、 JavascriptはアクセスしてきたブラウザがJavascriptの実行エンジンにて処理を行いますので、サーバに負荷がかかりません。 例えば、郵便番号を入れて、該当する住所を検索し自動的に挿入されるスクリプトを考えた場合、 http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html こちらのライブラリのようにJavascript(+JSON)でやるのか、「住所検索ボタン」をかなんかを設置して、郵便番号をPOSTしてやって、サーバに保存した郵便番号一覧からサーチしてページを更新するのか。 どちらの処理も負荷としては大差ないですが、直感的かそうでないか、というところで見てみれば、大分差があるように思えます。 実際に目的の処理結果としては「使用用途が等価であるケース」な場合はあると思いますが、ことインターフェイスとしての見せ方に関しては、等価であるケースは少ないと思います。 また、等価な場合があったとしても、その動作が複雑であった場合、車輪の再開発を行わず、何らかのライブラリを使うと思いますが、より優れたライブラリがPHPなのか、Javascriptなのかで選択も変わると思います。 とりあえず、今回のご質問に関しては、実際に「仕様用途がほぼ等価であるケース」に直面した際に、もう一度質問しなおしたほうが良いと思います。

march4
質問者

お礼

こんばんは、hogehoge78さん。 >Javascriptの実行エンジンにて処理を行いますので、サーバに負荷がかかりません。 ということは、ページ出力の速さは、 クライアントサイドのPCの処理性能に依存することになりますよね。 どこかで読んだ記憶がありますが、それを思い出すきっかけとなりました。 >どちらの処理も負荷としては大差ないですが、直感的かそうでないか、というところで見てみれば、大分差があるように思えます。 とてもよくわかりました。 さすがだなぁと感心してしまいました。 >実際に目的の処理結果としては「使用用途が等価であるケース」な場合はあると思いますが、ことインターフェイスとしての見せ方に関しては、等価であるケースは少ないと思います。 郵便番号の例を受けて、確かに、そのような気が私もしてきました。 >また、等価な場合があったとしても、その動作が複雑であった場合、車輪の再開発を行わず、何らかのライブラリを使うと思いますが ライブラリを使うべき処理が発生したとして、 その処理において、どちらの言語のライブラリを使うのが、より適当か、という判断基準 も確かにありますね。 もっとも、まだ、ライブラリを利用して~なんたら~ なんていう段階にはない私ですが。苦笑 現在、私、車輪の再開発中です。笑 コーディングの練習も兼ねまして。 >とりあえず、今回のご質問に関しては、実際に「仕様用途がほぼ等価であるケース」に直面した際に、もう一度質問しなおしたほうが良いと思います。 はい、そうさせて頂きます。^^ いや~、毎回、惚れ惚れしてしまいます。笑 きっと、書かれるコードも綺麗なんでしょうね。 無駄がなく、短く、スッキリしていそうなイメージです。 PHP、JavaScript、両言語の関係について、なんとなくつかめましたので、 教えて頂いたことを意識しながら、JavaScriptについてもこれから勉強していこうと思います。 こちらでも、どうもありがとうございました。 大変参考になりました。

その他の回答 (3)

回答No.3

> どちらの言語でも可能な処理(ブラウザに時刻を表示する等)の場合には、 > 一体どちらを使うべきでしょうか。 質問の本分は 「どちらの言語でも可能な処理」ではなく、 「ブラウザに時刻を表示するにはPHPかJavaScriptか、どちらでやる方がいいですか?」という質問ですか? そういうことならNo.2の私の発言は私の誤解ですので、すべて無視して下さい。 クライアント(パソコン)の時刻を表示するならJavaScript、 アクセス時のサーバーの時刻を表示するならPHP(サーバーサイドアプリケーション)でなければならないと思います。

march4
質問者

お礼

まず初めに、私の質問文の書き方がまずかったことをお詫び致します。 私はまだJavaScriptについてよく分かっていないために、 時間表示処理については、PHPとJavaScriptでは完全に等価だと誤解していました。 しかし、実際には、PHPではサーバの時間を、JavaScriptではクライアントの時間を、 それぞれ表示するようなので、両言語で等価である処理の例としては不適切だったと言えます。 誤解を与えるような書き方をしてしまい、申し訳ございませんでした。 私の質問の主旨は、 両言語、どちらを使って処理しても同じような結果が得られるという場合が、 仮に存在したとして(JavaScriptの知識が乏しいため、このようなことを言ってます)、 その場合に、どちらの言語でその処理を行うべきか、 その選択方法について知りたい、ということです。 「仮に存在したとして」という大前提がそもそも崩れるようであれば、 回答は、 「等価な処理はないため、言語選択で迷うなんてケースは存在しない。」 の1つに決まるのだと思いますが、 実際には、そんなことはないだろうと、質問する前の私は思っていたので、 このような質問をさせて頂きました。 ただ、yambejpさんから頂いた回答NO.1の、 「ほとんどの場合、使用用途はことなります。」 の部分により、 私の言う「仮に存在したとして」の大前提は、 回答1発目から、ほぼ完全に崩されそうな状況にあり、 「バカな質問をしてしまったかな、、。」と、 私は思ったのでした。 くどくてすみませんが、 「両言語において、使用用途が等価であるケースが存在しない場合」には、 私の質問は意味を成さなくなりますので…。

回答No.2

> 一体どちらを使うべきでしょうか。 一言で言えば、ケースバイケース、そのままです。 JavaScriptが得意か、PHPが得意かで決めるくらいでもいいんじゃないでしょうか。 Ajaxなら、 HTMLデータの生成をサーバー側で処理するなら、 JavaScriptはdiv.innerHTML=xmlhttp.responseText;で終わらせることになります。

march4
質問者

お礼

>JavaScriptが得意か、PHPが得意かで決めるくらいでも 好き嫌い、得手不得手で決めちゃって、本当に良いのだろうか、 と疑問に思い、この質問をさせて頂きましたが、 頂いた回答については、 「そうした判断(得手不得手)で決めても良いケースもある」 という理解で、参考にさせて頂きます。 ただ、回答NO.1のお話からすると、 両言語で用途が等価(ほぼ等価、も含め)な処理というのは、実際にはそれほど無いようなので、 得手不得手でチョイスしても良さそうなケースがどの程度あるのか、 ちょっと気になる所ではあります。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>どちらの言語でも可能な処理(ブラウザに時刻を表示する等)の場合 ほとんどの場合、使用用途はことなります。 たとえば、上記の例で言えば、時刻表示をする場合、 phpであればサーバーの時計を表示しますし、javascriptの場合は クライアントPCのローカル時計で、動く時計などを作る場合には 有効ですが、その時計が合っているかどうかは保障がありません。 考え方としては、サーバーでできることは原則サーバー側でおこなう。 どうしても動的におこないたい処理や、PHPにデータを送る前のチェック など補助的に使うのがjavascriptです

march4
質問者

お礼

>ほとんどの場合、使用用途はことなります。 >考え方としては、サーバーでできることは原則サーバー側でおこなう。 そのような感じなのですね~。全く知りませんでした。 参考にさせて頂きます。 どうもありがとうございました。

関連するQ&A

  • PHP内でJavaScriptの処理は可能?

    PHP内変数 $flag をJavaScriptで参照し、条件処理を行っています。 JavaScriptの処理は onClick() のタイミングで行います。 ソースの概要は以下のようになります。 1.ログインしているか見る(flagでチェック、1はログイン中…) 2.flagのデータ取得、条件処理。 3-1. flagが1以外なら、true処理 3-2. flagが1なら、false処理  ・  ・ と、こんな処理を行いたいのですが…上手く出来ません。 ソースは以下になります。PHP側の変数 "$flag" までの取得は上手く出来たのですが、 JavaScript側の処理で、つまづいてます…。 で、表題にもあるようにPHP内でJavaScriptの処理は可能でしょうか? アルゴリズム的に、アドバイスなどありましたらご教授ください。 以下が主要部分のソースになります。 <?php echo("<script Language='JavaScript'> "+ "<!-- "+ "function check(){ "+ "if($flag != '1'){ "+ "return true; "+ "} "+ "else{ "+ "header('Location: ./error.html'); "+ "exit(); "+ "return false; "+ "} "+ "} "+ "//--> "+ "</script> "); echo(" <a href='test.html'><img src='botton.gif' onClick='check()' "> アドバイスお願い致します。

    • 締切済み
    • PHP
  • javascriptのPHP化について

    宜しくお願い致します。 javascriptの外部ファイルをPHP化して、サーバサイドで動的に生成した内容を吐き出し、それをHTML側でjavascriptの外部ファイルとして受け取って処理しております。 この場合のブラウザがアクセスした際に処理される順番は・・・ (1)HTMLの読み込み開始 (2)header内のjavascript外部ファイルの読み込みと実行 (3)HTMLファイルのbody以下を読み込み (4)結果をブラウザに返して表示 という流れになるはずです。 この場合、(2)のjavascript外部ファイルの方がbodyより先に実行されるはずです。 しかし、javascript外部ファイル内のPHPでセッションデータを扱っている場合、(3)のbody内でPHPでセッションを定義した内容が、なぜか(2)のjavascript外部ファイルで反映されて実行されるのです。 私のイメージでは・・・ (1)HTMLの読み込み開始 (2)header内のjavascript外部ファイルの読み込みと実行  ※この時セッションは反映しない (3)HTMLファイルのbody以下を読み込み  ※この時にセッションを入れても(2)が既に実行さられているので反映しない (4)結果をブラウザに返して表示  ※結果、セッションにデータが入っておらず、php側でエラーを吐き出しjavascriptが止まる という様になるかと思ってましたが、なぜか実行されます。 javascriptはHTMLが全部読み込まれてから実行されるのでしょうか?

  • Javascript → PHP

    今まで、Javascript で表示していた部分を PHP でやりたいと思ってますが、 その場合どういうふうにやればいいのでしょうか?もちろんそのままではだめですよね・・。 Javascript内容は「今日は何の日?」見たいな感じのものです。 今日8月6日は、ハムの日です。 (この例文は適当) 目的はこの文をHTMLソースに織り込みたいからです。 変換できるサイトとかあれば教えてください。よろしくお願いします。

  • javascript と php とでのデータの受け渡し

    既出の質問かもしれませんが、どの回答を読んでもいまいち理解できなかったので質問させて下さい。 phpからjavascriptへ、その処理結果をphpに送りたいと考えております。 まず phpの変数のデータをjavascriptでクライアント側で処理させるために、 print(<script type='text/javascript'>);~などなど、 printを使ってphpの変数を入れ込んだスクリプトを出力しています。 そして、出力したjavascriptの中にクライアント側の処理後のデータ をphpに送るために、 XmlHttpRequestのopenメソッドで("GET",url,true)とし、 urlには"***.php" + "?a=" + aの値 をいれて request.send(null);で送信するようにしています。 最後に、送信先のphpで $a = $_GET["a"];として受け取ろうとしています。 ちなみに、これらは全て同一ファイル上に書いてあり、 XmlHttpRequestのopenメソッドのurlには、 そのファイル自身を記述してあります。 ブラウザでアクセスしてソースを見てみると、 javascriptは記載されていますが、処理がされていないようで、よって 最後にGETでデータも取得がされていないようです。 そもそもこういったことは可能なのでしょうか? 自分の考え方は間違っているのでしょうか? javascriptもphpも初心者なもので、考え方があっているのかいないのかも 判断できない状況です。また、このjavascriptが何をきっかけに実行されるようにすればいいのかもよくわかりません。 それでは、宜しくお願い致します。

  • PHPでJavascriptの引数の扱い方

    はじめまして。宜しくお願い致します。 環境:Linux(Redhat 9), apache2, PHP4.3.6 [やりたいこと] 下記↓ソース内容↓より、input=button と input=text が幾つかある。 個々のボタンが押されたら、PHPにて"個々"の内部処理を行う。 内部処理終了後は、個々のテキストにインクリメントした値が画面表示される。 HTML+Javascript にて、カウンター部分は一応完成しています。 ↓ソース内容↓ <html> <head> <script language="JavaScript"> <!-- function ccc(obj0) { cnt = obj0.value; cnt++; obj0.value = cnt; } // --> </script> </head> <body> <form name="ose"> <input type="text" name="view0" readonly size=5 maxlength=3> <input type="button" value="押せ0" onClick="ccc(view0)"><br> <input type="text" name="view1" readonly size=5 maxlength=3> <input type="button" value="押せ1" onClick="ccc(view1)"> </form> </body> </html> コレをPHPに書き換えると、上手くいきません。 ↓PHPに書き換えた場合↓ <script type="text/javascript"> <!-- function ccc($obj0) { cnt = $obj0.value; cnt++; $obj0.value = cnt; } // --> </script> 引数に付いている "$"マークをJavascript側で認識しないのだろう、と考えています。 出来れば、PHPで単体の関数として使用したい為、模索中です。 ※現在は、別の関数の中に上記の『↓HTML+Javascriptの場合↓』を無理矢理入れて使用しています。(別の関数:HTMLをPHPファイルに書き込む) 別の関数内に入れてても問題は無しです。 但、上記のJavascriptを使用しないソース達にも書き込んでしまうので、ちょとやだなーと。 いい方法があったら教えて下さい。

    • ベストアンサー
    • PHP
  • HTML+PHP+JavaScript

    リンクからJavaScriptでPHPに遷移させ、書き換えた内容を表示するというものをやりたいのですが。。 PHPではcase文で場合わけし、モードによってHTMLを表示させる機能はできています。 しかし、HTMLのリンク<A href=""></A> で新しいウィンドウを開き、そのページにその処理を行いたいです。 現在ボタンなどでは下記のように遷移させています。 <!-- function send(action, mode){ document.forms[0].mode.value = mode; document.forms[0].action = action; document.forms[0].method = "post"; document.forms[0].submit(); return false; } //--> <INPUT TYPE="button" VALUE="編集する" onClick="javascript:send('{val PHP_PATH}{val EDIT_PATH}','baseinfo')"> これですと、指定したアクションのPHPに遷移し、このモードにより処理をわけています。 しかし、リンクがクリックされたら、処理にいき、 さらにその処理をしたデータを新しいウィンドウに表示されるというのがどうもうまくいきません。 普通に ・<A HREF="" onclick="javascript:send('{val PHP_PATH}test.php','template')" TARGET="conf">テスト</A> とすると、元のウィンドウに、修正した内容が反映され、新しいウィンドウはブランクしてしまいます。 何か他によい方法はありませか?

    • ベストアンサー
    • PHP
  • PHPフォーム中のJavascriptの送信

    PHPフォームの中にJavascriptで作成したSelectを配置しPOSTしたところ、Javascript部分だけが情報が取得できません。 具体的には、年月日の月のSelectは通常に表示し、月を選択した際、その月の日数をJavascriptのonChangeで取得してSelectを作成し、innerHTMLで表示させています。 ソースで見た時はIDの指定だけですが、FireBugなどで見るときちんとしたソースで表示されていますが、こういう形のJavascriptの混在はできないのでしょうか? そうだとしたら、通常はどういう処理をしているのか、ご存知の方が居たら教えてください。

    • 締切済み
    • PHP
  • JavaScriptソースをphpで書くには?

    現在、テキストエリアに入力された文字数の制限チェックを 下記のような JavaScript を使用して HTML ソース内に書き込んでおります。 因みにオーサリングソフトは Dreamweaver CS5 を使用しております。 しかしこれだと簡単にソースを見られてしまうので php で書き表して外部ファイルとして処理させたいと思い あれこれやってるのですが上手く出来ません。 当方 php 初心者の為、どなたかご教授よろしくお願い致します。 <script type="text/javascript"> function limitMaxLength(target, len, err) { if( target.value.length > len ) { target.value = target.value.substr(0, len); if( "undefined" != typeof(err) ) { alert(err); } } } </script>

    • ベストアンサー
    • PHP
  • Javascriptで表示のページをPHPで読む

    Javascriptを使って表示されているウェブのコンテンツをPHPで読み込む方法について教えてください。 HTMLで作られている場合は「file_get_contents」でHTMLソースを取得できますが、Javascriptを使って表示されたページのソースを読み込むにはどのようにしたらよいのでしょうか。 読み込みたいページは下記のような構造になっています。 <html> <head> </head> <body> <h2>タイトル</h2> //ここのコンテンツ部分がJavascriptをONにしないと見えない。 </body> </html>

    • ベストアンサー
    • PHP
  • PHPの処理結果をjavascriptで利用する方法

    既に似たような質問も出ていそうで恐縮ですが(一通り目を通したですが、目的とするものは見つけられませんでした)、 PHPとjavascriptのやりとりについて教えていただければ幸いです。 データをフォームなどから受け取る→サーバー側(php)で処理→ 処理した結果の変数をjavascript用の変数として扱うといったこと がしたいのですが、うまくできません。 実際には以下のような形で書いて失敗してしまいました。。。 /*xxx.php*/ <html> <head> <?php $result = $_POST["sentence"]; ?> <script language="javascript"> result = "<?=$result?>"; </script> <script src="xxx.js" type="text/javascript"language="javascript"></script> </head> <body> <form id="sample"> <input type="text" name="sentence"> <input type="submit" value="送信"> </form> </body> </html> /*xxx.js*/ /*xxx.js*/ window.onload = function(){ document.getElementById("sample").onsubmit = function() { var req = createHttpRequest(); req.onreadystatechange = function(){ if(req.readyState==4 && req.status == 200){ alert(result); //PHPの結果を待った後を想定した何らかの処理      //ここでresultを使いたいが、サーバー側への送信前      //の値が入っているだけでonsubmitが反映されていない。 } } req.open("POST","./xxx.php",false); //<-formでくくられた<input type="text">等の部分は反映されない。 req.send(""); } } function createHttpRequest(){ if(window.XMLHttpRequest){ return new XMLHttpRequest(); } else if(window.ActiveObject){ try{ return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { return null; } } } } 私なりに調べたところ 1.PHPとjavascriptは別の所で動作しているので受け渡しは基本不可能 2.PHP側で動的に書き出すことで見せかけることはできる。 var test = <?=$test?>等 3.XmlHttpRequestでphpの処理を結果を待って、変数を利用しようと思ったが、 <form id="form"> <input type="text" name="sentence"> <input type="submit" value="送信"> </form> といった場合に$_POST["sentence"]に値を入れる方法が不明。 また、 multipart/form-dataによる送信など方法が複雑。 responseTextには<html>から</html>まで格納されてしまった。 処理項目ごとに表示用に別にPHPファイル作成だと困る。 4.<form action = "xxx.php" onsubmit=関数名>とすると、 onsubmitで指定した関数が先に呼び出されてから、 xxx.phpの実行が行われるので、サーバー処理を待たずに javascript側が実行されてしまう。 といったことだけは分かりました。 しかし、どのように変更すればうまくいく(もしくは見せかける) ようになるのかがさっぱり分からなかったため、 質問させていただきました。 よろしくお願い致します。

    • ベストアンサー
    • PHP