元スレ+ JavaScript の質問用スレッド vol.94 +
JavaScript覧 / PC版 /みんなの評価 :
151 = :
>>149
cloneNode使え
153 = :
>147
俺も馬鹿げたコードだと思うが>124に対抗してるだけ
>150
これ以上短くするとTypeErrorになる
155 = :
それなら1個のTextのdataへの代入と比較するのが筋だろうよ
HTMLタグ解析全然やってないんだからな
比較条件が全然違うのを平気でやらかしてるのは、結局
お前自身が普段どういうコードを書いてるかを晒してるに過ぎん
156 = :
var test1 = function(root, num) {
var doc = document;
var fragment = doc.createDocumentFragment();
for (var i = 0; i < num; i++) {
fragment.appendChild(doc.createTextNode(i));
}
root.appendChild(fragment);
return root;
};
var test2 = function(root, num) {
var innerHTML = root.innerHTML;
for (var i = 0; i < num; i++) {
innerHTML += i;
}
root.innerHTML = innerHTML;
return root;
};
var num = 10000;
var elm = document.body; // bodyに適当にHTML書いとく
console.time(1);
var r1 = test1(elm.cloneNode(true), num);
console.timeEnd(1);
console.time(2);
var r2 = test2(elm.cloneNode(true), num);
console.timeEnd(2);
console.log(r1.innerHTML === r2.innerHTML); // 両者の結果が等しいことを確かめる
157 = :
くっそ
おまえら俺をとことん馬鹿にしやがって
今日のところは引き分けで許しといてやろう
お! ぼ! え! と! け! よ!
>151,152
もう疲れた
よかったら続きはおまえらがコード書いて俺に見せてくれ
>155
カッコつけんなよ爺さん
俺よりクールなコードを書けるんなら口先だけじゃなくて書いて見せてみろよ
158 = :
>>149
よくなった。>>156は全く同じ事を検証するコード。これで書き方勉強してみたら。
159 = :
157が一人前になるには何年かかるやら。。
160 = :
>>158
うるせー中途半端に褒めるんじゃねーよ
無駄になげえコード書くんじゃねえ見づらいだろうが
コードは1文字でも短い方が良いんだよ
パット一目見て頭に入るクールなコードを書くのが男ってもんよ
161 = :
>>156
お前もさあ、DOM構造が全然違うってのに気付けよ
162 = :
>>161
書き方勉強させるのに内容まで変えたら爆発しちゃうだろw同じであることが大切なんだよ。
163 = :
>>131を公平な条件で比較するとこうなる
http://jsperf.com/innerhtml-appendchild
innerHTMLはあまりに遅くてGoogle Chromeが落ちたけどw
164 = :
こりゃなんか俺のせいで荒れてきちまったな
すまん!みんな許してくれ
そして俺はいくら弄ってもいいから俺に免じてみんな仲良くしてくれ!
頼む!!!
165 = :
>>163
>>131は「一つ一つDOMで追加していく」と「innerHTMLに追加していく」を比べるんじゃないのか。
目的だけ見てしまってその過程を最適化したらテストにならないと思う。
166 = :
>>164
だったら詫びとして次のお題を出せ!
お前の本気はこんなもんじゃないだろ!
167 = :
>>165
>>122,124に対するレスだからinnerHTMLとappendChildを比較していると読んだが、違うのか
一方だけループ中の処理にすれば遅くなるのは当たり前すぎる
168 = :
>>165
ならinnerHTMLもループ中に追加しなければならん
かつテキストノードを分割するようにな
比較条件が全然違うのにテストとかアホか
169 = :
俺は>124を懲らしめたかっただけなのに
逆にみんなから懲らしめられるとは……
170 = :
まとめると、innerHTMLは極端に遅くなるようにも書けるし、(条件次第で)DOMより速くなるようにも書ける。
使うケースと書き方次第で結果が全然違うから、一般的にどっちが速いとはいえない。
172 = :
>>168
そのことを>>163に対して言ってるんだが?最初の目的を失ってるんじゃないかなと。
173 = :
>>165
それならこういう比較になるべきじゃないの
for (var i=0; i < 10000; i++) { d.body.innerHTML += i; } // 逐次処理
for (var i=0; i < 10000; i++) { bi += i; }
d.body.innerHTML += bi; // innerHTMLで一括処理
一括処理だけinnerHTMLにして逐次処理はappendChildにするテストに意味がない
174 = :
>>172
最初の目的は>>122でしょ
innerHTMLとDOM(appendChild含む)のパフォーマンス比較
>>131はループ中のappendChildとループ後のinnerHTMLを比較しているから無意味
公平に比較するなら「ループ中のappendChildとループ中のinnerHTML」か>>163の形
175 = :
APIの機能差をテストするつもりで
プログラマの能力差をテストしているという罠
177 = :
まとめ。(innerHTML2はとてつもなく遅い為にテストできず)
http://jsfiddle.net/DsR7g/
178 = :
>>169
>>124は何も間違ったことはいってないぞ
喧嘩するなら余所でやってくれ
179 = :
>>177
順番を入れ替えるだけで結果が変わるよ…
マジでプログラマーの能力測るのにちょうどいい話題だな
180 = :
お昼寝して起きたらなんか進んでてワロタw
ごめんごめん、俺はinnnerHTMLとappendの違いを説明したかっただけや
182 = :
>180
俺こそ一人で騒いですまんかった
innerHTMLが冒涜されたと勝手に思って
過去のトラウマを思い出してつい切れてしまった
すまんかった…
183 = :
すいません
<div>
<div class="a10"></div>
<div class="a5"></div>
<div class="a2"></div>
<div class="a9"></div>
<div class="a1"></div>
<div class="a8"></div>
<div class="a4"></div>
<div class="a3"></div>
<div class="a7"></div>
<div class="a6"></div>
</div>
このように並んである要素をソートしてa1~a10に整列させる良い方法を伝授してください
184 = :
>>183
document.querySelector('.a1'); から順番に appendChild していく
他に class="a1" があったら破綻するから工夫して
185 = :
試してないけどこんな感じ
BIGDIV.childNodes.sort(function (a,b){
return b.firstChild.className.match(/\d/)-a.firstChild.className.match(/\d/);
})
186 = :
>>184 sort使ってやれよ
188 = :
>>186
指摘するぐらいなら書いてやれよ
189 = :
Node-Listを直接ソートするって大胆すぎ
var div = $("div:first"); // <div> jQuery
var inner = Array.prototype.slice.call(div[0].childNodes); // <div.a1>....<adiv.aN>
inner.sort(function(a, b) {
return b.className.replace(/[^\d]/,"") - a.className.replace(/[^\d]/,"");
});
for(var i = 0; i < inner.length; i++) {
div.append(inner[i]);
}
190 = :
>>184
それが一番いいと思いますがそれができないのです
191 = :
NodeListは配列と違って破壊的でないのにsort使う意味あるのかな
効率が悪すぎると思うが
>>190
なぜ出来ないのか考えてから質問して欲しい
あと出来ないコードをjsfiddleにUP
192 = :
出来ないのはそういう風に利用するAPIが吐くから質問させていただきました
193 = :
お前らほんとーにおっせーコードしか書けんのなあ
194 = :
>>192
制限があるならその制限事項を全て出して
あとjsfiddleにUP
195 = :
>>183に書いた要素をソートしたいだけで別の方法を模索したいわけではないのですよ
196 = :
>>193
そう思うなら速いコードを書いてやれよ
197 = :
>>183
classということは他にもclass="a1"があるんだよね
この状況でどうやって要素を特定しようとしてる?
親要素にidでも振ってあるなら話はわかるけどスマートな方法は今のところない
あと、APIが吐くじゃあどのような制限があるか全く伝わらない
198 = :
「遅いはずだ」とか、「メモリリークするかも」とかって実際に起きてるわけでもなく、想像で話すとロクなことにならない。
体感的に遅かったら高速化すればいいし、メモリリークしたら直せば良い。
想像で議論してもまともな結論がでるはずもなく、無駄でしかない。他にやることがあるだろ。
あと、(不毛な)議論自体がしたいヤツがいるから、そういうのはスルーするしかないね。
199 = :
>>189
childNode だとテキストノードもまじってくる。それの対処を。
あと、IEだとArray.prototype.slice.call(Nodeリスト)がつかえないんだよね。
jQueryつかってるんだから、$.makeArrayがいいとおもう。IE無視ならそのままでOK。
んで、それ直したらいけたよ。
まあ、逆順になったけどな。
200 = :
サンプル書いてみた
http://jsfiddle.net/SC3Bx/
>>198
「sortの効率が悪い」といったのは最終的にappendChildするなら二度手間になると思ったから
>>186が「sort使ってやれよ」と指摘した理由が見つけられなかった
どのような書き方をするかは各々の自由だと思うし、「~してやれよ」系はスルーでいいのかもしれないな
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/11/15 20:32
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.74 + (1001) - [97%] - 2009/12/1 6:08 ○
- + JavaScript の質問用スレッド vol.99 + (1001) - [97%] - 2012/5/7 4:32
- + JavaScript の質問用スレッド vol.98 + (1001) - [97%] - 2012/4/9 14:46
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.96 + (1001) - [97%] - 2012/1/28 23:01
- + JavaScript の質問用スレッド vol.95 + (1001) - [97%] - 2012/1/17 4:16
- + JavaScript の質問用スレッド vol.93 + (1001) - [97%] - 2012/1/1 4:46
- + JavaScript の質問用スレッド vol.93 + (1001) - [97%] - 2011/12/10 18:31
- + JavaScript の質問用スレッド vol.90 + (1001) - [97%] - 2011/10/26 4:18
- + JavaScript の質問用スレッド vol.114 + (1001) - [95%] - 2014/5/3 10:45
- + JavaScript の質問用スレッド vol.142 + (984) - [95%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.124 + (1001) - [95%] - 2015/7/16 1:30
- + JavaScript の質問用スレッド vol.104 + (1001) - [95%] - 2013/1/28 4:00
- + JavaScript の質問用スレッド vol.141 + (881) - [95%] - 2021/4/19 9:00
- + JavaScript の質問用スレッド vol.142 + (926) - [95%] - 2019/12/23 13:15
トップメニューへ / →のくす牧場書庫について