最新コラム
-
-
-
Webサイト制作
【2023年版】国内・海外のおすすめVPS10選
-
Webサイト制作
初心者でも5分で分かる!SSL/TLSとは何か?
-
SEO外部対策SEO対策
Googleが推奨するnofollowの正しい使い方とは?
一般的に全て文字列として扱う為、コード内の文字列はシングルクォーテーションで囲うほうが速度が早く良いと言われています。
本当に全てをシングルクォーテーションに変えたほうがシステムとして良いのか検証してみたいと思います。
変数や制御文字列の扱いが異なると記述しましたが、具体的にどう異なるのかを解説します。
PHPで以下の記述を行った際に出力結果がどう変わるのかをまとめました。
実行コード
$str = "文字列"; echo '表示$str'; echo "表示$str"; echo "表示{$str}"; echo '表示文字列\n'; echo "表示文字列\n";
出力結果
表示$str 表示文字列 表示文字列 表示文字列\n 表示文字列(表示上改行される)
シングルクォーテーションの場合は制御文字列、変数がそのまま文字列として出力されています。
しかし、ダブルクォーテーションはそのまま変数中身や制御文字列として出力しています。
これは文字列連結を行う上で可読性がかなり高くなります。
しかし、外部から何が入ってくるかわからない場合は、外部から制御文字列などを入力されてしまう危険性があります。
ですので可読性とセキュリティを考えどのような文字列なのかを考えたほうが良いでしょう。
また、”表示$str”、”表示{$str}”この2つの記述は同じ結果になりますが
渡ってくる変数が配列だった場合
echo "表示$str['str']"; echo "表示{$str['str']}";
この2種類のコードを動作させた場合
上はエラーになり、下は正常に動作するといった差が出てきます。
以下のコードでクォートを変え速度比較を行います。
for ($i=0; $i<=100000000;$i++) { $str = "abcdefghijklmno"; }
real 0m4.175s user 0m4.157s sys 0m0.006s
real 0m4.148s user 0m4.126s sys 0m0.012s
real 0m4.071s user 0m4.050s sys 0m0.010s
real 0m4.133s user 0m4.115s sys 0m0.013s
確かにシングルクォーテーションの方が全ての場合で早くなりました
1億回繰り返して速度差は一番大きいところで0.6msとなっていました。
つまりシングルクォーテーションとダブルクォーテーション1個分の差は0.000000006msの差が出ています。
以下のコードでクォートを変え速度比較を行います。
$str_tmp = 'abcdefghijklmno'; for ($i=0; $i<=100000000;$i++) { $str = 'abcdefghijklmno'.$str_tmp; }
real 0m7.122s user 0m7.062s sys 0m0.047s
real 0m9.014s user 0m8.930s sys 0m0.066s
文字列を連結するという処理が入る為、単純な代入よりも時間がかかっています。
シングルクォーテーションとダブルクォーテーションの速度差もほぼ無い状態でした。
以下のコードでクォートを変え速度比較を行います。
$str = "abcdefghijklmno"; for ($i=0; $i<=100000000;$i++) { if ($str == "abcdefghijklmno") { } }
real 0m5.088s user 0m5.068s sys 0m0.009s
real 0m4.976s user 0m4.963s sys 0m0.009s
こちらは代入と比べ格段速度が早いようです。
シングルクォーテーションとダブルクォーテーションの速度差も無い為、どちらを採用しても問題がなさそうです
やはり、一般的に言われているようにシングルクォーテーションを使用したほうがシステムとしては僅かですが早くなると思います。
特に大規模で、多量のアクセスを裁かなければならないシステム程この効果は大きいでしょう。
ですが、文字列を連結する際は文字列の中に変数を直接記述できるダブルクォーテーションの方が可読性が高いです。
ですので、基本的にシングルクォーテーションを使用し、必要な箇所でダブルクォーテーションを使用するように心がける事で
より質の高いシステムを組むことができると思われます。