スペースインデントのファイルサイズが思いの外大きい
◆ 意外とファイルサイズの影響大きかった
私はタブインデント派ですが 仕方なくスペースにすることもあります
フォルダを見ていて ふと なんかいつもよりファイルサイズが少しだけど大きいなぁ と思って見てみるとスペースインデントのファイルでした
どれほど変わるんだろうと 手元にあった PHP ファイルで試してみました
1500, 1600 行程度でメソッド内の foreach で連想配列作っていたりとインデントが 4 つ 5 つなところもありますが 全体的に見て特別インデントが深いものではありません
コールバック地獄みたいな見た目がすごいことになってる箇所はないです
タブインデントにするとファイルサイズは
これをスペース 4 つのインデントにするとファイルサイズは
でした 20 KB ほど違います
PHP のクラスファイルなのでクラス分の 1 インデントが全体にありましたが
C# だと namespace も class もインデント必要だしデフォルトの書き方だと if や関数などの 「{」 が次の行でそこにもインデントついてるのでもっと差が出そうです
たった 20KB ですがこの場合はスペースインデントにすれば 1.4 倍にもサイズが増えてます
PHP ですからウェブページを作るとして そこそこちゃんとしたのを Framework を使って作るとしたら Framework やライブラリのコードに表示するページ用のコードなど 数十のファイルは読みこまれます
仮に 50 ファイルとして 1000 回ページが開かれると
1GB も変わってきます
たった 1 GB ですが HDD の読み込み速度ってだいたいで 早いと 100MB くらいで遅いと 50MB 程度だそうです (もちろん製品やデータの状態で色々変わります)
10 秒から 20 秒は読み込みにかかる量なんですよね
空白除去の minify って有効そうですけど JavaScript くらいでしか耳にしません
JavaScript はネットワーク通すの前提だからでしょう
コンパイルする言語だとコンパイルされた中間言語やネイティブな状態では空白なんてなくなってますし スクリプト系の言語でも基本はローカルファイルです
ただ VM の Linux で Windows のファイルを cifs マウントして使ってるなんて状態ならけっこう重要なことに思います
VM だからスペックもその辺のノート PC 以下ですし (←私の場合であってハイスペックの VM 用のマシンに VM 置いてる場合は違います) プライベートネットワーク内とはいえネット経由で毎ファイルアクセスしてますし
苦もなく というかタブのほうが優れてることばかりだと思うので 良いことばかりな上にファイルサイズも減るならタブを選びますよねー
あと ファイルサイズといえば バージョン管理ツールを使ってるときにも関係します
バージョン管理ツールでは過去のバージョンすべてを保存しています
ツールによって違いますが例えば git だと 1 行変更してもそのファイル全体のコピーを保存していたはずです
一応 gzip で圧縮してるので同じ文字の連続には強いはずですけど 微々たるものでも ちりも積もればですから
安い 100GB 未満の SSD で生きてる人には 10MB でも大きなファイルって感じられますしね
これについては実行用のコンパイルとか関係ないので生のソースコードのインデント数そのままです
また 今のファイルセットを特定のバージョンのものにするときも その時点のファイルセットをすべてコピーするわけですから小さい方が速いです
さっきの 1.4 倍をそのままあてると 10MB のリポジトリだと 14MB です
小さなことですが スペースインデントを選ぶ必要がないことがよりわかりました
フォルダを見ていて ふと なんかいつもよりファイルサイズが少しだけど大きいなぁ と思って見てみるとスペースインデントのファイルでした
どれほど変わるんだろうと 手元にあった PHP ファイルで試してみました
1500, 1600 行程度でメソッド内の foreach で連想配列作っていたりとインデントが 4 つ 5 つなところもありますが 全体的に見て特別インデントが深いものではありません
コールバック地獄みたいな見た目がすごいことになってる箇所はないです
タブインデントにするとファイルサイズは
56,330 byte
これをスペース 4 つのインデントにするとファイルサイズは
76,392 byte
でした 20 KB ほど違います
PHP のクラスファイルなのでクラス分の 1 インデントが全体にありましたが
C# だと namespace も class もインデント必要だしデフォルトの書き方だと if や関数などの 「{」 が次の行でそこにもインデントついてるのでもっと差が出そうです
たった 20KB ですがこの場合はスペースインデントにすれば 1.4 倍にもサイズが増えてます
PHP ですからウェブページを作るとして そこそこちゃんとしたのを Framework を使って作るとしたら Framework やライブラリのコードに表示するページ用のコードなど 数十のファイルは読みこまれます
仮に 50 ファイルとして 1000 回ページが開かれると
20KB * 50 files * 1000 read = 1,000,000KB
1GB も変わってきます
たった 1 GB ですが HDD の読み込み速度ってだいたいで 早いと 100MB くらいで遅いと 50MB 程度だそうです (もちろん製品やデータの状態で色々変わります)
10 秒から 20 秒は読み込みにかかる量なんですよね
空白除去の minify って有効そうですけど JavaScript くらいでしか耳にしません
JavaScript はネットワーク通すの前提だからでしょう
コンパイルする言語だとコンパイルされた中間言語やネイティブな状態では空白なんてなくなってますし スクリプト系の言語でも基本はローカルファイルです
ただ VM の Linux で Windows のファイルを cifs マウントして使ってるなんて状態ならけっこう重要なことに思います
VM だからスペックもその辺のノート PC 以下ですし (←私の場合であってハイスペックの VM 用のマシンに VM 置いてる場合は違います) プライベートネットワーク内とはいえネット経由で毎ファイルアクセスしてますし
苦もなく というかタブのほうが優れてることばかりだと思うので 良いことばかりな上にファイルサイズも減るならタブを選びますよねー
あと ファイルサイズといえば バージョン管理ツールを使ってるときにも関係します
バージョン管理ツールでは過去のバージョンすべてを保存しています
ツールによって違いますが例えば git だと 1 行変更してもそのファイル全体のコピーを保存していたはずです
一応 gzip で圧縮してるので同じ文字の連続には強いはずですけど 微々たるものでも ちりも積もればですから
安い 100GB 未満の SSD で生きてる人には 10MB でも大きなファイルって感じられますしね
これについては実行用のコンパイルとか関係ないので生のソースコードのインデント数そのままです
また 今のファイルセットを特定のバージョンのものにするときも その時点のファイルセットをすべてコピーするわけですから小さい方が速いです
さっきの 1.4 倍をそのままあてると 10MB のリポジトリだと 14MB です
小さなことですが スペースインデントを選ぶ必要がないことがよりわかりました