WEB+DB PRESS vol.70, 72, 73を読み返した
積ん読していたWeb+DBをやっと読み終わりました。面白かった記事をまとめておきます。
Javaでナノチューニング! (vol.70)
ループ時の繰り返し判定を避ける
for (int i=0; i<list.size()-1; i++) // NG: 1ループするたびにlist.size()が実行される for (int i=0, size=list.size()-1; i<size; i++) // OK
定数はstatic finalと記述する
static int MAX_SIZE = 5; // NG static final int MAX_SIZ = 5 // OK: コンパイル時に定数値がインライン展開される
配列のディープコピーはNativeメソッドを使用する
for(int i=0; j=list1.length; i<j; i++) { list2[i] = list1[i] } // NG System.arraycopy(list1, 0, list2, 0, MAX_SIZE-1) // OK
あなたの知らないActiveSupport (vol.70)
Railsのユーティリティライブラリ。詳細はActive Support Core Extensionsを参照。
require 'active_support/all' # require 'active_support'だけでは必要なライブラリが入らない。 4.hour.ago #=> 2013-08-31 08:02:14 +0900
Rack再入門 (vol.72)
- RackとはサーバとWebフレームワークを繋ぐための仕様。サーバが使うHTMLをRubyが使うデータ構造(ハッシュ、配列など)に変換してくれる。
- RailsのActionDispatch::RequestがRack::Requestを継承するなど、Rackについて知っておくことはWeb開発にも役立つ。
- PythonでいうWSGI。
require 'rack' require 'pp' class SimpleApp def call(env) status = 200 header = {'Content-Type' => 'text/plan'} body = env.pretty_inspect [status, header, [body]] end end run SimpleApp.new
vim config.ru rackup curl "http://localhost:9292?hello=rack"
Chrome Developer Toolsを使った実践デバッグ術 (vol.72)
- コード中にdebuggerと書くと、そこでブレークさせることができる。
- $0: Elementsパネルで最後に選択した要素を返す
- DOM Breakpoints: Elementsパネル右クリックで設定
- XHR Breakpoints: Sourceパネル右ペインで設定
詳細Rails4 (vol.73)
ActiveRecordは使っていないので、それ以外で気になったところ。一部Gemの紹介も込み。
- app/{modules, controllers}/concernsディレクトリの追加
- Asset Pipelineの高速化。Asset Pipelineは以下の処理を行っており、時間がかかっていた。
- CoffeeScript, SCSSのコンパイル
- 単一のapplication.js, application.cssに結合
- 圧縮(コメントや空行の除去、変数名の短縮)
- ブラウザの再キャッシュのため、ファイル名にダイジェストを追加
- Springによるコマンドの高速実行
bundle i spring spring rake about