X



+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2015/03/22(日) 16:19:45.75ID:nW67tQ7U
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。


+ JavaScript の質問用スレッド vol.123 +
http://peace.2ch.net/test/read.cgi/hp/1423915644/

(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです)
0649デフォルトの名無しさん
垢版 |
2018/01/14(日) 03:20:01.37ID:V1AuijCV
electronでデベロッパーツールにログを出力するのはどうすればいいのでしょうか?
console.logするとシェルのコンソールにログが出力されますが
これだとソース版の実行時にしかログが見られません
0651デフォルトの名無しさん
垢版 |
2018/01/14(日) 09:01:40.77ID:V1AuijCV
何と言うのか知りませんがバイナリにビルドする前の状態です
0652デフォルトの名無しさん
垢版 |
2018/01/14(日) 09:37:43.17ID:Ljf3EvZ6
>>649
サンプル通り作ってあるなら
mainWindow.loadURL(`file://${__dirname}/index.html`);
というような感じでindex.htmlをロードして表示していると思うけど
このindex.html内でconsole.logすればデベロッパー内でログを見れる
0653デフォルトの名無しさん
垢版 |
2018/01/14(日) 11:41:12.08ID:V1AuijCV
>>652
そうなのですか
ありがとうございます
Electronは触った感じNW.jsよりも技術者寄りでイケてる感じがしますが
その分複雑なところがありますね
0654デフォルトの名無しさん
垢版 |
2018/01/14(日) 12:42:53.06ID:V1AuijCV
>>636の件ですが
Electronの場合はビルドしたバイナリでも、
実行時のカレントディレクトリが正しく取得できました
まぁ当たり前の動作ではありますが・・。
NW.jsの方が古いプロダクトのようですが、
Electronに架橋するのがその歴史的意義で、既に使命を終えたんじゃないかと思います
Electronを触ったらもうNW.jsに戻ろうとは思えません
0655デフォルトの名無しさん
垢版 |
2018/01/15(月) 16:39:11.95ID:oyJFiKwa
エディタのVS Code, Atom が、Electron 製だろ

これらのエディタを使ってみれば、Electron で、何でも出来ることが良くわかる
0656デフォルトの名無しさん
垢版 |
2018/01/15(月) 23:04:54.06ID:A1ZxBlI8
まあバイナリファイルの読み書きさえできれば
なんでもできるのは当たり前なんだけどなw
0657デフォルトの名無しさん
垢版 |
2018/01/17(水) 13:55:03.66ID:ZK8OrRcg
titleを書き換えるブックマークレットを作っています
chrome開発者ツールのconsoleで
document.title = 'test';
とすると、何の問題もなく書き換わります
が、これを
javascript:document.title = 'test';
としてブックマークに登録してブックマークレットとして実行すると、
titleだけでなくdocumentの内容自体がtestという文字列に置き換わってしまいます
何が間違っているのでしょうか?
0659愛知人
垢版 |
2018/01/17(水) 14:32:13.86
resList.forEach(resNumber => {
$(`.resListPanel li.resItem[data-number="${resNumber}"]`).clone().appendTo(resListTree);
});

resListの要素数が70個だと2秒もかかるんだがどうする?
0660愛知人
垢版 |
2018/01/17(水) 14:41:23.85
const resItemList = resList.map(resNumber => {
return $(`.resListPanel li.resItem[data-number="${resNumber}"]`).clone();
});

これでもほぼ同じ
0661愛知人
垢版 |
2018/01/17(水) 14:44:03.32
resList.map(resNumber => {
return $(`.resListPanel li.resItem[data-number="${resNumber}"]`);
});

これでもほぼ同じ
0662デフォルトの名無しさん
垢版 |
2018/01/17(水) 14:54:28.73ID:ZK8OrRcg
>>658
undefinedを返さないとその値でページを置き換えるようになっているのですね
ありがとうございました
0663デフォルトの名無しさん
垢版 |
2018/01/17(水) 15:09:47.60ID:ZK8OrRcg
ブックマークレットはaタグのhrefにjavascript:と書いた時と
同じ動作をするもののようです
ここに書いたコードは返り値の返却が求められていることから、
ある種の関数として実行されていると推測します
ですがブックマークレットの解説が書かれたサイトには、
名前空間を汚染しないように即時関数で全体を囲む方がいいと書いてあります
しかしブックマークレットがすでに関数になっているのですから
即時関数にしなくても汚染は防げるのではないかと思ったのですが
どうなのでしょうか?
0665デフォルトの名無しさん
垢版 |
2018/01/17(水) 16:14:37.66ID:ZK8OrRcg
>>664
returnを書いたら動作するからです
じゃあ違うんですか?
それならなぜreturnと書けるのでしょうか?
0666デフォルトの名無しさん
垢版 |
2018/01/17(水) 16:42:16.33ID:ZK8OrRcg
<a href="javascript:var a = 1;return;">test</a>
と書いてみたら
SyntaxError: Illegal return statement
と出ました
ブックマークレットはaタグとは似て非なるもののようですね
0667デフォルトの名無しさん
垢版 |
2018/01/17(水) 16:50:55.42ID:ZK8OrRcg
javascript:var a=1;return;
というブックマークレットと
javascript:alert(a);
というブックマークレットを作り、
最初のブックマークレットを実行してから次のブックマークレットを実行すると
aはundefinedだと言われました
やはりブックマークレットは関数として実行されているようです
aタグの場合は、あるタグで宣言代入した変数を
他のタグのコードから参照できました
0669デフォルトの名無しさん
垢版 |
2018/01/17(水) 17:01:43.92ID:ZK8OrRcg
>>668
エラーを出しつつundefinedを返してるのかとも考えましたが
実際コンソールみてもエラー出てませんし。
というかもう答え出てますよね?
0671デフォルトの名無しさん
垢版 |
2018/01/17(水) 21:31:52.74ID:/j2ucEK2
chromeで試しましたが出ませんよ
ブラウザによって実装が異なる可能性もあるので他のブラウザは知りませんが
ブックマークレットという性格上、自分が使うブラウザで問題なければ別にいいです
0672デフォルトの名無しさん
垢版 |
2018/01/17(水) 21:32:24.29ID:HnamRG99
JavaScriptは最終的にビルドしてWebAssemblyに
するのが常識になっていくんじゃないかなーって
思っているんだけどどうですか?
0673デフォルトの名無しさん
垢版 |
2018/01/18(木) 07:04:32.02ID:iW6wdbys
>>672
それは将来の素のJS≒TSをWASMにコンパイルしてリリースするのが常識になるかってこと?
既にトランスパイラやバンドラが使われているように、幾らか規模のある企業案件では良く使われることになると思うよ
あとはブラウザの拡張機能のようなパッケージ化されるものではそれが基本になると思う

だけど常識と言えるかどうかは分かんないね
2030年ごろにJSに実質的な寿命が来たとして、
その時に多くの言語から安全簡潔にWASM化する環境が整っていて、
ブラウザベンダー達が新しい言語を実装しないことを決定すればそうなるんじゃない?
0674デフォルトの名無しさん
垢版 |
2018/01/18(木) 15:48:38.59ID:kHRH5E2e
electronてメインプロセスとレンダラプロセスのJSはディレクトリを分けた方がいいと思うのですが
どうディレクトリを分けるのがスタンダードなんでしょうか?
0676デフォルトの名無しさん
垢版 |
2018/01/18(木) 21:59:02.60ID:CTvnuGUK
>>673
> その時に多くの言語から安全簡潔にWASM化する環境が整っていて、

その多くの言語からWASM化するってのはビルドですよね?
聞きたかったのはJavaScriptが生き残るかどうかじゃなくて
ビルドツールなしっていうのは考えられない世界になるのかなーって話です。
0677デフォルトの名無しさん
垢版 |
2018/01/18(木) 23:08:03.44ID:4fewSOLi
>>676
JavaScriptを普通に書きたいという需要が多い限りそんな世界にはならないということ
全てがHTTP2になるかっていうのとも似てる
0678デフォルトの名無しさん
垢版 |
2018/01/19(金) 08:45:48.44ID:679xh41H
WASMが普及するとブラックボックス化して、Webへのアクセスの危険度が上がる気がする。メルトダウンとかが話題なくらいなんだから慎重に行かないとね。
とりあえずWASMはDOMに直接アクセスできないとか色々制限があるから
0679デフォルトの名無しさん
垢版 |
2018/01/19(金) 16:29:34.99ID:fVyCmoDl
>>675
ありがとうございます
すごくシンプルなアプリなので
main.jsとmainWindow.jsを同じディレクトリに置くことにしました
0681デフォルトの名無しさん
垢版 |
2018/01/19(金) 19:52:16.50ID:IX0btOHh
>>678
メルトダウンはCPUのバグなんだからそれを引き合いに出すのは無茶だと思う
ただタイミングアタックって言うのは事前の想定が難しい脆弱性攻略法だからね

例えばサーバでパスワードやハッシュが正しいかチェックする際
正解の文字列と==で比較するとそれ即ち脆弱性になる
なぜなら==は大抵の場合文字列の頭からの1文字1文字合っているか確認していって、
間違っている場合そこで打ち切るから、サーバのレスポンス時間の統計を取れば
現実的な試行回数で正解文字列が頭から推測できていってしまう

SQLインジェクションとかよく騒がれるので、外から来たデータの扱いは
個人運営のサイトでも必ず相当に気にすると思うが、
内の状態を外に微塵も漏らさないための気配りができている場合は少ない

今回のCPU騒動の対策としてperformance.now()の精度が100nsに落とされたりしたが
過去にあったJSで外部画像やiframeにフィルタを書ける際の処理の重さから内容を推測したりとか
数msの精度があれば十分に成功するものもある

Web標準規格者、ブラウザ開発者のような大勢の優秀な技術者でも度々見落としてしまうのが
この手のバグなんだから、ある意味で仕方がない
0682デフォルトの名無しさん
垢版 |
2018/01/19(金) 21:15:34.22ID:acEC53C4
>>678
> WASMが普及するとブラックボックス化して、Webへのアクセスの危険度が上がる気がする。

スマホアプリと同じ状態になるだけだよ
危険度は今とまったく変わらないか、
ブラウザのセキュリティ内でしか動かないから
スマホアプリよりも安全
0683デフォルトの名無しさん
垢版 |
2018/01/19(金) 21:17:41.12ID:acEC53C4
WASMはJavaScriptでできることしかできないから、
その意味でも安全といえる。

ソースコードが読みづらいってだけ
JavaScriptで難読化するのと変わらない

どうせ難読化されて無くても殆どの場合JavaScriptのコードを
なんて見ないんだから関係ない

よってWASMで危険になんかならない
0684デフォルトの名無しさん
垢版 |
2018/01/19(金) 21:47:23.03ID:IX0btOHh
いや、JSのASTのバイナリのようなものというのはスタートラインであって
将来的には変わっていくと思うよ
現時点でも例えばSIMD APIを使ってSIMD命令を明示的に記述できるけど
もしここ関連でバグがあればより危険ってことになるからね
0686デフォルトの名無しさん
垢版 |
2018/01/19(金) 23:04:17.50ID:IX0btOHh
バカタレ
なんで俺がわざわざこれを選んで挙げたか少しは考えることもできないのか?
JavaScriptでもできることになる予定だったけど撤廃される流れになってるだろ
現にV8はサポートしないことを決めて削除した
https://bugs.chromium.org/p/v8/issues/detail?id=6020&;desc=2#c3
そのくらいの時系列知っとけ
0690愛知人
垢版 |
2018/01/20(土) 00:25:29.74ID:sgAjbMHf
廃止された
0692デフォルトの名無しさん
垢版 |
2018/01/20(土) 02:09:47.09ID:87fvh5f6
検索って言う超巨大なアプリストアがあるんだけど知ってる?
PWA云々ってのもこの流れの中の一つ
0693デフォルトの名無しさん
垢版 |
2018/01/20(土) 02:32:41.46ID:/fOBA6h7
>>692
> 検索って言う超巨大なアプリストアがあるんだけど知ってる?
知らない。ストアってことは有料なんだよね?
0694デフォルトの名無しさん
垢版 |
2018/01/20(土) 10:26:21.47ID:L3x0kWif
どれだけアプリストアでセキュリティチェックされようと
超低レベルなCPUにバグがあっちゃお終いだし、
もしくは人がチェックするのも無理だから
超高レベルな悪意も防ぎようがない
0695デフォルトの名無しさん
垢版 |
2018/01/21(日) 01:14:29.51ID:NRBAbRyX
JSからも攻撃可能なメモリの同じ部分への超連続書き込みで
隣接セルを書き換えるって言うのも根本的な修正策は無いしね
0696デフォルトの名無しさん
垢版 |
2018/01/21(日) 11:52:06.76ID:BpnGcMgt
ElectronでネイティブのNodeモジュールを使う場合
リビルドが必要になりますが
このリビルドしたモジュールはアーキテクチャが同じなら
他のマシンでも使えるのでしょうか?
0697デフォルトの名無しさん
垢版 |
2018/01/21(日) 21:54:46.27ID:Ycn/1JW2
各OS で、コンパイル済みバイナリは異なるから、バイナリで持ち運べない。
ソースコードで持ち運んで、各OSでビルドする

Linux では、ディストリビューション間でも、バイナリが異なるかも知れない
0698デフォルトの名無しさん
垢版 |
2018/01/21(日) 22:08:15.10ID:SRhvhCOq
ただし例外もあって例えばUbuntuでコンパイルしたバイナリは
Windows上のWSL(Ubuntu)で動く
WSLがUbuntuでビルドしたバイナリを動く仕組みを提供しているからだ
0699デフォルトの名無しさん
垢版 |
2018/01/21(日) 22:29:06.24ID:bZyUZ2Tg
OSが違う時に走らないのは仕方ないですが
OSとアーキテクチャが同じなら、普通の実行ファイル同様、他のマシンでも走りますよね
ありがとうございました
0700デフォルトの名無しさん
垢版 |
2018/01/21(日) 22:54:53.47ID:NRBAbRyX
ネイティブモジュールは他の実行ファイルとは全く違う
V8のバージョンが変わると容易に壊れる
0701デフォルトの名無しさん
垢版 |
2018/01/22(月) 00:51:54.11ID:Q2QTYk20
実行ファイルというのはモジュールのことではなく、
バイナリビルドしたアプリのことでした
ネイティブモジュールのリビルドが必要なのはV8のバージョンアップなどとの擦り合わせなのですね
ありがとうございました
0702デフォルトの名無しさん
垢版 |
2018/01/22(月) 21:32:51.06ID:DF13VOU4
Single Page Applicationのデザインは
他のウェブサイトとは要件が少し違うと思います
ウェブページというよりもアプリケーションそのものなので。
SPAのデザインに関して参考になる本とかサイトとかありますか?
0704デフォルトの名無しさん
垢版 |
2018/01/24(水) 02:51:55.33ID:jTLtMl0d
SPAって主にはただの普通のWebサイトにPjax導入した物を言うと思うぞ
それ以上の専用の設計がされているものはWebアプリって言う
0705デフォルトの名無しさん
垢版 |
2018/01/25(木) 00:44:44.26ID:dhevK8dt
electronで、現在ソースで実行されているのかバイナリで実行されているかを
コードの中で判断するにはどうすればいいのでしょうか?
ソースでの実行時のみにデベロッパーツールを開くようにしたいです
0706デフォルトの名無しさん
垢版 |
2018/01/25(木) 02:17:02.57ID:oIA0WROS
AngularとReactどっちがいい?
0707デフォルトの名無しさん
垢版 |
2018/01/25(木) 02:24:41.78ID:viLdLLlb
>>705
専用APIあるのかもしれないけどその他の方法として
フォルダ内にバイナリファイルがあるかどうかで調べればいい
0709705
垢版 |
2018/01/25(木) 09:59:15.16ID:ix7/3m0P
__dirname+'/実行ファイル'
の有無を調べたのですがうまく動きませんでした
どうもビルドとは言っても実行ファイルの中にJSが組み込まれているわけではなく
resources/app配下のJSを実行しているようです
それなら上の上の上のディレクトリの実行ファイルの有無を調べればいいと思ったのですが
それも何故かうまくいかず。
(書き方が悪かっただけかもしれません。未検証)
他の方法はないかと探して
path.basename(app.getPath('exe')) == 'electron.exe'
なら開発環境と判別するという方法にたどり着きました
もっといい方法もあるのかもしれませんが
0710デフォルトの名無しさん
垢版 |
2018/01/25(木) 21:01:11.78ID:swiRhF/5
Railsアプリケーションには、production、development、testの3種類の環境があるけど、

Electron には、そういう環境変数は無いの?
0711デフォルトの名無しさん
垢版 |
2018/01/26(金) 00:11:29.64ID:blIs49uE
ドキュメントのappやprocessやEnvironment Variablesをざっと見ましたが
それっぽいのは見当たりませんでした
ビルドと言ってもelectron.exe相当の実行ファイルの名前や属性が変わるくらいなので
本質的な違いはないという思想なのかもしれません
0712デフォルトの名無しさん
垢版 |
2018/01/26(金) 11:30:01.98ID:1vUlDhuw
初心者です。お願いします。
node.jsで以下のコードを実行したら、
TypeError: "callback" argument must be a functionというエラーが出ました。

var webclient = require("request");

function test(){
webclient.post({
url: "https://mevius.5ch.net/tech/subback.html";},
function (error, response, body){
console.log(body);
});
};
setInterval("test()",2000);

test()単体では動くのですが、定期的に実行するにはどうすればいいか教えてください。
0713愛知人
垢版 |
2018/01/26(金) 11:34:15.05
"test()"→test
0714712
垢版 |
2018/01/26(金) 11:39:58.87ID:1vUlDhuw
ありがとうございますできました!
JS触って非同期処理?とか初めての概念が出てきてそっちが原因だとずっと勘違いしてました…
0716デフォルトの名無しさん
垢版 |
2018/01/26(金) 13:22:15.41ID:YGk40oMZ
それで分かるレベルならこんなとこに質問に来ないと思うが…

「なるほど、文字列だからいけなかったんだね!
setInterval(test(),2000);
これでよし!」

こうなるのがオチ。>>713の態度が正解だと思う。
0718デフォルトの名無しさん
垢版 |
2018/01/28(日) 03:49:02.94ID:4n9pDwZC
>>716
違う
今回のことに限らずエラー文に答えがあるんだから
それを読み解けるように努力していこうねということ
0719デフォルトの名無しさん
垢版 |
2018/01/28(日) 10:48:20.37ID:Wu8LfGNM
function f(){
return new Promise(resolve=>resolve (f());
}
なぜこの関数をthenすると無限ループになるのか教えてください。
fが評価されるのは一回にしかおもえないのですが教えてください。
0721デフォルトの名無しさん
垢版 |
2018/01/28(日) 11:36:08.21ID:Wu8LfGNM
thenしたときじゃなくてnewしたときにプロミスの中身は実行されるということですか?
0722デフォルトの名無しさん
垢版 |
2018/01/28(日) 11:41:05.63ID:Wu8LfGNM
>>721
そうみたいですね。勘違いしてました。
0723デフォルトの名無しさん
垢版 |
2018/01/28(日) 11:41:56.05ID:IPHcqH8X
>>719
function f(){
 return new Promise(resolve=>resolve (f());
}



function f(){
 let p = new Promise(resolve => {
  return resolve (f());
 });
 return p;
}



function f(){
 let p = new Promise(resolve => {
  console.log(1);
 });
 console.log(2);
}
f();

↓出力結果

1
2

つまり、f関数が戻るより前 = p が得られるより前にnew Promiseに渡した関数が
実行されるから。引数の関数は即時関数のようにすぐに実行されるんだよ。
その中でfを呼び出しているから再帰になる
0724デフォルトの名無しさん
垢版 |
2018/01/28(日) 12:08:11.95ID:Wu8LfGNM
解決策思いついたので発表させてください。
function f(){
return ()=>new Promise(resolve=>resolve(f()));
}
thenのとき関数に括弧をもう一つ付けます。
0725デフォルトの名無しさん
垢版 |
2018/01/28(日) 12:30:57.25ID:wTu9papE
jsbinみたいなプレイグラウンドでローカルで実行できるものはないかと思ったのですが
jsbinはNode.jsで動いていてまさにローカルで実行できると知りました
ですが
https://github.com/jsbin/jsbin/blob/master/docs/running-your-own-jsbin.md
ここにある通りにnpm install -g jsbinとやっても警告とかいろいろ出てエラーになります
いろいろなパッケージの今のバージョンとは合わないっぽい感じです
jsbinをローカルで動かすための方法をまとめたサイトとかないでしょうか?
あるいは、今のNodeの環境ですんなりローカルで使えるプレイグラウンドはないでしょうか?
0727デフォルトの名無しさん
垢版 |
2018/01/29(月) 16:38:42.59ID:AA0oVADy
EventEmitterは
onメソッドが呼ばれる前にemitされたら(現実的にはなかなかないでしょうが)
onメソッドが呼ばれたタイミングでコールバックが呼ばれるのでしょうか?
0728デフォルトの名無しさん
垢版 |
2018/01/29(月) 18:56:51.98ID:u565O0DO
ブラウザのEventは同イベントループ中なら順序は関係ないが
NodeのEventEmitterはそれはできない
0729デフォルトの名無しさん
垢版 |
2018/01/29(月) 20:06:02.96ID:AA0oVADy
そうなんですか
まぁまずあり得ないので、それでも問題ないという判断なのでしょうね
ありがとうございました
0730デフォルトの名無しさん
垢版 |
2018/01/30(火) 03:21:45.76ID:8qCjhhbY
イベントはイベントループのスタックに登録されるといった概念上自然なのはブラウザの方
Nodeの方はemitされるとイベントループを経由せずに直接関数を呼んでるだけの簡単な実装
この違いはPromiseの挙動に慣れてたりすると複雑なシーンやObservable的なライブラリでバグの元になるかもしれない
0731デフォルトの名無しさん
垢版 |
2018/01/30(火) 04:36:39.97ID:n415njgH
なにいってんだ?ブラウザとかイベントループとかそういうレベルの話じゃねーよ

基本的な設計を考えてみろ
イベントを受信する側は一体いくつ存在すると思ってる?
イベントを送信する側一つに対して、イベントを受信する側は複数存在するだろ

ブラウザで言えば、buttonのclickに対してaddEventListerで
イベントハンドラを複数結びつけることができる。

> onメソッドが呼ばれる前にemitされたら(現実的にはなかなかないでしょうが)
> onメソッドが呼ばれたタイミングでコールバックが呼ばれる
を実現するにはどうするか考えてみろ。

あとからイベントハンドラが設定される可能性を考えるということは
イベントハンドラが設定されていたとしても、全ての発生したイベントの情報を
ずーっと保持し続ければいけないということだ。

だってそうだろ? clickのイベントハンドラが1つ有ったとしても、もしかしたら
将来2つめのイベントハンドラが設定されるかもしれないんだから。
そんなメモリの無駄な使い方なんかやりません。

例えばWindowのloadイベントとかに限れば一回発動したら二回目は発動しないから、
onメソッドが呼ばれたタイミングでコールバック発動しても良いかもしれないが、
そういうのは特定のイベント特有の話だ。

特定のイベントに限って、onメソッドが呼ばれたタイミングでコールバック発動するための
サポート機能を持たせるのはありかもしれんが、少なくとも基本的な機能として
onメソッドが呼ばれる前に発生したイベントを保持するなんてことはまずしない
それはブラウザとかNodeとか関係ない一般的な設計としてだ
0733デフォルトの名無しさん
垢版 |
2018/01/30(火) 10:33:59.80ID:FpOWlTjM
>全ての発生したイベントの情報をずーっと保持し続ければいけない

たしかにmousemoveなどを考えたら恐ろしいことになりますね

Node書くならEventEmitterについて知っとくべし
https://qiita.com/yuku_t/items/d69d3a2c7dafa7d04e87
疑問のきっかけはこのページを読んだからなのですが、
非同期関数の中でEventEmitterオブジェクトを生成し、
非同期処理完了後にemitを呼ぶようにしてから、EventEmitterを返却。
EventEmitterを受け取った呼び出し元は、それにonメソッドを発行するという流れですが
このように書いた非同期処理はどんなに処理が軽いものであっても
onよりも先に終わることはないと、JavaScriptのメカニズム的に保証されている、
と考えていいのでしょうか?
0734デフォルトの名無しさん
垢版 |
2018/01/30(火) 11:22:22.63ID:FpOWlTjM
setTimeoutやsetIntervalの処理はイベントキューに登録される。
イベントキューから取り出されるのは、メインスレッドの処理が終わった時。
つまり何らかの処理の最中にイベントが実行されることはない。
ということのようですね
関数から抜けたタイミングとかにもイベントが発生し得るのではないかと
漠然と思っていたのですが、そうではなくて、
すっかり処理が終わった時にのみイベントキューが消化される
なのでEventEmitterも確実に機能することが保証されているのですね
ありがとうございました
0735デフォルトの名無しさん
垢版 |
2018/01/30(火) 12:02:02.30ID:8qCjhhbY
>>731
お前こそ何言ってるんだ?
ここまで話されていることは全ての発生したイベントの情報をずーっと保持し続ければいけないと言うことにはならない
ただイベントの発火を同期でなく必ず次のイベントループ時に持ち越すというだけで
その同期中でのリスナと発火の順序は問わないということ
そしてこれは重要
基本的に遅延処理だが値を指定した際にキャッシュやエラーですぐコールバックが呼べる状況もある
そういうときにEventレイヤーで非同期を保証することでハンドラの設定順序による無用なバグを防ぐことができる
0736デフォルトの名無しさん
垢版 |
2018/01/30(火) 19:52:08.77ID:04Xagkxs
>>731
JavaScriptなんてそんなもん。
馬鹿な質問に馬鹿が答え、しかもそれが間違っていることも割と普通で、馬鹿が再生産されてる。
現場とか壮絶だと思うよ。
間違ってもないコードを間違っていると言われ、間違っているように書き直させられるのでは、
まともなプログラマは寄りつかない。そして馬鹿に純化され、余計に馬鹿が再生産されるという悪循環。

というかな、根本的に分かってない奴が多すぎる。(プログラマとして未熟)
そして、質問者が馬鹿なのは致し方無しとしても、
回答者は他の回答者のレベルが分かるはずなのだから、
状況を把握して、自分は回答すべきか黙っておくべきか適切に判断しないといけない。
これも出来ない奴がJavaScripterには多すぎる。
(インターネット掲示板の使い方が未熟=人間として未熟)
これについては他Web系のPHP/Goは他言語並みにマシで、JavaScriptだけ酷いのはちょっと不思議なんだが。

そしてこの糞女はマジでそろそろ死んで欲しい。
根本的にこいつは分かってない。(どこが間違っているかは教えてやらないが)
お前らもこの糞女に対してレスする意味があるのかよく考えろ。
レスする=そいつにとって有効情報がでてくる=そいつが居着く事になる。

誰を殺し、誰を生かすかは回答者が決められる。
スレの質が低いのは、回答者のモラルが低いからだ。
迷惑しかかけないゴキブリ韓国人を殺すのは、正しいことだ。
人権屋は最近旗色が悪くて問題のすり替えに躍起だが、それに騙されてはいけない。
現実問題として、畑でいい野菜を育てる為には、
害虫は駆除しないと話にならないし、そのために農薬を使うわけでね。

匿名掲示板上で殺すのは躊躇しなくていい。
理由は簡単で、匿名掲示板上は原理的に差別がない場所だからだ。

韓国人死ね
0737デフォルトの名無しさん
垢版 |
2018/01/30(火) 19:53:15.14ID:04Xagkxs
そして>>731,735のようなやりとりはやればいい。
どうやらお前らはこれを望んでいるようだし、今のお前らには必要なのだろう。
ただな、冷静に考えれば分かるはずだが、これ自体もずれていて、お前らは、
・何が仕様なのか
を議論しているが、それは本来は仕様書なりMDNを読めば終わる話だ。議論するものじゃない。
他言語では、
・仕様を分かった上で、それについてどう思うか/どうそれを生かすか
を議論している。
JavaScriptは比較的簡単な言語だ。
何故お前らがいつまでも仕様理解にトラップされているのか、俺にはよく分からない。

韓国人死ね

例えばな、>>730
× スタック
○ キュー
君がプログラマなら、この2つは正しく使い分けないといけない。今回は特に。
そして確かにNodeのEventEmitterは若干仕様が不適切だ。
NodeのAPIに合わせるなら、EventEmitterSyncと命名されてしかるべきだった。
https://nodejs.org/api/events.html#events_asynchronous_vs_synchronous

という話をするのならまだ分かるんだよ。
ただまあ、今回脱線しているのはそもそものこの糞女が根本から間違っているからであって、
君らが悪い感じでもないが。
0738デフォルトの名無しさん
垢版 |
2018/01/30(火) 19:56:08.40ID:FpOWlTjM
>>736
前から思ってたがなんで女扱いなんだよ
意味不明の思い込みを炸裂させてんじゃねーぞハゲ
0739デフォルトの名無しさん
垢版 |
2018/01/30(火) 20:44:18.42ID:04Xagkxs
>>738
いや間違いなくお前は糞女だよ。典型的な女のレスばかりだろ。
というかお前、むしろそれが分からないのはヤバイと思うが。

とはいえ、匿名掲示板上でのこの手の水掛け論の決着は非常に単純で、
・大多数の人にとって、どう見えるか
でしかない。
お前がどれだけ嘘の主張をしても、レスはどう見ても女でしかないし、誰も信じないよ。

ただこの際性別なんてどうでもいい。
お前はお前自身が荒らしであることを自覚して、死んでくれマジで。
お前がいる限り、スレの質はどんどん落ちていく。
だからお前は荒らしなんだよ。
敬語を使わないとか、死ね死ね言ったりとかは本質じゃないんだよ。
731-735のやりとりも、特に意味がない。(お互いそれなりに理解できている)
齟齬が発生しているのはスタートポイントがおかしいからであって、彼らの問題ではない。
正しいポイントから議論すれば彼らは噛み合うし、いい議論になったかもしれん。

ただ>>731,735がよく分からんのは、
君らはどうでもいいところでバトル始める癖に、自分では始めないことだ。
今回もこの糞女のスタートポイントから始めてるからおかしくなってる。
議論したいことがあるのなら、君らが勝手に始めればいいのさ。

韓国人死ね

一応>>731にもポイントを明示しておこうか?
> そんなメモリの無駄な使い方なんかやりません。
若干揚げ足取りだがこれは間違っていて、
一番少メモリの実装はフックでデイジーチェインする古来の方法だ。
ただしJavaScriptはそんなことはせず、イベントテーブルを持っていると思うがね。
0743デフォルトの名無しさん
垢版 |
2018/01/30(火) 21:35:06.14ID:FpOWlTjM
>>725の件ですが
VSCodeにそういう拡張機能はないかと思ったのですが
プレビュー系の拡張機能はJavaScriptが動かないものばかりです
VSCodeもElectronで動いているのですから、
webviewに表示すればJavaScriptも動くものが作れるのでは?
と思うのですが、そうはいかないのでしょうか?
0744デフォルトの名無しさん
垢版 |
2018/01/30(火) 21:39:37.02ID:dOWZ5By/
よく読んだけど、すごく長文で話をして嫌われる俺の長文よりひどいものを久しぶりに見たな。

何を語ってるのかよくわからん。
もしかして、すごく鋭い事を言ってるつもりなのかな。

EventEmitterSyncとモジュール自体にSync付けるのもよくやからんし、
emitが同期的に走ることを問題にしたいんだろうけど、そもそも同期非同期の関数を用意する場合は同期の方にSyncつけようね、ってルールだろ。
片方だけの時には関係ない。API眺めたら気づくだろ、常識的に考えて。
0745デフォルトの名無しさん
垢版 |
2018/01/30(火) 21:39:39.31ID:FpOWlTjM
Electronを使えばわりと簡単にプレイグラウンドが作れるんじゃないか
と思うのですが、そういうものはもうありそうな気もします
ですが、検索しても見つかりません
ないのでしょうか?
0747デフォルトの名無しさん
垢版 |
2018/01/31(水) 00:18:26.95ID:AGfG6JhI
>>733
なんか外野が喚いているようだがw

> >全ての発生したイベントの情報をずーっと保持し続ければいけない
>
> たしかにmousemoveなどを考えたら恐ろしいことになりますね

そういうこと。仮に1日後にonするようなコードがあったら
onするより前に発生したイベントを全部伝えることの恐ろしさがわかるよね?
そんな設計にするわけがない。基本としてonより前に発生したイベントを捕まえることはない


余談だが、jQueryのreadyメソッド = $(function() {}) は
DOM APIではDOMContentLoadedを使えばいいと思うかもしれないが
実はDOMContentLoadedイベントが発生した後に、readyを呼び出しても
ちゃんとイベントハンドラは呼び出されるという違いが有る

つまりonするより前に発生したイベントを伝えるような挙動をしている。
DOMContentLoadedはページごとに一回しか発生しないのもあって
ユーザーにとって便利なようにそうなるように作られているんだ。

setTimeout(function() {
 $(function() {
  alert('ready'); // 呼び出される
 });

 document.addEventListener("DOMContentLoaded", function() {
  alert('DOMContentLoaded'); // 呼び出されない
 });
}, 3000);
0748デフォルトの名無しさん
垢版 |
2018/01/31(水) 00:29:53.93ID:V9tZNzCA
chrome-extenionを作っておりましてサイドバーの機能をiframeで作りました。
iframe内でUI操作をするので大部分のロジックがirame内に集中しているのですが
通信ができないためbackground.js側にメッセージ送信を介して外部と通信するような仕様になっています。
こんな状況でバグトラッキングを行いたいと思ったらどういうライブラリが考えられるでしょうか?
0749デフォルトの名無しさん
垢版 |
2018/01/31(水) 07:42:48.27ID:BP4ujqwj
>>746
日本人が日本語で書いても理解できないなんて、まるで
日本人でないみたいだなぁ。
Syncの付け方間違ってるよ、って。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況