OSDE1.0.0でキャッシュを回避する一番いい方法は?
OpenSocial Develepment Environment(OSDE)での開発時、外部化したjsを修正した際にその修正を即座に反映してもらえると、開発が楽ちんです。
しかしキャッシュが効いてて変更が反映されない場合があります。外部ファイルをどう指定するかによって、修正の反映に必要なステップ数が変わるので、どの方法がベストか検討しました。
方法1)相対パスで指定した場合
<script type="text/javascript" src="./cachetest/hoge.js"></script>
修正の反映には1step必要
1)Shindigの再起動
本番環境へのデプロイ時
絶対パスに書き換える必要がある
参考:mixiアプリに関する仕様変更のお知らせ << mixi Developer Center (ミクシィ デベロッパーセンター)
方法2)絶対パスで指定した場合
<script type="text/javascript" src="http://example.com/cachetest/hoge.js"></script>
修正の反映には2step必要
1)example.comへのjsアップロード
2)Shindigの再起動
本番環境へのデプロイ時
修正不要
方法3)document.writeで絶対パス指定(本番環境)した場合
書籍「mixiアプリをつくろう!」で紹介されていた方法です。
<script type="text/javascript"> document.write('<script type="text/javascript" src="http://example.com/cachetest/hoge.js"></sc' + 'ript>'); </script>
修正の反映には1step必要
1)example.comへのjsアップロード
本番環境へのデプロイ時
修正せずとも動作する。ただし修正が必要※
(※書籍「mixiアプリをつくろう!」によると、「コンテナ側に負荷をかける行為としてアプリが停止される場合がある」と記載されている)
方法4)document.writeで相対パス指定した場合
<script type="text/javascript"> document.write('<script type="text/javascript" src="./cachetest/hoge.js"></sc' + 'ript>'); </script>
なぜか動作しない。
方法5)document.writeで絶対パス指定(localhost)した場合
<script type="text/javascript"> document.write('<script type="text/javascript" src="http://localhost:8123/projectname/cachetest/hoge.js"></sc' + 'ript>'); </script>
修正の反映は0step
修正即反映
本番環境へのデプロイ時
要修正
方法6)document.writeで絶対パス指定(document.location.hostで切り替え)した場合
<script type="text/javascript"> document.write('<script type="text/javascript" src="http://' + appHost + '/projectname/cachetest/hoge.js"></sc' + 'ript>'); </script>
修正の反映は0step
修正即反映
本番環境へのデプロイ時
修正せずとも動作する。ただし修正が必要※(方法3と同じ理由)
結論
というわけで、方法5か方法6で開発し、デプロイ前にdocument.writeをscriptタグ指定に修正するのが良さそうです。
※2010/09/19 修正
方法6の記述が誤っていた(appHostではなくdocument.location.hostを指定していた)ので修正しました。appHostの値は、document.location.hostの値に応じて切り替わるように自前で実装します。