質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

2911閲覧

プログラムのif構文のelseの場合の読み込みについて。

YuichiKataoka

総合スコア216

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

4クリップ

投稿2017/08/03 17:00

編集2017/08/04 00:54

主にPHP、JavaScriptについてですが
仕事で使う社内用webプログラムを作っています。使う時間が経つにつれ、機能を増やしたくなり、それに伴いソースコードが増えていきます。

特にPHPだと、ソースコードが増えると比例してページの表示スピードが遅くなるのが目に見えて分かります。

このような場合、PHPも、JavaScriptもif構文や、switch構文を使い、条件分岐でなるべく 表示されるwebページでは実行される処理が少なくなるようにしています。(表示しているURLを取得して、処理をするかしないか、またユーザーのアクションによって実行するかしないか、など)

本題になりますが
例えば、if構文を書くとfalseの場合には、そのブロック内は読み込まれないと思うので、ソースコードはif文で特定の条件の場合のみプログラムを実行するようにしていたりしますが、実際にwebページの表示がされ終わるまでに、falseのブロック内は読み込まれていない(falseの場合の処理には、データベースへのアクセスをし、それをPHPのechoやincludeで出力、記述してあるとします)、からwebページのレンダリングのスピードには、どんなにたくさん記述されていても関係ない、ということになるのでしょうか。

質問が要点から少し外れて纏まりがなかったため、修正して質問させて頂いております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

実行されない実行分岐のコード量におけるパフォーマンスの違い

質問内容が変わったので、見解を書きます。

PHPとJavascriptどちらもそうですが
スクリプト言語は実行時コンパイルされます。
ということは
ファイルを読み込み、字句解析をし、正しいPHPコードだと判断後機械語に翻訳され、実行されます。

極端な例を考えると分かりやすいです。
ファイルサイズ1KBのソースコードとファイルサイズ100MBのソースコードを比べた場合、
どちらが読み込み速度は速いでしょうか。
また、どちらがコンパイルビルドにかかる時間が長いでしょうか。

100MBですよね。

つまり、if else でelseが実行されないから読み込まれないのではなく、ファイル全体を読み込んでコンパイルした内容をメモリに保持しているので、ifを実行しようがelseを実行しようがメモリ内のプログラムを実行するだけです。
読込み速度は変わりません。

もちろんifの内容を実行するのに10秒かかる重たい処理が書かれていて
elseの内容は0.1秒で終わる処理が書かれていれば実行時間が軽いのはelseのほうです。

まとめると

  • 実行時コンパイルにかかるDisk Readおよび字句解析、ビルドはコード量とファイルサイズに影響します。
  • ビルドされたコードの分岐はそれぞれのプログラムの内容によって実行速度は変わります。

###以下 旧回答

パフォーマンスを常に意識しているということはとても素晴らしいことだと思います。

インラインにて見解を書いていきますね。

主にPHP、JavaScriptについてですが

主に仕事で使う社内用プログラムは、時間が経つにつれ、機能を増やしたくなり、それに伴いソースコードが増えてしまいます。

機能が増えれば実装が増えますね。正しい認識です。

特にPHPだと、ソースコードが増えると比例してページの表示スピードが遅くなるのが目に見えて分かります。

このような場合、if構文で条件分岐して、なるべく表示されるwebページで実行される処理は少なくなるようにしています。

該当するURLによって実行されるコード量が増えればその分実行コストはかかりますが、目に見えて遅くなるというのはあまり経験がないです。
そのURLに関係のないPHPファイルまですべてrequireしてるのでしょうか。

requireを記述するのではなく
Auto Loaderという仕組みがあり、classにアクセスしたときにそのclassが見つからなければ自動でclassを読み込みにいくことができます。
これにより余計なrequireを意識せずにむだなロードを減らせます。

また、サーバ処理で一番コストがかかるのが、DB接続だと思います。
コードの読み込みの速度を気にされるより、テーブルのIndexの見直しや、SQLの最適化。実行プランの見直しを検討されるといいと思います。

例えば、if構文はfalseの場合、そのブロック内は読み込まれないというテキストを読んだので、なるべくファイルにはアクセスするhttpリクエストを最小限にし、アクセスされるファイルもその1ファイル内に纏まるように書いたり、ソースコードはif文で特定の条件の場合のみプログラムを実行するようにしたり、(表示しているURLによって、処理をするかしないか、またユーザーのアクションによって実行するかしないか、など)しているのですが、実際にはページの読み込み速度にどこまで影響があるか疑問に思ってしまいました。

httpリクエストを最小限というのはこれはPHPの話からJavascriptの話になったのですよね?

他にはファイル毎に何をするファイルなのか、明確にして纏めて書くようにする、などかと思うのですが、このようなケースでは機能は多くてもページ速度が遅くならないためにどのような工夫が有効でしょうか。

ハイパフォーマンスWebサイトという本があります。

https://www.oreilly.co.jp/books/9784873113616/

scriptタグの定義をbodyの閉じタグの前に宣言しろ、とか
cssスプライトを使ってリクエスト回数を減らせ、とか
Webサイトの高速化に必要な基本的なことが書いてあります。

サイトの表示で一番容量を食うのはhtml/css/javascriptなどのテキストのダウンロードではなく、画像、動画、音声、などのバイナリデータです。

動画や音声はそのサイトの特性上大量の通信が発生するのは仕方ないとして
通常のWebサイトにおいても画像は大量に使用されていると思います。

画像は必ず圧縮してください。
jpegはJPEG-min
PNGはtiny-PNGなどのサイトで圧縮可能です。

また、画像は遅延ローディングができます。
画像 Lazy load などで検索してみてください。いくつかライブラリが見つかります。

速度という意味では、例えば管理画面にて、検索するたびにsubmitで画面全体を再描画したり、テーブルのソートを変えるだけで画面全体を読み込みなおしたりすると、速度面でかなりストレスがあります。

データ取得、更新、削除、登録といったCRUDのWebApiを作成しAjaxによりシングルページにて機能を実現するとパフォーマンスが格段に上がります。

一回のif文を気にしたり、一回のrequireを気にするよりも格段に得られる恩恵は多いと思います。

javascriptについては一番コストがかかるのは通信とDOM操作です。
特に中間データや非表示になっているhtmlに対してDOM操作を大量に行った場合と、計算を最低限に抑えた場合で実行速度に数千倍の差が出ます。

※過去に同僚が実装したjavascriptは実行完了までに3分かかり、IEは実効完了を待たずにダイアログを出して停止するということがありました。
300件のデータをjavascriptでフィルタリングするという内容だったのですが
サーバーにて300件の<li>を生成して返し、<li>を操作して複雑なフィルタをかけて不必要な<li>をdisplay:none;にするという実装でした。
開いた口がふさがりませんでした。彼はその実装に1週間費やしました。

jsonで取得してjsonでフィルタするように半日で修正したのですが、1秒もしないで計算が終わるようになりました。

コードの最適化というよりも詳細設計を最適化する恩恵のほうが遥かに大きいです。

投稿2017/08/03 17:39

編集2017/08/04 04:25
Tak1016

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuichiKataoka

2017/08/06 16:28

丁寧な回答をありがとうございました。 非常にためになり、勉強になりました。質問がまとまりなくてすみませんでした。 知りたかった点はこれで分かりました。 >コードの最適化というよりも詳細設計を最適化する恩恵のほうが遥かに大きいです。 詳細設計の最適化、この部分で勉強がもっと必要だと思いました。 ありがとうございました。
guest

0

条件文で実行されない部分について、あなたが、「実行されない」と言わず、「読み込まれない」という表現を使っている思いはどの辺りにあるのでしょうか?

プログラムとしての読み込みは、最初にプログラムファイル全体について行われますので、その後改めて読み込む事はありません。

実行されない部分が、1行であっても、1万行であっても実行速度に変わりはないです。

投稿2017/08/04 04:12

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuichiKataoka

2017/08/05 08:49

「実行されない」と「読み込まれない」をはき違えていました。 回答ありがとうございました。
guest

0

何故かCタグも付いているので一応Cについて。

C言語の場合条件分岐そのもののコストが問題になることもでてきます(1秒に何万回もループしている中とかで)。これはCPUが分岐予測に失敗した場合に命令実行pipelineが崩れるからです。なので配列と添字操作で置き換えられないか試せ、みたいな話は聞きます。

投稿2017/08/04 00:56

yumetodo

総合スコア5850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問