私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.75 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
>>49
widtって、なんて発音するの?
widtって、なんて発音するの?
JavaScriptは1ヶ月ほどしかやってないのですが、
他言語はいくつかやってきたので結構すんなり入門できました。
しかし自分の書き方だとメモリリークが激しいようで困っています。
とはいえいまさらクセを矯正するのも難しいのですが、
メモリリークを発生させないコツのようなものはないでしょうか?
すでに作成したスクリプトが膨大になっているのでどこをどうしてよいやら・・・
他言語はいくつかやってきたので結構すんなり入門できました。
しかし自分の書き方だとメモリリークが激しいようで困っています。
とはいえいまさらクセを矯正するのも難しいのですが、
メモリリークを発生させないコツのようなものはないでしょうか?
すでに作成したスクリプトが膨大になっているのでどこをどうしてよいやら・・・
スコープと参照に起因するものとか。
要素の循環参照なんかはわりと有名な話。
要素の循環参照なんかはわりと有名な話。
循環参照によるリークはとっくに問題にならないくらいに解消されてないかな?
少し前に手元の IE6 と Detector でいくつかサンプルコード試したけど、ほとんどリークは再現しなかった。
少し前に手元の IE6 と Detector でいくつかサンプルコード試したけど、ほとんどリークは再現しなかった。
>>57
ありがとうございます。
調べたところ、http://msdn.microsoft.com/ja-jp/library/bb250448%28VS.85%29.aspx
このサイトに辿りつきました。
じっくり読んでリークパターンを分析してみます。
ありがとうございます。
調べたところ、http://msdn.microsoft.com/ja-jp/library/bb250448%28VS.85%29.aspx
このサイトに辿りつきました。
じっくり読んでリークパターンを分析してみます。
>>58
レスありがとうございます。
ところでIEではDripを、FirefoxではLeak Monitorを利用してメモリリークが起きてないか調べてます。
FirefoxでおきなければIE以外の他のブラウザでは起きないと割り切ってこの2種類だけでやってるのですが、
Firefoxでは特に検出されません。
メモリリークがおきるのはIEで閲覧した場合が多いという認識でよろしいですか?
レスありがとうございます。
ところでIEではDripを、FirefoxではLeak Monitorを利用してメモリリークが起きてないか調べてます。
FirefoxでおきなければIE以外の他のブラウザでは起きないと割り切ってこの2種類だけでやってるのですが、
Firefoxでは特に検出されません。
メモリリークがおきるのはIEで閲覧した場合が多いという認識でよろしいですか?
>>60
それは何とも言い様がないと思う。
ブラウザのバージョンにもよるし、今やベンダーの対応も進んでる訳で。
自分で確認する限り、IE6 でリークするコードも IE8 では再現されないし。
できたらリークを再現するコードと IE のバージョンを教えて欲しい。
それは何とも言い様がないと思う。
ブラウザのバージョンにもよるし、今やベンダーの対応も進んでる訳で。
自分で確認する限り、IE6 でリークするコードも IE8 では再現されないし。
できたらリークを再現するコードと IE のバージョンを教えて欲しい。
>>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おしても横ばいになったままで、ページを変えたら下がっていくように作れればいいのですが・・・
ちょっと寝てました。すみません。
どのコードが該当するのかはわかりませんが、
再現できるコードがあったのでお願いします。(他の部分も原因があるかもしれませんが)
<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おしても横ばいになったままで、ページを変えたら下がっていくように作れればいいのですが・・・
windowだかdocumentだかをfor-inするとリークするというのを見たことがある気がするが
よく覚えてないし嘘かもしれない
よく覚えてないし嘘かもしれない
あれはクラッシュコードだった、忘れて
http://www.crashie.com/
http://www.crashie.com/
>scriptタグが現れた順に同期通信で読み込まれていく
>後のスクリプトがそれ以前が読み込まれる前に実行されることはない
そう
HTMLで上にあるほうから順にインラインや外部ファイルの区別無く同じスコープで実行される
前後することはないし、HTMLレンダリングも止まる
だからHTML上部で指定した外部サーバのjsのレスポンスが悪いと
そのページ自体の表示も酷く遅くなる
>後のスクリプトがそれ以前が読み込まれる前に実行されることはない
そう
HTMLで上にあるほうから順にインラインや外部ファイルの区別無く同じスコープで実行される
前後することはないし、HTMLレンダリングも止まる
だからHTML上部で指定した外部サーバのjsのレスポンスが悪いと
そのページ自体の表示も酷く遅くなる
下のスクリプトでは置換ができませんでした。
何が間違ってるんでしょうか?
「.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>
何が間違ってるんでしょうか?
「.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>
alert(document.body.innerHTML);
してみりゃわかるんじゃね?
してみりゃわかるんじゃね?
>>69
<span class="hoge"> のように " が自動で追加されていましたので
.replace(/<span class\"=hoge\">(.*?)<\/span>/g, "$1 + something")
に書き換えたのですが、やはり置換してくれませんでした…。
<span class="hoge"> のように " が自動で追加されていましたので
.replace(/<span class\"=hoge\">(.*?)<\/span>/g, "$1 + something")
に書き換えたのですが、やはり置換してくれませんでした…。
これでいけたよ
/<span class="hoge">(.*?)<\/span>/g
/<span class="hoge">(.*?)<\/span>/g
>>72
ありがとうございます。うまくうごきました。
\ を とって気づいたのですが、 " の位置がずれてたのが動かない原因でした。
× <span class\"=hoge\">
○ <span class=\"hoge\">
ありがとうございます。うまくうごきました。
\ を とって気づいたのですが、 " の位置がずれてたのが動かない原因でした。
× <span class\"=hoge\">
○ <span class=\"hoge\">
var x = {};
var y = {};
x === y; // false
var x = {};
var y = x;
var z = y;
y === z; // true
両方ともtrueになると思ったのですがなぜ上のだけfalseになるのですか
var y = {};
x === y; // false
var x = {};
var y = x;
var z = y;
y === z; // true
両方ともtrueになると思ったのですがなぜ上のだけfalseになるのですか
JavaScriptのObjectは参照だからな
上のがtrueになると
x.hoge = fuga;
ってしたときにyのhogeにもfugaが代入されることになる
下のは同じ中身(参照)だからtrueになる
上のがtrueになると
x.hoge = fuga;
ってしたときにyのhogeにもfugaが代入されることになる
下のは同じ中身(参照)だからtrueになる
Objectは参照だとは知らんかった、勉強になったw
ということは、x.hoge = "";と解放したつもりになっていても、
どこか他のところで参照を続けていたらメモリに残り続けるの?
ということは、x.hoge = "";と解放したつもりになっていても、
どこか他のところで参照を続けていたらメモリに残り続けるの?
そういうこと
まあDOMが絡まない循環参照ぐらいなら、参照されていてもちゃんとGCされるけど
意図せずクロージャでローカル変数が残る場合もある
まあDOMが絡まない循環参照ぐらいなら、参照されていてもちゃんとGCされるけど
意図せずクロージャでローカル変数が残る場合もある
> x.hoge = "";と解放したつもり
これは…
delete か、せめて undefined なり null なりにしてくださいよ…
そもそも、ページ遷移すればごっそりコンテキスト変わるんだから、
ほとんどのJavaScriptでは細かい参照とか気にしても意味がない
これは…
delete か、せめて undefined なり null なりにしてくださいよ…
そもそも、ページ遷移すればごっそりコンテキスト変わるんだから、
ほとんどのJavaScriptでは細かい参照とか気にしても意味がない
>>62どなたか分かりませんか?
>>88
ありがとうございます。
メモリリークしてるというのは思い違いなんでしょうか?
ずっとClickを押すたびに使用メモリが上がっていきブラウザ閉じるまで解放される様子がないので、
それがメモリリークだと思っていたのですが。
これからは+=をpushに変えてみます。
ありがとうございます。
メモリリークしてるというのは思い違いなんでしょうか?
ずっとClickを押すたびに使用メモリが上がっていきブラウザ閉じるまで解放される様子がないので、
それがメモリリークだと思っていたのですが。
これからは+=をpushに変えてみます。
>>90
下に書いてあるPower by見た?
下に書いてあるPower by見た?
ダブルクォートを alert で呼べずに困っています。
onclick="alert('\"')"
バックスラッシュではエスケープしてくれませんでした。
どう記述すれば " を表示できますか?
onclick="alert('\"')"
バックスラッシュではエスケープしてくれませんでした。
どう記述すれば " を表示できますか?
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : ○類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.95 + (1001) - [97%] - 2012/1/17 4:16
- + JavaScript の質問用スレッド vol.74 + (1001) - [97%] - 2009/12/1 6:08 ○
- + JavaScript の質問用スレッド vol.76 + (1001) - [97%] - 2010/3/10 4:02
- + JavaScript の質問用スレッド vol.77 + (1001) - [97%] - 2010/5/8 19:06
- + JavaScript の質問用スレッド vol.78 + (1001) - [97%] - 2010/6/25 3:53
- + JavaScript の質問用スレッド vol.79 + (1001) - [97%] - 2010/9/11 6:50
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.105 + (1001) - [95%] - 2013/5/20 4:45
- + JavaScript の質問用スレッド vol.115 + (1001) - [95%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.125 + (1001) - [95%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.135 + (1002) - [95%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.96 + (1001) - [95%] - 2012/1/28 23:01
- + JavaScript の質問用スレッド vol.93 + (1001) - [95%] - 2012/1/1 4:46
- + JavaScript の質問用スレッド vol.94 + (1001) - [95%] - 2012/1/8 15:46
- + JavaScript の質問用スレッド vol.99 + (1001) - [95%] - 2012/5/7 4:32
- + JavaScript の質問用スレッド vol.97 + (1001) - [95%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.98 + (1001) - [95%] - 2012/4/9 14:46
トップメニューへ / →のくす牧場書庫について