tanihito’s blog

デジタル・新規事業開発・健康など、興味のあることについてつらつらと書いてきます。

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は以下の処理を行っており、時間がかかっていた。
    1. CoffeeScript, SCSSのコンパイル
    2. 単一のapplication.js, application.cssに結合
    3. 圧縮(コメントや空行の除去、変数名の短縮)
    4. ブラウザの再キャッシュのため、ファイル名にダイジェストを追加
  • Springによるコマンドの高速実行
bundle i spring
spring rake about
  • Jbuilder: respond_to do |format|の代わりに、.json.jbuilderテンプレートを作成できる。
  • Poltergeist: Capybaraから使用できるドライバ(ブラウザ相当の動作をするアプリケーション)の1つで、JSも含めたテストを可能にする。
    • ヘッドレス(ウィンドウを表示しない)なので、CIサーバでも実行できる。
    • JSのエラーをスタックトレース付きで表示できる。