元スレ+ JavaScript の質問用スレッド vol.113 +
JavaScript覧 / PC版 /みんなの評価 :
252 = :
>>250
グローバル変数は使うな。
コードが無駄に複雑になるというか
使う必要がある時点で複雑な証拠でもある。
そのコードが問題かどうかという以前に
そういうコードが必要になってしまっているのが問題。
253 = :
var str0 = new String('foo');
var name = new String('foo');
alert(str0 instanceof String); // true
alert("str0=" + str0 instanceof String);//false★1
alert(name instanceof String); //★2
質問します
★1で何故trueでなくfalseになるのは何故なのでしょうか?
(IE11とクローム(32.0.1700.107 m)で試したところfalseでした。)
★2の結果は、
IE11はtrue、クローム32.0.1700.107 mではfalseでした。
何故ブラウザで動作が違うのでしょうか?
教えてください。
254 = :
>>253
"str0=" + str0 はObject型ではないから。
name instanceof String === false は Google Chrome のバグとしか思えない。
256 = :
>>255
ありがとう、そういうことか。
グローバルスコープでテストしたのかいけなかったのね。
(function () {
var name = new String('foo');
console.log(name instanceof String); // true
}());
257 = :
var str0 = new String('foo');
var name = new String('foo');
alert(typeof str0);//object
alert(typeof name);//★1
★1はIE11はobject、クローム32.0.1700.107 mではstringでした。
クロームではnameがstring型になるのが原因ということですか。
258 = :
>>241
この件ですが、これもText URL Linkerというエクステンションのせいでした・・
開発時はエクステンションを外せばいいですが
エクステンションを入れている環境にどう対応すべきか、
と考えると難しい問題です・・
259 = :
オートリンク系エクステンションって定期的にHTML全体をパースしてるんだよな
結構処理が重そう
261 = :
そういや最近は背景色とかの指定までjqでやるキチガイ多いよな。CSSでやれよ。
262 = :
動的に変更できるのがいいのでは?
264 = :
>>261
ほらもっと短くなった。
$(function() {
$(document).on('click', 'img', function(event) {
$('#id1').removeClass('hoge');
});
});
265 = :
えー遅くなりましたが、要するに現状矩形編集をする方法は事実上ない、ということでよろしいのでしょうか
あまりニーズがないのでしょうかね? あると地味に便利なのですが
267 = :
それでなにか深刻な問題が?
jQuery使っておいてパフォーマンスが~とか言わないでよね
そもそもグローバルでもなんでもいいから
そんなことで一々質問すな
最近どうでもいいことに病的に凝るやつ大杉
Chrome君とテキスト君はいい加減迷惑
268 = :
>>266
コードを長くする「すごく大きなデメリット」と比較しろって話。
269 = :
クリック処理はクリックした時だけしか発生しないから少しくらいパフォーマンス悪くても問題ない
タイミング的にシビアな処理、
ユーザーを待たせるバッチ的な処理ではチューンすべきだけど
270 = :
>>266
パフォーマンスを気にするなら
event.target.ownerDocumtent.getElementById('IdName')
とするけどね。
そもそも、キャッシュするにしてもグローバル変数にキャッシュするのはない。
ローカルスコープに閉じ込めればいいのに、なぜ最も遅いグローバルスコープにするのか。
271 = :
キャッシュは色んなところからアクセスするんだからグローバルで問題ない
ローカルにキャッシュすることもあるけど、したいのはそういうことじゃないだろう
272 = :
キャッシュするためにグローバルしているわけだよね。
そのグローバルってだけでデメリット。
安易なキャッシュはコードを複雑化させるだけだからやめた方がいい。
本当にそれをやる価値があるかどうかを見極めてからやるべき。
それに、キャッシュっていうのは合ってもなくても同じように動くのが理想。
$('#id')をclickイベントが起きてから取得するのと、clickイベントが発生する前に
取得しておくのとでは動きが違っている。
一般的な使い方を考えると、clickイベントが起きてから取得するべきだろう。
275 = :
>>273
お前のほうがグローバル変数をわかってないんじゃね?
どこからでもアクセスできるのが、いけないんじゃないんだよ。
どこからアクセスされてるかわからないのが、いけないんだよ。
名前空間に入れておけば、少なくともその名前空間を利用していないものは
アクセスしないだろうってことが予想できる。
これが大差ないわけがないだろ。
privateという概念がない言語もあるが、そういう言語でも
_をつけることでprivateを意味するという慣習があることが多い。
これは実質publicなのだが、外部からアクセスされないということに
なってることが大きな意味を持っている。
276 = :
>>273
> グローバルというだけで教条的に忌避するのはC級プログラマ
この場合、画一的にグローバルを避けているわけじゃない。
パフォーマンスを気にする人がグローバル変数にキャッシュするのは明らかに目的に合致してない。
スコープの浅い場所にキャッシュする方が明らかにパフォーマンス上有利。
プロパティアクセス演算子を複数回使うのもパフォーマンス上不利になる。
277 = :
>>275
>>273ではないけど「本質的にはグローバルと大差ない」を意訳すると多分こういうことだと思う。
「プロパティアクセス演算子による擬似名前空間」はコーディング規約によって制限を加えているのであって完全に参照を阻止しているわけじゃない。
関数スコープに変数を閉じ込める手法なら原理的に参照を阻止しているわけだから、プロパティアクセス演算子による擬似名前空間よりも明らかに安全性は上となる。
278 = :
>>276
スコープが浅くてもそこまで辿るのに一旦そのコンテキスト上の最上位空間まで上がる必要がある
hoge.hoge.cacheにキャッシュを持たせたら
最上位空間からhogeを探す→hogeを探す→cacheを探す
となる
最上位空間に持たせた場合は
最上位空間からcacheを探す
となる。
キャッシュという性質上グローバルアクセスが出来ないと意味がないのだから
「グローバル変数にキャッシュするのがおかしい」という言説は頓珍漢
279 = :
アクセス速度で言えば一番速いのがローカル変数
次に速いのがグローバル変数
スコープチェーンは上位から辿って行くのだから
非グローバル変数へのアクセスでもグローバル空間の探査は行なわれる
280 = :
でもクロージャの場合はどうなるんかな?
一つ外のクロージャへのアクセスとグローバルアクセスはどっちが速いだろう
281 = :
いずれにしろ、
キャッシュで浮かせるコスト >>>>>>>> スコープチェーン走査コスト
なのでキャッシュなのにグローバル変数云々はおかしいけど
282 = :
http://jsperf.com/closure-vs-global-variable
クロージャの方が速いね
てか、クロージャの性格を考えたら当たり前かw
283 = :
DOMについてですが、
childNodesを持ち、なおかつdataも持つような要素って存在しますか?
284 = :
まったく、その些細な速度の違いを
あーだーこーだいうのをやめろって言ってんだよ。
そんな1ミリ秒も差がでないようなことのために
コードを複雑にするなよ。
複雑なコードというのは開発している間
ずっと違いを感じることになるんだぞ?
286 = :
>>284
そうやって過度の一般化をするのはC級プログラマ
そもそもキャッシュは対して複雑でもない
288 = :
>>286
キャッシュが複雑だって話しなんかしてねーよ。
意味が無いことするなって話だ。
お前のほうが一般化しなくていいぞ。
この場合は意味が無いって話をしてるんだから。
本当にあほだな。
293 = :
一般的にキャッシュなんて言うものはベンチマークをしてからやるもの。
キャッシュのためにコードを増やすのはちょっとの事に
見えるかもしれないが見通しが悪くなる。あとから
修正する必要がでたとき余計なコードがあると面倒になる。
一行、二行コードが増えることが問題じゃない
メンテナンス性が落ちるということが問題。
だから、キャッシュしたほうが早くね?なんか良くね?なんて
程度の考えなら、やらないほうが何倍も良い。
294 = :
Jqueryで出来ることは生のJavaScriptで出来る。
295 = :
うん。効率が違うだけ。
それはJavaScriptでやれることは
C言語でもアセンブラでもやれると言ってるようなもの。
重要なのは、できるかどうかではなく効率。
296 = :
自転車で行ける所は、歩いてでも行ける!
日本横断。
297 = :
枠組みを自分で作ればいい。世界でたった一つフレームワークさ。クロスブラウザで。
298 = :
機械語からやればいいじゃん
299 = :
デタラメな知識を押し付けようとするキチガイに注意
よく使い回すDOMは変数に入れておいた方がいいし一般的にそうする
>>260 のように書いておけばいい
300 = :
>>292
質問者がパフォーマンスを気にしているようだったので>>291を推奨しただけで、キャッシュしないならそれでいいと思う。
原理的にはキャッシュすることで速くなるはずだからキャッシュが無意味には同意できないが。
付け加えるなら jQuery(function($) { は不要。
jQuery(function($) { はキャッシュする為に書いたのであってキャッシュしないのなら DOMContentLoaded を待つ必要はない。
キャッシュの必要性は質問者が判断する事なので口を挟むつもりはないが、そこまで細かなパフォーマンス差を気にするようならグローバル変数を避けるべきだし、ネイティブ実装の関数を使うべきだとは思った。
拘るなら徹底的に拘れといいたい。
「何となく」という理由でパフォーマンス差が気になるようなら大した差はないから気にするな、ってのは同意。
せいぜい同じ関数内で同じ要素を二度呼ぶ場合にローカル変数に格納するといいぐらいか。
というか、パフォーマンスが気になるなら質問者が自分でベンチマークをとるべきなんだよな。
自分にとって有意な差があるかを確かめる確かな手段が用意されているんだから、もっと積極的にテストしてもらいたい。
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [100%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22: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.119 + (1002) - [97%] - 2014/10/3 15:30
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.133 + (1001) - [97%] - 2018/6/8 10:45
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.110 + (1001) - [97%] - 2013/10/13 14:01
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.103 + (1001) - [97%] - 2012/11/9 15:30
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.143 + (753) - [97%] - 2020/4/19 5:00
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [95%] - 2014/11/8 1:15
トップメニューへ / →のくす牧場書庫について