私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.118 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
> JavaScriptにはGCがあり
ほとんどの言語にGCがあるんだが?
何言ってるんだろうねこいつw
ほとんどの言語にGCがあるんだが?
何言ってるんだろうねこいつw
GCのタイミングは必ずしも定期的に行われる物では無く、実装による
よってGCのせいにするのは馬鹿
よってGCのせいにするのは馬鹿
あほかこいつw
俺がマシンを変えてもユーザーのマシンは変わらねーんだよ
何の解決にもなってない
俺がマシンを変えてもユーザーのマシンは変わらねーんだよ
何の解決にもなってない
http://buildnewgames.com/garbage-collector-friendly-code/
これを読んでいて、
--enable-memory-info
スイッチを付けて取得できるという属性を、スイッチを付けていないchromeで取得してみたら、
なんと取得できました\(^o^)/
console.log(window.performance.memory.totalJSHeapSize);
console.log(window.performance.memory.usedJSHeapSize);
今のバージョンではデフォルトでオンになってるみたいです
こういう隠し機能は他にあるんですかね?
これを読んでいて、
--enable-memory-info
スイッチを付けて取得できるという属性を、スイッチを付けていないchromeで取得してみたら、
なんと取得できました\(^o^)/
console.log(window.performance.memory.totalJSHeapSize);
console.log(window.performance.memory.usedJSHeapSize);
今のバージョンではデフォルトでオンになってるみたいです
こういう隠し機能は他にあるんですかね?
http://developer.mozilla.org/en-US/docs/Web/API/Performance.now()
performanceオブジェクトはchromeに限らないようです?
こんなのはじめて知ったよ
performanceオブジェクトはchromeに限らないようです?
こんなのはじめて知ったよ
http://www.html5rocks.com/ja/tutorials/memory/effectivemanagement/
新世代のガベージコレクションの実行時間は、10 ミリ秒のオーダーです。
直感的に理解できると思いますが、アプリケーションがメモリアロケートを繰り返すと、
いずれ 領域が枯渇してGCが発生します。特にゲーム開発者は注意してください。
(60 fps を実現するために) 16ミリ秒のフレーム時間を保証するには、
あなたのアプリケーションは一回たりともメモリをアロケートすることはできません。
なぜなら、一回の新世代ガベージコレクションでフレーム時間のほとんどを使ってしまうからです。
旧領域のメモリ領域でガベージコレクションが実行されると、
必ず新世代のGCも実行されます。
ひとたび処理が走ると、アプリケーションは秒のオーダーで実行が止まります。
--
速い方のGCですら10msオーダー
遅い方は1sオーダー
レスポンシビリティが重要なアプリではGCに気を遣うのは当然のようですね
新世代のガベージコレクションの実行時間は、10 ミリ秒のオーダーです。
直感的に理解できると思いますが、アプリケーションがメモリアロケートを繰り返すと、
いずれ 領域が枯渇してGCが発生します。特にゲーム開発者は注意してください。
(60 fps を実現するために) 16ミリ秒のフレーム時間を保証するには、
あなたのアプリケーションは一回たりともメモリをアロケートすることはできません。
なぜなら、一回の新世代ガベージコレクションでフレーム時間のほとんどを使ってしまうからです。
旧領域のメモリ領域でガベージコレクションが実行されると、
必ず新世代のGCも実行されます。
ひとたび処理が走ると、アプリケーションは秒のオーダーで実行が止まります。
--
速い方のGCですら10msオーダー
遅い方は1sオーダー
レスポンシビリティが重要なアプリではGCに気を遣うのは当然のようですね
今まで要素にどんなイベントが登録されてるのかを
jsのソースから検索してたんだけど
例えば
(1)要素のidがhoge (2)jsのソースから”hoge”を検索 (3)clickとかの記述がみつかる
みたいな感じ
もっとコンソールとかで要素クリックしたらハンドラ名とか見えたりする効率いい方法をおしえてください
jsのソースから検索してたんだけど
例えば
(1)要素のidがhoge (2)jsのソースから”hoge”を検索 (3)clickとかの記述がみつかる
みたいな感じ
もっとコンソールとかで要素クリックしたらハンドラ名とか見えたりする効率いい方法をおしえてください
今まで処理の重さとして感じていたことの多くがGCだったんじゃないかと思えてきた
ほとんどの処理に比べてGCはでかすぎる。
10msオーダーの処理なんて滅多にないし。
となると速度的なベンチマークではなく
メモリアロケーションを基準にコードを決めなくてはいけなくてはいけないのではないだろうか
関数呼び出しはパフォーマンスが悪いと言われるが、
アロケーション基準ではどうか?
ローカル変数を使うよりも関数を呼び出す方がいいこともあるのではないでしょうか
ほとんどの処理に比べてGCはでかすぎる。
10msオーダーの処理なんて滅多にないし。
となると速度的なベンチマークではなく
メモリアロケーションを基準にコードを決めなくてはいけなくてはいけないのではないだろうか
関数呼び出しはパフォーマンスが悪いと言われるが、
アロケーション基準ではどうか?
ローカル変数を使うよりも関数を呼び出す方がいいこともあるのではないでしょうか
関数の引数にオブジェクトを書くことがあります
css({hoge:1,moge:2})
みたいなやつです
これを
css(['hoge',1,'moge',2])
のように配列で渡すことが出来たら使用メモリが減っていいんじゃないでしょうか?
css({hoge:1,moge:2})
みたいなやつです
これを
css(['hoge',1,'moge',2])
のように配列で渡すことが出来たら使用メモリが減っていいんじゃないでしょうか?
>>115
普通にnewしてるってw
普通にnewしてるってw
>>116
勿論ロード中とかはnewするがループ中はなるべくすべきじゃない
ちなみにネイティブアプリは自分で解放をコントロール出来るから普通にnewもしてるだろう
それでも限界までメモリを使う場合は問題になることもあるだろうが
勿論ロード中とかはnewするがループ中はなるべくすべきじゃない
ちなみにネイティブアプリは自分で解放をコントロール出来るから普通にnewもしてるだろう
それでも限界までメモリを使う場合は問題になることもあるだろうが
jQueryのプラグイン使ってドヤ顔してJavaScript使えた気になってるのも嫌なんで、
jQueryのプラグインでよさげなやつを車輪の再発明でエミュレートしたろうと思ってます。
よろしくお願いします。
jQueryのプラグインでよさげなやつを車輪の再発明でエミュレートしたろうと思ってます。
よろしくお願いします。
何度も使うarray.lengthをローカル変数に代入するというよくある高速化テクニックも
メモリアロケートの観点からは、
体感できないほどのコストのために余計なローカル変数を作ってゴミを増やしている
と言えるかもしれませんね?
メモリアロケートの観点からは、
体感できないほどのコストのために余計なローカル変数を作ってゴミを増やしている
と言えるかもしれませんね?
>>123
jQueryでもオブジェクトを生成する必要はないですけど
jQueryでもオブジェクトを生成する必要はないですけど
数値型すらオブジェクトなんだから何やったってオブジェクト生成されることになるんじゃないのか
オブジェクトの参照も使い終わるとガベージになるのでしょうか?
容量はかなり小さそうですが
容量はかなり小さそうですが
>>112
lodashを使えばなんとかなるが現状その方法しかない
lodashを使えばなんとかなるが現状その方法しかない
ガベージを増やさないためにはいかにオブジェクトを生成しないかが鍵になる
>>109を参照せよ
>>109を参照せよ
まず、ガベージコレクションが増えても
パフォーマンスに影響がないんだ。
反論は、何%と具体的にいうこと。
できなければ、深夜に裸で町を猛ダッシュすること。
パフォーマンスに影響がないんだ。
反論は、何%と具体的にいうこと。
できなければ、深夜に裸で町を猛ダッシュすること。
ガベージコレクションを減らそうとする努力によって、
開発工数が500%増加した。納期に間に合わない!(笑)
開発工数が500%増加した。納期に間に合わない!(笑)
引数に関数を渡す関数言語的な方法って
ローカル変数が生成されては廃棄されていくから
ガベージがものすごい速度で溜まっていくのでは?
ローカル変数が生成されては廃棄されていくから
ガベージがものすごい速度で溜まっていくのでは?
具体的な数値がでてるのが反論だとすると
反論はまだ出てないな。
もう5分も待ったのに。
反論はまだ出てないな。
もう5分も待ったのに。
もしくは、裸で街を猛ダッシュした証拠でもいいんだが。
約束はちゃんと守ろう。
約束はちゃんと守ろう。
具体的な数値が>>111に書いてあるので参照せよ
http://uhyohyo.net/javascript/8_3.html
このサイトの一番最後にあるサンプルを参考にして選択範囲にルビをふるプログラムを書いたのですが、選択した時だけでなくクリックするだけでマウスのある場所にルビをふってしまいます。
サンプルではちゃんと選択時だけ起動しますし、サンプルにあるそれ用の対策(ifのところ)はちゃんと写してるのですが…。
document.addEventListener('mouseup',function(ev){
var selection = 0; // ここが初期化されてないのか?と思って何となく0を入れてみたが効果なし
selection = getSelection();
if(selection.rangeCount > 0){
var range = selection.getRangeAt(0);
var newruby = document.createElement('ruby');
var newrt = document.createElement('rt');
var newrubytext = "test" ; //とりあえず「test」固定
var newrubytextnode = document.createTextNode(newrubytext);
var df = range.extractContents();
newrt.appendChild(newrubytextnode);
newruby.appendChild(df);
newruby.appendChild(newrt);
range.insertNode(newruby);
}
},false);
このサイトの一番最後にあるサンプルを参考にして選択範囲にルビをふるプログラムを書いたのですが、選択した時だけでなくクリックするだけでマウスのある場所にルビをふってしまいます。
サンプルではちゃんと選択時だけ起動しますし、サンプルにあるそれ用の対策(ifのところ)はちゃんと写してるのですが…。
document.addEventListener('mouseup',function(ev){
var selection = 0; // ここが初期化されてないのか?と思って何となく0を入れてみたが効果なし
selection = getSelection();
if(selection.rangeCount > 0){
var range = selection.getRangeAt(0);
var newruby = document.createElement('ruby');
var newrt = document.createElement('rt');
var newrubytext = "test" ; //とりあえず「test」固定
var newrubytextnode = document.createTextNode(newrubytext);
var df = range.extractContents();
newrt.appendChild(newrubytextnode);
newruby.appendChild(df);
newruby.appendChild(newrt);
range.insertNode(newruby);
}
},false);
現在のCPUは速いので相当複雑な処理をさせても10msもかからない
しかしGCは10msオーダー、1sオーダーという爆弾を平気で落として行くのだ
JavaScriptプログラマーに必要なのは爪に火を灯すような高速化ではなく、
なるべく爆弾が落ちないようにすること
そいつはすべてを吹っ飛ばしていくほど強力なのだ
しかしGCは10msオーダー、1sオーダーという爆弾を平気で落として行くのだ
JavaScriptプログラマーに必要なのは爪に火を灯すような高速化ではなく、
なるべく爆弾が落ちないようにすること
そいつはすべてを吹っ飛ばしていくほど強力なのだ
> しかしGCは10msオーダー、1sオーダーという爆弾を平気で落として行くのだ
GCの速度はCPUとメモリ速度に依存するから
今だと1msもいかないだろうね。
GCの速度はCPUとメモリ速度に依存するから
今だと1msもいかないだろうね。
ガベージコレクションが起きて10msも処理に
時間がかかるのは1時間に1回ぐらいだよ。
時間がかかるのは1時間に1回ぐらいだよ。
16msも遅延したらどうなるかわかってるの!
その16msで生死が決まるんだよ。
1フレームのレベルで戦っているんだからな。
たとえ1フレームが1じかんに
馬鹿のフリして核の秋田w
その16msで生死が決まるんだよ。
1フレームのレベルで戦っているんだからな。
たとえ1フレームが1じかんに
馬鹿のフリして核の秋田w
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.110 + (1001) - [97%] - 2013/10/13 14:01
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.119 + (1002) - [97%] - 2014/10/3 15:30
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [97%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.115 + (1001) - [97%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.114 + (1001) - [97%] - 2014/5/3 10:45
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.108 + (1001) - [97%] - 2013/9/21 15:16
- + JavaScript の質問用スレッド vol.138 + (1004) - [97%] - 2019/4/20 23:45
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.100 + (1001) - [95%] - 2012/6/13 22:46
- + JavaScript の質問用スレッド vol.125 + (1001) - [95%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.124 + (1001) - [95%] - 2015/7/16 1:30
トップメニューへ / →のくす牧場書庫について