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

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

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

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

Q&A

1回答

1395閲覧

navigationStartが処理されるタイミングについて

taka_oct092018

総合スコア136

JavaScript

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

0グッド

0クリップ

投稿2021/10/30 15:44

編集2021/11/02 11:14

Navigation Timingの勉強しています。
「HTML5プロフェッショナル認定試験 レベル2 対策テキスト&問題集 Ver2.0対応版 P303」の
コードの内容が分かりません。
自分なりの解釈を書きます。

(1)「performance.timing.navigationStart;」はページを開こうとした瞬間のタイムスタンプが、
「new Date().getTime();」にはこの命令文が実行された時点のタイムスタンプがそれぞれ格納されている。

(2)イベントと命令文が処理される順序としては、navigationStartの方が先になるということでしょうか。
getTime()の方が先に記述されているだけに、こちらの方が先に処理されているようにも思えるのですが、
その辺が良く分かりません。

アドバイスをよろしくお願い致します。

<!DOCTYPE html> <html lang='jp'> <head> <meta charset='UTF-8'> <script type="text/javascript"> function onLoad(){ var now = new Date().getTime(); var page_load_time = now - performance.timing.navigationStart; alert("User-perceived page loading time: " + page_load_time); } </script> </head> <body onload="onLoad()"> </body> </html>

【追記】
「new Date().getTime()」の処理されるタイミングと記述箇所の関係が分かりにくいです。

まずは「その記述箇所によって同じ命令でもタイムスタンプが変わる」という理解が違っていると思います。

とのご指摘を頂きましたが、下記のサイトの説明ではタイムスタンプは変化していると思います。

https://pisuke-code.com/javascript-measure-processing-time/
https://ja.javascript.info/date
Date.now()

下記の考え方で合っていると思うのですが、どうでしょうか?
(1) 「var now = new Date().getTime();」の命令は記述された箇所で実行され、
変数nowにはUNIXエポックからの経過時間[ms]が入る。

(2) 「performance.timing.navigationStartには、以前のページがアンロード完了したタイミングのUNIXエポックからの経過時間[ms]がこのJavaScriptを実行するより前に入っています。」

(3) (2)故にnavigationStartには、例え記述された箇所が「var now = new Date().getTime();」の
後であってもそれ以前の経過時間(unload完了のタイミングの経過時間)が入ることになる。

(4) 両者の差を求めることによりページのロードに掛かった時間が得られる。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/11/01 04:58

ググればすぐ出てくると思いますが、performance.timing.navigationStartは以下のとおりです。 PerformanceTiming.navigationStart - Web APIs | MDN https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming/navigationStart ページ遷移の際に、以前のページのdocumentがアンロード完了したタイミングです。 Navigation Timing Level 2 https://w3c.github.io/navigation-timing/#processing-model 書いてあるとおりこの仕様はDeprecatedで、次の仕様もexperimental technologyなので、実際に製品コードで使うものではないでしょうね。 (1)はYes (2)はNo nowにはnew Date()されたタイミングのUNIXエポックからの経過時間[ms]が入ります。 performance.timing.navigationStartには、以前のページがアンロード完了したタイミングのUNIXエポックからの経過時間[ms]がこのJavaScriptを実行するより前に入っています。
taka_oct092018

2021/11/02 04:06

dameo様、返信ありがとうございます。 「new Date().getTime();」が実行されるタイミングは loadEventEnd以降になるということでしょうか。
退会済みユーザー

退会済みユーザー

2021/11/02 04:13

申し訳ありませんが、私のコメントを理解していれば分かるはずです。 説明内容に不明点があれば、引用する形でその部分をお尋ねください。
taka_oct092018

2021/11/02 05:39

dameo様 複雑に考え過ぎて混乱してしまいました。 内容が重複してしまいますが再度書かせてもらいます。 (1) 「var now = new Date().getTime();」の命令は記述された箇所で実行され、 変数nowにはUNIXエポックからの経過時間[ms]が入る。 (2) 「performance.timing.navigationStartには、以前のページがアンロード完了したタイミングのUNIXエポックからの経過時間[ms]がこのJavaScriptを実行するより前に入っています。」 (3) (2)故にnavigationStartには、例え記述された箇所が「var now = new Date().getTime();」の 後であってもそれ以前の経過時間(unload完了のタイミングの経過時間)が入ることになる。 (4) 両者の差を求めることによりページのロードに掛かった時間が得られる。 この考え方で合ってますでしょうか。
退会済みユーザー

退会済みユーザー

2021/11/02 05:45

すみませんが、不明点は何ですか?合ってるかどうかは知りません。
taka_oct092018

2021/11/02 08:54

dameo様 「new Date().getTime()」が処理されるタイミングです。
退会済みユーザー

退会済みユーザー

2021/11/02 09:16

その何が分からないんでしょうか?読んだままだと思いますが。
taka_oct092018

2021/11/02 09:57

dameo様 その通りです。 今回のサンプルコードを勉強する以前に2つの「new Date().getTime()」を利用してその間のコードの処理時間を測定するという内容を勉強しておりました。で、その記述箇所によって同じ命令でもタイムスタンプが 変わるということを学んで、今回のサンプルではちょっと理解するのに混乱してしまいました。
退会済みユーザー

退会済みユーザー

2021/11/02 10:08 編集

何が分からないのか聞いているのに、「理解するのに混乱した」などと曖昧なことを言っているから会話が成立せず、また何が理解できていないのかが伝わらないのですよ。 正直に言って何度もコメントを返す暇はないので、聞かれたことに正確に答えることを心がけてください。本来であれば私がコメントを返す義理もないのですが・・・ まずは「その記述箇所によって同じ命令でもタイムスタンプが変わる」という理解が違っていると思います。MDNのDateのコンストラクタの説明は読まれていますか? https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
退会済みユーザー

退会済みユーザー

2021/11/02 10:50

読まれたなら間違っている部分も分かりましたか? その後ろの記述は無関係な話なので、無視しますね。
退会済みユーザー

退会済みユーザー

2021/11/02 10:57

では私から言えることはここまでです。時間を無駄にしました。
taka_oct092018

2021/11/02 11:01

dameo様 ありがとうございました。
taka_oct092018

2021/11/02 11:26

dameo様 不快な思いさせて申し訳ないです。 でも、何が分かってないかの説明は難しいです。
taka_oct092018

2021/11/04 12:20

まずは「その記述箇所によって同じ命令でもタイムスタンプが変わる」という理解が違っていると思います。MDNのDateのコンストラクタの説明は読まれていますか? ↑ これはおかしくないですか? 記述箇所によって変化がないのなら下記のリンク先のコードでの時間差を求める プログラムも間違っていることになりますが? https://pisuke-code.com/javascript-measure-processing-time/
退会済みユーザー

退会済みユーザー

2021/11/04 12:24

えーっと・・・おかしくはないですね・・・ 私の書いてることが分からないのであれば、そこだと思うと言ってるだけなんですが・・・ 分かっているのであれば、疑問は解決してるはずなだけですよ どれだけ私の時間を使えば気が済むのでしょう?
退会済みユーザー

退会済みユーザー

2021/11/04 12:26

なお個人記事へのリンクへは飛んでません
taka_oct092018

2021/11/04 12:30

dameo様 ありがとうございました。 他の方の回答をお待ちしております。
guest

回答1

0

下記の考え方で合っていると思うのですが、どうでしょうか?

特に問題ないかと思います。

投稿2021/11/05 08:57

maisumakun

総合スコア146063

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

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

maisumakun

2021/11/05 09:02 編集

> まずは「その記述箇所によって同じ命令でもタイムスタンプが変わる」という理解が違っていると思います。 JavaScriptの術語ではない「命令」の意味の違いとか、そういう問題かと思います。「new Date().getTime()」全体で捉えれば「記述された箇所のタイムスタンプを取得する」という意味になります(もっとも、インスタンス化不要なDate.now()を使うことをおすすめします)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問