のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,432,532人
昨日:no data人
今日:
最近の注目
人気の最安値情報

元スレ+ JavaScript の質問用スレッド vol.75 +

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

51 = :

>>49
widtって、なんて発音するの?

52 = :

揚げ足取りは楽しいかい?

53 = :

揚げ足というか、指摘の仕方の問題だと思うが...
これくらい許容してやれ

54 = :

というかつーかその両方

55 = :

マジキチ

56 = :

JavaScriptは1ヶ月ほどしかやってないのですが、
他言語はいくつかやってきたので結構すんなり入門できました。
しかし自分の書き方だとメモリリークが激しいようで困っています。
とはいえいまさらクセを矯正するのも難しいのですが、
メモリリークを発生させないコツのようなものはないでしょうか?
すでに作成したスクリプトが膨大になっているのでどこをどうしてよいやら・・・

57 :

スコープと参照に起因するものとか。
要素の循環参照なんかはわりと有名な話。

58 = :

循環参照によるリークはとっくに問題にならないくらいに解消されてないかな?
少し前に手元の IE6 と Detector でいくつかサンプルコード試したけど、ほとんどリークは再現しなかった。

60 = :

>>58
レスありがとうございます。

ところでIEではDripを、FirefoxではLeak Monitorを利用してメモリリークが起きてないか調べてます。
FirefoxでおきなければIE以外の他のブラウザでは起きないと割り切ってこの2種類だけでやってるのですが、
Firefoxでは特に検出されません。
メモリリークがおきるのはIEで閲覧した場合が多いという認識でよろしいですか?

61 = :

>>60
それは何とも言い様がないと思う。
ブラウザのバージョンにもよるし、今やベンダーの対応も進んでる訳で。
自分で確認する限り、IE6 でリークするコードも IE8 では再現されないし。


できたらリークを再現するコードと IE のバージョンを教えて欲しい。

62 = :

>>61
ちょっと寝てました。すみません。
どのコードが該当するのかはわかりませんが、
再現できるコードがあったのでお願いします。(他の部分も原因があるかもしれませんが)
<script>
function test() {
var obj = document.getElementById("hoge");
var html = "";
if (!obj.innerHTML) {
html += "<h1>Window</h1>";
for (var i in window) {
html += i + "<br>";
}
html += "<h1>Document</h1>";
for (var i in document) {
html += i + "<br>";
}
html += "<h1>Navigator</h1>";
for(var i in navigator) {
html += i + "<br>";
}
}
obj.innerHTML = html;
}
</script>
<button onclick="test()">Click</button>
<div id="hoge"></div>
Clickを押すごとに表示されたり消えたりしますが、そのたびにメモリの消費があがり続けます。ページを変えても消費したままです。
IEのバージョンは7.0です。8.0にしてますが、Dripだとどうも7.0のエンジンを使うみたいで。
http://outofhanwell.com/ieleak/index.php?title=Main_Page#Download
右下のグラフが何度Clickおしても横ばいになったままで、ページを変えたら下がっていくように作れればいいのですが・・・

64 = :

あれはクラッシュコードだった、忘れて
http://www.crashie.com/

68 = :

下のスクリプトでは置換ができませんでした。
何が間違ってるんでしょうか?

「.replace(/(hoge)/g, "$1 + something")」は置換できることと
「.replace(/\<span class\=hoge\>(.*?)\<\/span\>/g, "$1 + something")」でも置換できないことの確認はしました。

<head>
<script type="text/javascript">
function addsomething() {
document.body.innerHTML = document.body.innerHTML.replace(/<span class=hoge>(.*?)<\/span>/g, "$1 + something");
}
</script>
</head>
<body onload=addsomething()>
<span class=hoge>hoge</span>
</body>

69 = :

alert(document.body.innerHTML);
してみりゃわかるんじゃね?

74 = :

prototype.jsの読み方教えて
ぷろとたいぷてんじぇいえす?

77 = :

var x = {};
var y = {};
x === y; // false

var x = {};
var y = x;
var z = y;
y === z; // true

両方ともtrueになると思ったのですがなぜ上のだけfalseになるのですか

78 = :

えっ?

79 = :

JavaScriptのObjectは参照だからな
上のがtrueになると
x.hoge = fuga;
ってしたときにyのhogeにもfugaが代入されることになる
下のは同じ中身(参照)だからtrueになる

80 = :

あー参照か確かにそういえばそうだった

83 = :

そういうこと
まあDOMが絡まない循環参照ぐらいなら、参照されていてもちゃんとGCされるけど
意図せずクロージャでローカル変数が残る場合もある

84 = :

そっか、クロージャで残る可能性もあるか・・・
気を付けよう・・・

85 :

>>83
ああああ!
そのせいで金曜の仕事が伸びて、土曜は潰れたようわああん!


ちゃんと設計して、コーディングせにゃいかんね…

86 = :

> x.hoge = "";と解放したつもり
これは…
delete か、せめて undefined なり null なりにしてくださいよ…

そもそも、ページ遷移すればごっそりコンテキスト変わるんだから、
ほとんどのJavaScriptでは細かい参照とか気にしても意味がない

87 = :

>>62どなたか分かりませんか?

88 = :

>>62
WinXPのIE6とIE8で試したけど、再現しないのでさっぱり。

あえて言えば、IEの+=は重いから、配列にpushしたほうが良いよとか

89 = :

>>88
ありがとうございます。
メモリリークしてるというのは思い違いなんでしょうか?
ずっとClickを押すたびに使用メモリが上がっていきブラウザ閉じるまで解放される様子がないので、
それがメモリリークだと思っていたのですが。
これからは+=をpushに変えてみます。

91 = :

いやcanvasだし

93 = :

もう一度ご覧頂こう

95 = :

>>89
その現象はまさしくメモリリークだけど、
そのコードでそこまで盛大なメモリリークが起きるとは考えにくいな。
環境依存な気がするので、別の環境や別の方法で調べたりしてみてほしい

96 = :

変なツールバーを飼ってるんだろう

98 = :

それhtmlの解釈の時点で"alert('\"が属性値だと判断されてるだろ

99 = :

"
"


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について