野ログはノロキュアMaxHeart
2008-04-18
_ document.writeをバッファリングするJavaScript
JavaScriptでブログパーツとか広告とか埋め込んでるとやたらレンダリングが重くてうざーくなる。
なんとかしたいなーと思ってると、昔malaさんがlazy_writer っての作っていたのを思い出した。
これこれ、まさにこういうの使いたかったんだよなぁと思って使ってみてたんだけど、
よく出来てて、素晴らしいんだけど、もう少しちゃちなのでいいような気がしてきたので書いてみた。
lazy_writerの改造から始めたのでlazy_writerになってるけど、既にlazy_writerじゃない…
後で名前くらい変える…
実際名前つけるならdocument.bufferみたいな感じ?
/*
document.lazy_writer
BSD license.
*/
document.lazy_writer =(function(){
var original_document_write = document.write;
document._write = original_document_write;
document.write = function(str){
if(document.lazy_writer.condition == false){
return document._write(str)
}else{
return document.lazy_writer.buffer += str;
}
}
return {
buffer : "",
condition : false,
start : function(){
document.lazy_writer.condition = true;
},
stop : function(){
document.lazy_writer.condition = false;
},
get : function(){
var buf = document.lazy_writer.buffer;
document.lazy_writer.buffer = "";
return buf;
}
}
})();
使い方
document.lazy_writer.start();
でdocument.writeが出力されなくなる。
document.lazy_writer.stop();
で通常のdocument.writeに戻る
document.lazy_writer.get();
でstart中にdocument.writeで出力した文字列を得る。
HTMLの一番下とかで
<script type="text/javascript">
document.lazy_writer.start();
</script>
ここにブログパーツとかJSの奴入れる。
<script type="text/javascript">
document.getElementById('blogparts').innerHTML = document.lazy_writer.get();
</script>
上の繰り返し。
最後は忘れずに止める。
<script type="text/javascript">
document.lazy_writer.stop()
</script>
稚拙なことよりも何よりもmalaさんのlazy_writerから名前を変更していないところが一番酷い。
狙い
このスクリプト自体はちゃちすぎてアレだけど、求めてる人がいることがわかれば、きっと誰かがエレガントなのを作ってくれる!!
[ツッコミを入れる]
[]

