2008/08/31
RailsでJavascriptのソースが現れる位置をHTMLの最後(</body>の直前)へ持って行く
HTML内へJavascriptを書くときの位置として、体感読み込み時間を減らす目的で推奨されているのは、HTMLの最後(</body>の直前)へ書くことのようです。静的なHTMLであれば比較的やりやすいのですが、ヘッダやフッタが複数のテンプレートファイルに分かれていることが普通の動的HTMLだと、利用しているテンプレートエンジンやフレームワークによっては難しい場合があります。
Railsでは、capture helperを使えば簡単に実現できたのでメモ書きしておきます。
レイアウトテンプレート
<html>
<body>
<%= @content_for_layout %>
<!-- 共通のJSファイルを読み込む -->
<script type="text/javascript" src="http://other.host/a.js"></script>
<script type="text/javascript" src="http://other.host/b.js"></script>
<% if @content_for_javascript %>
<%= @content_for_javascript %>
<% end %>
</body>
</html>
Action側のテンプレート
<% @content_for_javascript = capture do %>
<script type="text/javascript">
alert("Page specific javascript is executed");
</script>
<% end %>
<div id="main">
ページの内容
</div>
出力内容
<html>
<body>
<div id="main">
ページの内容
</div>
<!-- 共通のJSファイルを読み込む -->
<script type="text/javascript" src="http://other.host/a.js"></script>
<script type="text/javascript" src="http://other.host/b.js"></script>
<script type="text/javascript">
alert("Page specific javascript is executed");
</script>
</body>
</html>
こうすることで、共通のJavascriptソースはlayoutテンプレートへ、そのActionだけで使われるJavascriptソースはaction側のテンプレートへと分けて書き込みながら、最終的なHTMLとしてはすべてのJavascriptソースを</body>の直前へ集約させることができました。
ラベル: Javascript, rails
2006/09/19
ActionMailerと格闘
ActionMailerに苦しめられた3日間だった。。。
http://wota.jp/ac/?date=20050731#p05
を参考に、メールを受信してから添付された画像を取り出すというのを作ってみてた。
この辺りで、base64なんかを勝手にほどいて、さらに文字コードの変換を勝手に行っているおかげで、画像データまでutf-8に変換されてたぽい。
実際には、1.1.2でほげってるんだけど、1.1.6でも直ってないぽい。
おかげで、変換に失敗した1バイトの文字列だけが返ってきて謎が深まりまくってた。
TMail::Mail.body_port.string か、TMail::Mail.quoted_body で生のまま直接取って返すだけでいいのにと思って、lib/action_mailer/vendor/tmail/attachments.rb の該当行を否定する感じで
に書き換えると、すんなりうごいた。
他の人たちは、どうやってるんだ??他の解決策があるのか??
lib/action_mailer/vendor/tmail/quoting.rbが原因ぽいが、オーバースペックというか面倒見すぎな気がする。
http://wota.jp/ac/?date=20050731#p05
を参考に、メールを受信してから添付された画像を取り出すというのを作ってみてた。
この辺りで、base64なんかを勝手にほどいて、さらに文字コードの変換を勝手に行っているおかげで、画像データまでutf-8に変換されてたぽい。
実際には、1.1.2でほげってるんだけど、1.1.6でも直ってないぽい。
おかげで、変換に失敗した1バイトの文字列だけが返ってきて謎が深まりまくってた。
TMail::Mail.body_port.string か、TMail::Mail.quoted_body で生のまま直接取って返すだけでいいのにと思って、lib/action_mailer/vendor/tmail/attachments.rb の該当行を否定する感じで
content = part.body_port.string # unquoted automatically by TMail#body
に書き換えると、すんなりうごいた。
他の人たちは、どうやってるんだ??他の解決策があるのか??
lib/action_mailer/vendor/tmail/quoting.rbが原因ぽいが、オーバースペックというか面倒見すぎな気がする。
ラベル: ActionMailer, rails
