+ JavaScript の質問用スレッド vol.128 +at HP
+ JavaScript の質問用スレッド vol.128 + - 暇つぶし2ch23:Name_Not_Found
16/02/02 18:41:50.29 .net
前スレ>>997
開発者ツールは長時間使用に耐えられないようです…
>>998
個別実装について聞けと言うのは確かにその通りだと思いますので、
別のスレで聞いてみます
ありがとうございました

24:Name_Not_Found
16/02/02 19:33:17.69 .net
>開発者ツールは長時間使用に耐えられない
まずはいいパソコンでも買おうか

25:Name_Not_Found
16/02/02 19:35:04.07 .net
>>23
は?メモリ調べたいだけならPerformanceAPI使えばいいじゃん

26:Name_Not_Found
16/02/02 19:50:16.47 .net
>>21
そうするよ、ありがとう

27:Name_Not_Found
16/02/02 20:04:57.75 .net
俺のレベルがカスすぎるのは重々承知の上であえて聞いてみたい
null代入ってvar test = 'test';とかして使ったあとにtest=null;する、これの負荷ってことでいいんだよな
これ、gcが関係するんだろうからブラウザどころかコードにもすごく影響するんでないの?っていうかこれの負荷って気になるほどでかいの?

28:Name_Not_Found
16/02/02 20:21:24.89 .net
var test = new ArrayBuffer(1024*1024*1024)とかだとでかいだろ

29:Name_Not_Found
16/02/02 20:48:39.99 .net
>>27
function hoge () { var test = 'test'; }
hoge();
なら関数実行終了後にGCが回収するから何もしなくても問題ない
GCが回収できないのはクロージャやグローバル変数等で参照が保持される時
そういう場合は不要になったら明示的に null を代入しないとページが unload されるまでメモリを消費し続ける

30:Name_Not_Found
16/02/02 20:56:59.52 .net
原則参照が保持されてるということは不要ではないと言うことで。
不要な参照が保持され続けるようなコードをであるなら設計が悪いと言わざるを得ない。
nullを代入する云々は、明示的にしないとダメだから、ではなく、
>>28のような場合でCGにあえて任せず自分で明示的にリソース管理をする場合のみ有効。

31:Name_Not_Found
16/02/02 21:01:41.05 .net
addEventListener('load', initialize, false);
に対して
removeEventListener('unload', initialize, false);
は必要なんでしょうか?

32:Name_Not_Found
16/02/02 21:02:32.94 .net
必要ないです

33:Name_Not_Found
16/02/02 21:03:01.65 .net
アホなことを聞くな

34:Name_Not_Found
16/02/02 21:04:30.62 .net
>>32
ありがとう
removeEventListenerの使い道がよくわからないんですよね

35:Name_Not_Found
16/02/02 21:10:46.44 .net
そりゃあ途中でイベントを取る必要が無くなった時だろ。
勿論リスナ側でフラグ管理しても良いが、丸ごと外す方がスマートなときもある。

36:Name_Not_Found
16/02/02 21:15:29.11 .net
逆のタイミングで使うもんじゃないんですね
途中でイベントを取る必要がなくなっても別に放置しても都合が悪くなければそのままでいいんですか?
メモリなんかに考慮して積極的にremoveしてるのでしょうか?

37:Name_Not_Found
16/02/02 21:30:10.71 .net
設計が悪くなければ問題ない。
例えば毎秒数十万のリスナを追加するような設計なら、removeを考えないといけない。
でもそれはwindowに1つ永続的なのを設定しとけばすむかもしれない。

38:Name_Not_Found
16/02/02 21:35:55.43 .net
ありがとう
イベントターゲットでやるやつですね
テーブルでカレンダー組をして
セル1つあたりにマウスオーバーイベントとかつけたことある程度なので大丈夫そうですね
loadのときにaddしたので
それも意味もわからずunloadのときにremoveしてましたがw

39:Name_Not_Found
16/02/02 21:53:37.14 .net
>>30
> 原則参照が保持されてるということは不要ではないと言うことで。
原則そうあるべきだけど、実際には無名関数を執拗に入れ子にしてるコードも良く見かける
参照を保持しないようにコードを組む方法が分かっていないんだろうけど

40:Name_Not_Found
16/02/02 22:29:25.35 .net
Effective JavaScriptって本読んでるんだけど
その本の中でforループでよくやってしまうミスが紹介されてて
「for(var i = n; i >= 0; i--){ ... } // 最初の回を繰り返す」っていうミスがよくわからないんだけど、
これって最初の回を繰り返す?
ちゃんと変動していると思うんだけど・・・

41:Name_Not_Found
16/02/02 22:32:09.06 .net
その n は何が入ってんだよ

42:Name_Not_Found
16/02/02 22:33:17.99 .net
>>40
動くように全てのコードを抜粋しなければわからん

43:Name_Not_Found
16/02/02 22:42:33.51 .net
n回繰り返したいのにn+1回繰り返してしまうということだろう。
よくやってしまうというより、初心者が最初一度は嵌るという類のものだな。
一旦理解すれば間違えることはない。

44:Name_Not_Found
16/02/02 22:42:57.81 .net
>>41
このnの記述ないんだよね
>>42
省略してないよ
「for(var i = n; i >= 0; i--){ ... } // 最初の回を繰り返す」っていう1行だけしか書いていないんだ・・・
この行の上には
「for(var i = 0; i <= n; i++){ ... } // 1回余計に繰り返す」
「for(var i = 1; i < n; i++){ ... } // 最初の回が抜けている」
って書かれていて特に変なところもないんだよ

45:Name_Not_Found
16/02/02 22:43:47.92 .net
これだな
URLリンク(books.google.co.jp)

46:Name_Not_Found
16/02/02 22:45:57.39 .net
つまり最初(i==n-1)から最後(i==0)まで本来回したいのだから、
最初の回(i==n)が余計と言いたいのだろう。

47:Name_Not_Found
16/02/02 22:53:55.59 .net
買ってはいけない本だというのがよくわかる
いや煽りも冗談も抜きで

48:Name_Not_Found
16/02/02 22:56:54.75 .net
まあ別に初心者が買う本じゃないんだろうし、
全てを参考にする類でもなく、自分の抜けてたところに気付くためのものだろう
>>40こういう質問をする段階じゃまだ早いと言えるかもしれない

49:Name_Not_Found
16/02/02 22:57:24.72 .net
>>46
ありがとう!理解した
レスしてくれた人みんなありがとう
>>47
そうなんかな
自分の理解力の問題やと思うわ

50:Name_Not_Found
16/02/02 23:01:00.13 .net
まあGood Partsよりはいい本だろうと思うよ
出た時期がまず第一に重要だからね
最新の情報であれば少なくとも取り敢えず読んで見る価値はあると思う

51:Name_Not_Found
16/02/02 23:36:59.98 .net
>>25
見落としがあるかと思って探しましたが
一般のPerformance API群にそんな機能ないですね
Chromeのみに入ってるPerformance.memoryのことでしたら
これはプロセス別の正確な使用メモリは取れません
ですのでchromium系の場合chrome:memoryや開発者ツールのが有用になります

52:Name_Not_Found
16/02/02 23:45:24.26 .net
>>51
ちな目的は?

53:Name_Not_Found
16/02/02 23:55:45.30 .net
>>51
それは間違い。
performance.memoryはプロセス別のメモリを返す。
問題は1プロセス=1ページとは限らないということ。
とは言えopenerが存在する場合のように、ページ同士に相互通信ができる特殊な場合にしかまとめられないので、
基本的に1ページの値を返すと思って良い。

54:Name_Not_Found
16/02/03 00:06:32.49 .net
>>52
改めて問われると難しいですが
(DOMツリー含む)メモリ使用量平均の低減とstoptheworldの防止ですね

55:Name_Not_Found
16/02/03 00:08:48.41 .net
>>51
開発ツールでの測定とperformance.memoryの示す値は同じだよ
開発ツールでもプロセス内の他タブの影響も受ける
ただしそれは良いことで、タブを閉じた後、別タブからの参照のため
メモリリークが起こっているのを発見できる

56:Name_Not_Found
16/02/03 00:11:41.43 .net
>>53
そういう事ではありません
performance.memoryは親shmemとgpuレンダプロセスを含み
正確では無いと言ってます

57:Name_Not_Found
16/02/03 00:14:43.09 .net
>>55
言葉足らずでした
開発者ツールは詳細が表示されるので正確に見れます
>ただしそれは良いことで、タブを閉じた後、別タブからの参照のため
>メモリリークが起こっているのを発見できる
これは良くわかりません、どういう事ですか?
閉じたらプロファイル消えると思いますが
Chromeではなく他のブラウザの話ですか?

58:Name_Not_Found
16/02/03 00:17:02.83 .net
すみませんまた言葉足らずでした
chromeではなく(chroimum系の)他のブラウザの話ですか?

59:Name_Not_Found
16/02/03 00:19:51.05 .net
>>57
プロファイルを開いているタブ以外を閉じたときの話だよ
それと詳細とは言ってもJSヒープについてタブの区別はない
あと前提条件として開発ツールは使えないという話だったのに、
そっちの方が良いってどういうこと?

60:Name_Not_Found
16/02/03 00:28:26.84 .net
>>59
理解できました
タブを閉じてもメモリが減らない事を見るという意味ですね
>あと前提条件として開発ツールは使えないという話だったのに、
>そっちの方が良いってどういうこと?
使えないのは自分の環境の問題で、後者は飽くまで正確性の話です
それぞれ別の論点です

61:Name_Not_Found
16/02/03 00:36:27.68 .net
これ以上関係ない議論するのは迷惑になりそうなので、そろそろ去ります
レスをくれた方、ありがとうございました
XeonのPCでも買います

62:Name_Not_Found
16/02/03 00:51:05.19 .net
去る前に間違った知識を改めなさい。
正確性とか言い出したら、そもそもJSHeapと実メモリのアロケーションは関係ないし、
一部の大きなバッファはJSHeapと独立して管理されて反映されないものもある。

63:Name_Not_Found
16/02/03 01:00:59.98 .net
終わりかけてる話題に横槍いれる形で申し訳ないんだけど
現実問題として、変数にnullを代入することの負荷、とくに使用CPUと消費メモリの遷移はどうやって調べるのが正しいの
そもそもnull代入がメモリを食うのかについても気になる


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch