最近知ったんだけど、Sass を C++ で実装している libsass と SassC っていうプロジェクトがあるんですね。作者はオリジナルの Sass と同じ人?
なんで Ruby じゃなくてわざわざ C++ かというと、sass ファイルが肥大化してきたり、 Compass なんかのフレームワークをゴリゴリ使っているとコンパイルに結構な時間がかかってくる問題があって、まぁ遅いんです。CSS を書くために良い CPU 積んだマシンとか買いたくないですし。そこで libsass 書いてますって話になります。
Sassc and Bourbon: it works. - Damian Le Nouaille
手元に良いサンプルがないのでここに書かれているのを参考にしますが、
I have a project (more than 5000 lines of sass) that was using Compass but it became very slow at compilation: 6 secs. I decided to stop using Compass and just go with Bourbon. This was the first big win. From 6 secs to 2 secs.
まず、Compass を使って書かれた 5000 行ぐらいの sass を Bourbon を使って書き直したらコンパイル時間が6秒から2秒になった。
Compass が大きいのか Bourbon が小さいのか、まあたぶん前者かなと思います。
そして本題の sassc
を使うと、
$ time sass src/css/core/main.scss # 1,51s user 0,28s system 81% cpu 2,188 total
$ time sassc src/css/core/main.scss # 0,07s user 0,02s system 34% cpu 0,244 total
Near 10x faster for my project: from 2200 ms to 250 ms guys. Wow.
この例だと、だいたい10倍ぐらい速くなりました。
まだ簡単に手元で使ってみただけで、おそらくユーザーもまだまだ少ないと思うので変なバグ踏んだらハマりそう。
ただしこれ、gem で入れた sass
コマンドが import できる path とかは全く見てくれないので、Sass 用のライブラリを使う場合は、
sassc -I vendor/bundle/ruby/1.9.1/gems/compass-0.12.2/frameworks/compass/stylesheets/ -t compressed assets/scss/app.scss
みたいに sassc
コマンドのオプションに path を渡してやらないと使えません。ついでに、こっちは libsass の問題?な気がしますが、
@mixin filter-gradient($start-color, $end-color, $orientation: vertical) {
@include has-layout;
$gradient-type: if($orientation == vertical, 0, 1);
@if $legacy-support-for-ie6 or $legacy-support-for-ie7 or $legacy-support-for-ie8 {
filter: progid:DXImageTransform.Microsoft.gradient(gradientType=#{$gradient-type},
startColorstr='#{ie-hex-str($start-color)}', endColorstr='#{ie-hex-str($end-color)}');
}
}
の、 filter: progid:DXImageTransform.Microsoft.gradient
みたいな IE 用の特殊な書き方があると
compass/stylesheets/compass/css3/_images.scss:87: error: error reading values after progid
って言われて落ちます。ここでも邪魔してくれる IE。この分岐文の中に入ってこなければ大丈夫かと思って $legacy-support-for-ie: false;
にしてみてもダメだったので、現状 Compass と一緒に使う事はできなさそうです。Bourbon は Bourbon does not intend to support IE filters.
と詠ってるので大丈夫なんでしょう。
さっきの記事のコメント欄に Bourbon の人が、 SassC 用の対応をしたバージョンをリリースしたよって書いてあって、Bourbon は結構フットワーク軽そうな感じがしてます。あんまり人気ないですけど。
このまま Sass と SassC の2つに別れるんじゃなく、上手に本体に取り込まれるといいなーと思います。
参考