- 1 名前:デフォルトの名無しさん [2015/04/22(水) 01:35:08.20 ID:TQI/XWNo.net]
- JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。 ■質問を書く上で (1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。 (2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。 (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など) (3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。 (4) 常に自発的に調べる心構えを持ってください。 具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。 わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。 (5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。 (6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。 ※必ず「問題の事象が再現されること」を確認してください。 必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。 (7) サンプルコードに HTML が含まれる場合は validator.w3.org/ で [Check] してみてください。 (8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。 (9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。 (10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
- 448 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 08:26:31.32 ID:IhTv1p38.net]
- >>440
そういうことはWindows10にアップグレード可能なOSとIE9をサポートするOSが一致するか調べてから発言しような
- 449 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 11:43:33.94 ID:Zi1J5vpJ.net]
- Edgeがあるじゃん
- 450 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 12:49:01.27 ID:IhTv1p38.net]
- >>442
そういうことはEdgeの対応OSを調べてから(ry
- 451 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 19:00:09.47 ID:pEku9roO.net]
- Windows10だろ??????
何言ってんだ????????こいつwwwwwww
- 452 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 19:22:19.99 ID:ysM2oFx/.net]
- >>444
おう、お前の知り合いは全員Windows 10にしたかな? 会社のパソコンのOSはなんだい?
- 453 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 20:17:42.40 ID:HC0McPg/.net]
- Windows 10だけサポートするなら>>441に話が戻るな
- 454 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 03:42:39.14 ID:szXGSrMl.net]
- MVC「じゃない」JavaScriptのフレームワークって無いですかね
configとかroutesとかviewとかRESTfulとかめんどくさいんですよ、どうせ俺しか弄らないんだし 今はクライアント側にHTMLとAngularでAjax呼ぶ サーバサイドでJSON応答する だけで書いてますがそんな感じの
- 455 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 03:49:08.88 ID:jqjYNF9z.net]
- >>447
HTML+CSS+jQueryでよい。 HTMLとCSSをただしく使えるのであれば jQueryだけでビュー部分は簡単に作れる。
- 456 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 04:00:40.70 ID:szXGSrMl.net]
- >>448
jQueryはAjaxでちょっとだけ使ってますわ、 スタイル切り替えはAngularの{{}}でやってる 「小規模なんだからフレームワークなんて要らない好きなように書け」 ですかねありがとうございます
- 457 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 09:41:11.53 ID:C3TDTIV2.net]
- www.example.com
www.example.net 間でobject型のデータを互いに交換したいのですが、 最も高速にやれるのは どういう関数を使うべきですか? キーワードを教えて下さい。
- 458 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 10:06:02.94 ID:6N9tUz3v.net]
- 結局、IE9用にsetTimeout()のPolyfillが必要なわけだな
- 459 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 10:26:06.76 ID:C3TDTIV2.net]
- >>450
chromeで動けばいいです。他は無視で構いません
- 460 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 10:46:53.64 ID:6N9tUz3v.net]
- >>450,452
window.postMessage please-sleep.cou929.nu/introduction-to-web-messaging.html
- 461 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 12:16:25.07 ID:C3TDTIV2.net]
- >>453
レスありがとうございました。 このサンプルはiframeを使った例のようですが、そうではなくて 全く独立した二つのウインドウ間で通信したいのですが。 どうやっても出来ません。
- 462 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 12:24:32.54 ID:J44fsBtD.net]
- >>454
postMessage はframeでなくても使えるはずだけど
- 463 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 12:26:11.54 ID:C3TDTIV2.net]
- >>455
それが出来ないんです。もう2日くらい行き詰っています。 本当にできるのでしょうか?
- 464 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 12:41:48.64 ID:J44fsBtD.net]
- >>456
Chrome独自の制約は特に見つからないけどなあ もう一度仕様を読んでコードを見直してみては? https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage https://html.spec.whatwg.org/multipage/comms.html#dom-window-postmessage caniuse.com/#feat=x-doc-messaging
- 465 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 15:58:14.65 ID:C3TDTIV2.net]
- >>457
もう全然ダメです。行き詰まってます。 しばらく寝ます。
- 466 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 20:52:40.73 ID:C3TDTIV2.net]
- 今起きました。
どこかに動くサンプル有りませんか...
- 467 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 01:36:27.38 ID:VR8UuUsJ.net]
- >>459
ttp://the-zombis.sak ura.ne.jp/wp/blog/2013/10/15/post-2031/ このサンプルはどや SafariとChromeで動いたよ
- 468 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 01:54:42.80 ID:KZlVjUzR.net]
- >>459
postMessageって送りたい方のwindowオブジェクトに対してするんだからな example.comからexampe.netに送りたいなら example.comのページでexample.netのwindowオブジェクトを取得する必要がある window.open()の返り値とかで
- 469 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 08:54:44.10 ID:kPgfKzUv.net]
- >>460
レスありがとうございました。 確かにこのサンプルではpopupで開いたウインドウに送信できました。 でも逆方向に送る事は出来ないのでしょうか? >>461さんの指摘のように、popup側で送信先windowのオブジェクトを取得する必要がありますよね?
- 470 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 11:26:56.86 ID:MBLRXv9v.net]
- >>462
window オブジェクトを送れば逆方向も出来るのでは?
- 471 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 16:05:08.73 ID:3jMeB42X.net]
- windowオブジェクト送るとかアホか
呼び出し元はparentで取れるだろ
- 472 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 16:51:10.15 ID:y6KenWXU.net]
- >>464
windowオブジェクトを取るのが目的ではないだろ window.hoge でグローバル変数にして送れ、といいたいのか?
- 473 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 16:53:35.70 ID:y6KenWXU.net]
- ごめん、悪かった
windowが取れれば送れるという事か
- 474 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 19:02:28.07 ID:kPgfKzUv.net]
- 皆さん情報ありがとうございました。
その後、試したのですが逆方向は出来ませんでした。 もしやり方が分かれば教えて下さい。
- 475 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 19:20:19.09 ID:KZlVjUzR.net]
- >>467
onmessageのイベントオブジェクトのsourceに呼び出し元のwindowオブジェクトが入っている onmessage = function(e) { e.source.postMessage() }で返せるわけ
- 476 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 21:59:57.58 ID:kPgfKzUv.net]
- >>468
ありがとうございました。 一週間くらい悩んでいた問題が解決しました。
- 477 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 17:34:29.31 ID:cFhaBXKc.net]
- オブジェクトの定義で
var obj = {key: value}; var obj = {'key': value}; どちらも同じだと思いますが、どちらが良いのでしょうか?
- 478 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 18:11:28.69 ID:pcMCuDsy.net]
- JSONは後者のみだから後者に統一しとけば良いんじゃね
- 479 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 18:33:30.15 ID:YodBadyd.net]
- おい
- 480 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 22:46:53.61 ID:lJMFjOKo.net]
- >>471
お前はいつもJSONを手書きしてるのかよ? >>470 圧縮の技術の一つでよく出てくるパターンを短いデータに置き換えるというのがある。 それと一緒でどちらも同じ意味で可読性も変わらないのであれば、 よく使うものほど短い書き方にするのが良い。この場合は''がないほうが可読性高いしね。
- 481 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 09:05:06.94 ID:n7KlQu9D.net]
- 場合によるでしょ
- 482 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 09:12:12.40 ID:Bay2doKJ.net]
- JavaScriptかjQueryで
sleep(2000) // 2秒休む とか出来ますか?
- 483 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 11:30:09.76 ID:qlqX4ccz.net]
- >>475
アホな実装しかできない
- 484 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 11:31:18.08 ID:Bay2doKJ.net]
- >>476
アホな例をお願いします。
- 485 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 16:16:56.03 ID:VsO+5z2P.net]
- >>475
var now = Date.now(); while(now + 2000 > Date.now()){} setTimeoutとpromise使ったほうが絶対いいよ
- 486 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 16:22:58.88 ID:v4yXy6ML.net]
- >>476
お前がアホな実装しか出来ないのは分かったが そういう話をしているんじゃない。
- 487 名前:476 [2015/12/23(水) 18:28:18.45 ID:qlqX4ccz.net]
- >>477
function sleep (delay) { var date = new Date; while (new Date - date < delay); } sleep(2000); console.log('test'); どう考えても setTimeout() を使った方が良い。 同期処理で sleep() を実装しようとする設計がアホ。
- 488 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 18:32:35.22 ID:Bay2doKJ.net]
- >どう考えても setTimeout() を使った方が良い。
だったらその例を教えてけろ
- 489 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 18:43:12.65 ID:MksdZDM7.net]
- リファレンスを読めばわかる
https://developer.mozilla.org/ja/docs/Web/API/Window/setTimeout
- 490 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 18:46:15.21 ID:Bay2doKJ.net]
- >>482
分からないんです。 settimouotでsleep実装出来ますか?
- 491 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 18:53:15.76 ID:qlqX4ccz.net]
- >>483
出来ない。アホな実装しか出来ないといっただろう。 素直に非同期処理を使え。
- 492 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 19:16:39.46 ID:fUoT5vqI.net]
- ところで、 sleep を頑なに拒んで Promise や async/await にこだわる理由はなんだろう?
どう考えても sleep の方が使いやすいときがあるが。
- 493 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 19:24:23.93 ID:rBnsJIlR.net]
- 画面触れなくなるじゃん
- 494 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 19:33:10.34 ID:fUoT5vqI.net]
- ちげーよ。本物の sleep を JavaScript が採用しないのが不思議だと言ってるんだよ。
- 495 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 19:44:06.77 ID:qlqX4ccz.net]
- 同期処理にしたらDOM読み込みや他の処理全てがブロックされるからだろ
- 496 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 19:51:12.02 ID:fUoT5vqI.net]
- 他言語の sleep はそこでスレッドをスイッチするから他処理をブロックしない。
お前らこの単純な事実を知らないのか?
- 497 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 20:00:54.54 ID:tFvVWMos.net]
- (笑)
- 498 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 20:04:35.74 ID:qlqX4ccz.net]
- >>489
同期処理なんだから後述処理は完全にブロックされるだろ HTMLパースも同期処理なのを知らんのか
- 499 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 20:26:19.51 ID:MksdZDM7.net]
- JavaScriptはシングルスレッドで同期処理だから sleep() 時に処理がブロックされる必然
他言語ではなくてJavaScriptでどうなるかを考えたら?
- 500 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 21:14:21.37 ID:fUoT5vqI.net]
- お前ら相変わらず話が通じないな。
>>491 > HTMLパースも同期処理なのを知らんのか 知ってるよ。だからHTML上に<script src=>やると云々、書く場所は考えろってやつだろ。 ただ WebWorker を使った場合は sleep(0) があった方が綺麗に書けるんだよ。 (とはいえsleep(0)ならasync/awaitで問題ないが) >>492 JavaScript はデタラメに仕様を拡張してきているのに、 なんで sleep を採用しないのか不思議だと言ってるんだよ。
- 501 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 23:12:11.47 ID:v4yXy6ML.net]
- > なんで sleep を採用しないのか不思議だと言ってるんだよ。
ブラクラに使われるからだよ。 sleep 100000000とかやられたら画面が固まるだろ。 そりゃブラウザによっては固まらないようにするかもしれないが、 それはそのブラウザの独自機能。タブも独自起動。 タブもウインドウもないブラウザだって有るわけで、 画面が固まったら何もできなくなるだろ。
- 502 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 23:18:01.50 ID:fUoT5vqI.net]
- ちょっと考えてみたが、 async/await と Promise で実装できそうな気がする。
await は Promise を受け取れるし、 ---(A) Promise 内で SetTimeout できるようなので。 --- (B) (B)についてはMDNのサンプルコードで確定。 (A)については仕様の頭を読んで他サイトの記述を見る限り多分出来そう。 (ただし全部読んでないので間違っているかも。) https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise tc39.github.io/ecmascript-asyncawait/ それにしても、 sleep を意地でも実装しない理由って無いと思うよ。 async/await 入れた時点で function 途中でのスイッチが行われるのだから、 sleep と可読性の損なわれ方は変わらないはず。 と思っていたが >>494 > ブラクラに使われるからだよ。 なるほどこれはあるかもな。 しかしそれを言うなら、あっちのスレの話題で今更ながらFC2ブログがJS自由なのを知って、 ちょっと寒気がしてます。
- 503 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 23:29:03.26 ID:fUoT5vqI.net]
- >>494
すまん訂正。思いっきり間違えた。 > > ブラクラに使われるからだよ。 > なるほどこれはあるかもな。 スピンロックの sleep ならブラクラになるが、通常のサスペンドロックの sleep ならブラクラにはならない。 俺が入れてもいいのではないかと思っているのは当然後者。 だからこれは当てはまらない。
- 504 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 00:32:33.07 ID:vhy24jAm.net]
- >>496
だからそれはJavaScriptの仕様で決めることは出来ないんだよ。 搭載したいと思うなら、ブラウザが勝手に搭載すればいいわけで、 実際サーバーサイドJavaScriptでは、sleepはブラウザに相等する 実行環境が提供している。
- 505 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 00:54:43.31 ID:eesjQKa2.net]
- sleep() があったら sleep(Infinity); で永遠に読み込みが終わらない現象を発生可能な件
- 506 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 01:10:40.88 ID:vhy24jAm.net]
- >>496
> スピンロックの sleep ならブラクラになるが、通常のサスペンドロックの sleep ならブラクラにはならない。 あと、スピンロックかどうかは関係ない。 それはJavaScriptはWeb Workerを作って明示的に別スレッドを作らないかぎり (悪意のあるブラクラサイトがわざわざ別スレッドを作るわけがない) シングルスレッドなのだから、スピンロックでもサスペンドロックでもブラクラになる。 スピンロックだとCPUを食うというだけの話。
- 507 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 01:33:21.10 ID:ij3qlZ6A.net]
- ブラクラになるとか頭おかしいのか・・
フリーズしなくすれば良いだけ
- 508 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 01:48:04.37 ID:vhy24jAm.net]
- >>500
だからフリーズしなくなる機能をつけるのは ブラウザの仕事であって、JavaScriptではないということ。 例えばalertなんかOK押すまでsleepするのと同じなんだが、 今のブラウザはalertでても、ページ内の操作は当然無理だが、ウインドウは触れるだろ。 でもalertはブラクラに使われていたんだよな。後からブラウザが対策した。 もちろんalert等はブラウザの機能であってJavaScriptの機能ではない。 alertのようなブロックする関数は今の考え方では失敗と言うべきだろう。
- 509 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 02:09:31.15 ID:3SycHtsF.net]
- >>501
何があってもブロックさせないという仕様は、確かにブラウザには必要なのだろう。 ただ、sleep を await と同じ扱いにすればいいだけだろ。 I/Oとかは全面的に await でいいのは事実だけど、 sleepの方が使いやすい局面があるから昔から sleepガー という奴がいるわけで。 > だからそれはJavaScriptの仕様で決めることは出来ないんだよ。 > それはJavaScriptはWeb Workerを作って明示的に別スレッドを作らないかぎり > シングルスレッドなのだから、 これが出来ない理由にはならないんだよ。だったら await はどうなの? await の所で他の function が実行できるんだよね?(仕様読んでないけど) それは別スレッドを作っているのと見た目は同じだろ。 内部的に糖衣構文化してイベント待ちに自動的に切り換えてくれているのなら、 sleep も同様にそう作り込めばいいだけなんだよ。 await を導入している時点で、sleep が導入できない理由はないんだよ。 sleep は await のタイマイベント待ち版でしかないんだから。 (通常の await は I/O 待ち)
- 510 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 04:48:17.07 ID:vhy24jAm.net]
- smart.ataglance.jp/2015-04-02-try-async-await-with-babel/
awaitってこれだろ? ES7ではいるやつ。 > async function countUp() { これを実装するには、asyncという構文にJavaScriptが対応しないと実現できないんだが? お前が言ってるのは、今のJavaScriptでは実現不可能。なぜなら対応してない機能が必要だから。 という事実に対して、最初からJavaScritpはasyncという文法に対応していれば よかったんだってってことだろ? たられば論な。 別の言い方をすれば、 問い なぜsleepに対応してないのか? 答え asyncに対応してないから。 ってことなんだが? 将来サポートされる機能で実現可能だと言われた所で、 今サポートしてない理由は、今のJavaScriptでは実現不可能だからだろ。 どんなにsleepを作りこんだ所で、asyncは実現できない。 それともお前が言ってる "作り込み" っていうのはBabelみたいにES7をES5とかに変換するツールを JavaScriptで作って、実行時にソースコードを変換するようするって話か?
- 511 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 05:00:33.39 ID:vhy24jAm.net]
- あとそれからももう一回っておくけど、
asyncやwaitがあった所で、JavaScriptにはタイマーがないんだよ。 JavaScriptにファイルアクセス命令がないようにタイマー命令もない。 それはJavaScriptにタイマーは含めないと決めたから。 awaitやasyncがあった所で、タイマーが存在しなければ、 ビジーウェイトしないかぎり、実現不可能。 それがawaitやasyncを入れても、タイマーを入れない理由。 そういうのはJavaScriptではなく実行環境が提供すべき機能で JavaScriptには入れるべきではないという考えから入れていない。
- 512 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 05:09:19.58 ID:5dQYZNYi.net]
- ただの構文糖ならJavaScriptという言語に追加できるけど、
sleepを実現するのに必要なタイマーは構文糖じゃないからな。 JavaScriptに新しい機能を追加しようという話になってる。 タイマーを一般化すると割り込みとかシグナルになるわけだけど JavaScriptに割り込みやシグナルにアクセスする機能を追加するって話になる。 タイマーは構文糖じゃないから取り入れられないんだ
- 513 名前:よ。 []
- [ここ壊れてます]
- 514 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 05:31:32.68 ID:5dQYZNYi.net]
- >>502
> (通常の await は I/O 待ち) await はI/O待ちではない。 I/O待ちするのはブラウザを含めた実行環境の仕事 JavaScriptは、基本的にI/Oを操作しない。 (近いのはconsole.logぐらいだがこれもコンソールに 出すってだけで出す場所は定義されてない)
- 515 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 07:16:17.38 ID:YlRH46yJ.net]
- 安易に使うやつでてくるから駄目でしょ
sleep中にHTMLや変数かわるとかさ考えてないやつでてくるだろう 考えなくていいのがいいところだし するとしたら既存のjavascriptには影響なしで理解してないやつには使いにくい機能追加だな
- 516 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 07:34:18.13 ID:Y5sNONvq.net]
- この前別スレでこの手の話出てたけど、
ES7でスレッド制御できるようになるからsleep出来るじゃん。 参考:js-next.hatenablog.com/entry/2015/09/30/225251 それと非標準では昔からいろいろある。
- 517 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 07:54:24.80 ID:xUUCJBux.net]
- UIスレッドとスレッドセーフの区別がついてないのまで出てきてカオス
- 518 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 09:05:14.13 ID:kShQ38jb.net]
- 俺が、俺たちがカオスなんだ!
- 519 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 12:37:48.96 ID:lTmsChXg.net]
- >>508
将来搭載される機能使えば、実現可能だからって、なんで今sleepないの?と 聞かれてもな。今は実現不可能だからに決まってるだろ。 そもそもWorkerはブラウザのAPIであってES7じゃない。 ESにasync/awaitという構文が追加されたのはただの構文糖だからで実現可能だったからで、 構文糖で実現不可能なタイマーへのアクセスは、将来にわたってもできることはないだろう。 ファイルアクセスなどのI/Oに対応しないのと同じ理由で、 ESの範囲ではタイマーを扱うべきではないと考えているはず。 ブラウザの機能の話であれば、それはsetTimeoutがあるから十分じゃん? setTimeoutがasyncを使った実装になってないのは、今のJavaScriptは対応してないからだ。 しかも、それはブラウザのAPIの話。async構文を使ったsleepを実装しろ!というならば ブラウザのAPIに対してだろう。サーバーAPIはすでにあるわけだから。
- 520 名前:長くなったから分割 mailto:sage [2015/12/24(木) 12:39:45.82 ID:lTmsChXg.net]
- もっとも、どう頑張ってもsleep(1000)みたいな形で使えるようになることはない。
>>503の例のように、await sleep(1000); というawait構文を使った形になる。 そしてasync、awaitはただのPromiseの構文糖なのだから、Promiseを返す 関数であれば、ES7でasync、awaitを使って書くことができる。 だから、Promiseを返すバージョンのsetTimeoutとして、 sleep(1000).then(function() { ・・・ }) みたいな使い方をする ブラウザのAPIが新しく作られることは有るかもしれない。 そして、これならば今のブラウザでも動く。
- 521 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 12:46:55.90 ID:lTmsChXg.net]
- >>495
> ちょっと考えてみたが、 async/await と Promise で実装できそうな気がする。 Promiseというものが最初にできて、それを "簡単に記述できるようにしただけ" のものが ES7に追加されることになった新たな文法のasync/awaitなんだが。 これは新しい文法なんだから、Promiseで "実装" することは出来ない。 Promiseを返すように作られた関数があって、 それを使う時の書き方の一つでしかないよ。
- 522 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 12:56:26.66 ID:YlRH46yJ.net]
- javascriptみたいな使いにくい言語に難しいことすんなや
- 523 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 13:30:58.58 ID:lTmsChXg.net]
- 難しいかどうかは人それぞれだからw
- 524 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 14:21:38.37 ID:+OAEjoT0.net]
- promiseってjavascriptで書かれているんだろ?
だったら今でもsleep出来るんじゃないか?
- 525 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 16:22:07.01 ID:lTmsChXg.net]
- >>516
PromiseはJavaScriptでかけるが、 sleepを実装するのに必要なタイマー機能(割り込みやシグナル)が JavaScriptでは使えないんだよ。 これらはブラウザかnodeのようなJavaScript実行環境が 提供するしか無い。
- 526 名前:デフォルトの名無しさん [2015/12/24(木) 16:50:27.79 ID:QHPA1t+Q.net]
- Javascriptの開発環境はなにがいいのですか?
この言語はまだ初心者で経験ないけどこれからやるために。 サクサク動くの希望。 調べたらVisual StudioでもEclipsでもできるらしいけど、本当にみんなこんなのでやってるの?
- 527 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 16:57:32.84 ID:lTmsChXg.net]
- >>518
JavaScript含めた動的言語は、言語の仕様からIDEを使っても さほど大きな開発サポートは得られないので、諦めてテキストエディタ使ってるよ。 静的言語ならIDE使うとすごく便利なのにな。
- 528 名前:デフォルトの名無しさん [2015/12/24(木) 17:00:13.00 ID:QHPA1t+Q.net]
- >>519
ひょっとしてメモ帳? でもちょっと本格的になったら無理じゃない? コード入力で単語を自動選択ポップアップすらないと。
- 529 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 17:01:10.52 ID:lTmsChXg.net]
- >>520
メモ帳なわけがないだろう。 まあ単語の自動選択は使ってないがな。 これも完璧じゃないので。
- 530 名前:デフォルトの名無しさん [2015/12/24(木) 17:10:04.57 ID:QHPA1t+Q.net]
- >>521
じゃなにつかってるの?
- 531 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 17:57:12.05 ID:k1/8SWkC.net]
- >>511
ES7と言ったのはAtomicsのことだよ。 そしてsleepは不要で合わなくてそのような機能は実装されることがないというような論に対して言ったんだよ。 AtomicsAPIは立派なスレッド制御のための新しい機能で、糖衣構文の類ではない。 ESの範囲で扱うべきだと考えられているから存在している。
- 532 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 18:06:22.44 ID:lTmsChXg.net]
- >>528
何の話してるの? 俺が言ってるのは、タイマーはES7の機能として実装されないから sleepはES7の範囲内では無理って話してるんだが。 スレッドあってもsleepはビジーウェイト以外では 実現できないんだよ。
- 533 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 18:09:16.10 ID:lTmsChXg.net]
- なんか前の方ではスピンロックとか意味不明な用語の使い方してるし、
名前だけ知ってて、基礎ができてないんじゃないか?
- 534 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 21:52:25.60 ID:bR1u9BVC.net]
- setTimeoutとyieldでsleepは簡単に実現できるけど、setTimeoutはjsには含まれてないもんな
どうでもいいがWScriptにはそのまんまsleepがあるな
- 535 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 23:10:08.57 ID:RAVtKX98.net]
- >>522
Atom.ioのエディタとChromeの開発者ツールかな 一応、打ち込んだ変数名の推測表示はしてくれる
- 536 名前:デフォルトの名無しさん [2015/12/24(木) 23:16:17.63 ID:QHPA1t+Q.net]
- >>527
なるほどありがとう もしChromeの使うならとくになにもインストールしなくてもついてるやつですか?
- 537 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 23:31:57.10 ID:RAVtKX98.net]
- >>528
Chromeに最初から付いてる、メニューから使えるやつ 開発中は.min.jsじゃなくて.jsを使うんだぞ ブレークしてウォッチすればライブラリにどんなメソッド有るかとか見えるし、中まで追っていける
- 538 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 09:17:26.40 ID:tK87TiQA.net]
- >>526
sleepはスレッドの停止であって、 コルーチンの留保とはぜんぜん違う
- 539 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 10:00:37.15 ID:/jFYFGFJ.net]
- >>480
香ばしワロタ
- 540 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 10:12:54.99 ID:tK87TiQA.net]
- まあsleepをビジーウェイト程度に考えてちゃ有用性は分からないだろうな。
ビジーウェイトじゃないし本来wakeとセットで有用なものでもあるからね。
- 541 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 17:56:50.40 ID:MWeRnh5+.net]
- ほーい現行スレ
peace.2ch.net/test/read.cgi/hp/1448293871/l50
- 542 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 20:46:43.80 ID:mCWQHNVj.net]
- そもそもUIスレッドでsleepできて何が嬉しいの?
- 543 名前:デフォルトの名無しさん [2015/12/25(金) 22:39:08.53 ID:XoBMqT50.net]
- >>529
なるほどありがとう。 ところでChromeでコードを書く場所はどこにあるの? F12押したときに出てくる画面の上部のタブのElementsやSourcesをクリックしてコードを見
- 544 名前:ても
これは見るだけはできても編集して書き込むことができない。 [] - [ここ壊れてます]
- 545 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 23:46:42.58 ID:OVXWXNxb.net]
- >>535
AtomやVisualStudio CodeなどエディタでHTML/CSS/JavaScript/PHP/Curlのテスト用コマンド などを書いて、 クライアントはChromeとかIEとかスマホとかいろいろ試すわけですよ ttp://tech.nitoyon.com/ja/blog/2015/11/20/try-vscode/ 書いて置いておくのはWebサーバのある場所 読み込んで動くのはクライアントに居るChromeやIE だから、Chromeでは見られるけど編集できないのが自然なわけ VisualStudioならWindowsフォーム書いてその場で動かせるのに、wwwってめんどくさいですね? そしたら ttp://Electron.atom.io てのを調べてみよう
- 546 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 04:58:55.05 ID:56T1awou.net]
- >>534
サブスレッドとの同期等
- 547 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 05:02:09.76 ID:h8/CI80S.net]
- >>537
それは答えじゃない。 何が嬉しいの?っていうのはユーザーにとっての話だ。 嬉しいこと(答え)ではなく、何ができるのかしか言っていない。 サブスレッドと同期ができて人は何が嬉しいのか? それが求められている答えだ。
- 548 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 16:51:32.69 ID:Dx/LxDfY.net]
- 簡単に同期ができるとマルチスレッドプログラミングが格段にやりやすくなる。
例えばメインスレッドでは同期処理と同じような感覚でマルチスレッドを使う関数を使える。 それだけならawaitでもいいじゃんと思うかもしれないが、 sleep/wakeはマルチスレッドプログラミングに付き物の競合問題も解決してくれる。 まあでもWebに関しては、現状の状態を鑑みるに、別にサブスレッドを束ねるマスタースレッドを作って、 UIスレッドでは下手にsleepしたりしないほうが良いと思う。 DOMとJSとのイベントループが絡まっているため、現状の仕様というか素直な実装による挙動だと、 JSでsleepするとUIも固まってしまう。 だから今のところの現実解は別個にマスターワーカーを作り、UI側とのやり取りはasync/await ワーカー同士はsleep/wakeでするのがベストだと思われるがどうか。
|

|