質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

解決済

4回答

826閲覧

複数のJavaScript処理の順番を可視化するようなツール

tesopgmh

総合スコア146

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

2クリップ

投稿2019/09/03 08:14

例えばexampleというインプットがあったとして

<input type="text" id="example" name="example" value="" >

このフォームに
次のように複数のJavaScriptが処理を加えるような構造があったとします

■1.aaa.js セットタイムアウト(ランダム秒)でexampleに1を入れて、チェンジする ■2.bbb.js セットタイムアウト(ランダム秒)でexampleに2を入れて、チェンジする ■3.ccc.js セットタイムアウト(ランダム秒)でexampleに3を入れて、チェンジする ■4.ddd.js イベントリスナー exampleがチェンジされたらその値に2をかける

この場合、exampleには三種類の結果2,4,6が入った状態になる可能性があると思います

・1-4-2-4-3-4 = この流れで処理がされた場合は最終的な値は 6
・2-4-1-4-3-4 = この流れで処理がされた場合も最終的な値は 6
・3-4-1-4-2-4 = この流れで処理がされた場合は最終的な値は 4
・1-4-3-4-2-4 = この流れで処理がされた場合も最終的な値は 4
・2-4-3-4-1-4 = この流れで処理がされた場合は最終的な値は 2
・3-4-2-4-1-4 = この流れで処理がされた場合も最終的な値は 2

この処理の流れの部分(1-4-2-4-3-4)を解析するようなツールはありませんでしょうか
この例ですと、console.logを入れれば期待する結果になりますが

複数人が制作した
大量のJavaScriptをロードして処理が入り組んでいるようなサイトで
稀にイレギュラーケースの値が出てしまうのをなぜそういう値になったのか処理の流れを調査したいです

プロミス使え、はそのとおりですが、そういった根本的な修正はしたいですが出来ないです
複数のJavaScript処理の順番を可視化するようなツール
調査ツールまたは調査できるような手法をご存じの方教えくださいませ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FiroProchainezo

2019/09/03 08:16

ChromeのDevToolsじゃダメなんですか?
yambejp

2019/09/03 09:08

> イベントリスナー exampleがチェンジされたらその値に2をかける 2をかけた値をexampleに戻したら、そのチャンジにも反応するのでは? exsampleに戻さないのでしょうか?
guest

回答4

0

ベストアンサー

複数のJavaScript処理の順番を可視化するようなツール

各スクリプト内で自分を通ったときにログを吐き出す処理をいれておくのが
単純でよいでしょうけど、そういうことではないのでしょうね

inputに値が変わったときその値をもとにどのjsを通ったか判断する手も
ないことはないですがプロパティは変更を見ないので属性を変更する
jsになっている前提が必要ですね

sample

javascript

1<script> 2var a=[1,2,3].map(x=>[x,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0]); 3var b={1:'aaa.js',2:'bbb.js',3:'ccc.js'}; 4setTimeout(()=>{document.querySelector('#example').setAttribute('value',1);},a[0]*1000); //aaa.js 5setTimeout(()=>{document.querySelector('#example').setAttribute('value',2);},a[1]*1000); //bbb.js 6setTimeout(()=>{document.querySelector('#example').setAttribute('value',3);},a[2]*1000); //ccc.js 7var mo = new MutationObserver(function(r){ 8 var t=r[0].target; 9 console.log(t.value*2); 10 console.log(b[t.value]); 11}); 12var opt = { 13attributes: true, 14attributeFilter:['value'], 15}; 16 17window.addEventListener('DOMContentLoaded', ()=>{ 18 mo.observe(document.querySelector('#example'),opt); 19}); 20</script> 21<input type="text" id="example" name="example" value="" >

投稿2019/09/03 09:13

yambejp

総合スコア114823

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tesopgmh

2019/09/09 03:37

Javcascriptにこんな便利な関数があったんですね、初めて知りました これを仕込むことで意図したデバッグができそうです、ありがとうございました!
guest

0

y_waiwaiさんの言う様に各所にログ出すように仕掛けつつ
MutationObserverで値の監視をしておくと状況つかみやすいのかと思います。

投稿2019/09/03 09:07

oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tesopgmh

2019/09/09 03:38

ありがとうございました!MutationObserverで解決いたしました
guest

0

ChromeのDeveloper ToolsからProfilerを見てみる、のも1つの方法かもしれません。

投稿2019/09/03 08:26

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tesopgmh

2019/09/09 03:38

ありがとうございました!MutationObserverで解決いたしました
guest

0

各所にログを仕込んでおいて、ログファイルを書き出す、ってことでいいんではないかと。

投稿2019/09/03 08:21

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tesopgmh

2019/09/09 03:38

ありがとうございました!MutationObserverで解決いたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問