検索
ホームページウェブフロントエンドjsチュートリアルsetTimeou スレッドメカニズムの簡単な分析

setTimeou スレッドメカニズムの簡単な分析

Sep 09, 2017 am 09:16 AM
firefoxsettimeoutwebkit

『ハイ パフォーマンス JavaScript』という本を読んでいるときに、次の文を目にしました:

このようにページの上部にスクリプトを配置すると、通常、ユーザーが操作できるようになるまでに、空白のページが表示されるなど、顕著な遅延が発生します。ページの読み取りや操作を開始することさえできます。

説明は次のとおりです:

スクリプトをヘッドに配置すると、通常は次のように大幅な遅延が発生します: ページを開いたときにページが空白になり、ユーザーは読むことができませんまたは何らかの方法で対話します。

私の理解は、js を head に配置すると、js の読み込みと実行によりページのレンダリングが遅れるということです。 jsを最後に配置すると、jsの読み込みや実行よりも先にページの描画が行われるため、jsのブロックの影響を受けずに最初にユーザーに提示することができます。

検証するために、次の実験が行われました:

<p>hello world</p><script type="text/javascript">  
    function f() {    
    var t = +new Date();

    //运行5秒    while(true) {
      if(+new Date() - t > 5) {
        break;
      }
    }
  }
  f();  // ①</script>

実験結果は興味深いものです: hello world は出てくるまでに 5 秒待機しました。

詳細な検証: 上記のスクリプト部分を js 外部リンクとして導入するか、動的にロードします。 5秒待っても結果は出ました。

これは、すべての js がロードされて実行された後にページのレンダリングが行われる必要があることを意味します。上の段落には誤りがあります。

これは、jsがDOM操作を含まない限り、先頭と末尾に配置しても同じ効果があるという意味ですか?もちろん違います。たとえば、html内に画像やその他のリソースがある場合、jsが先頭に配置されている場合、画像のダウンロードはjsの実行が完了するまで待ってから開始する必要があります。ただし、jsが末尾に配置されている場合、画像のダウンロードは js の実行をブロックしません。画像のダウンロードと js の実行を並行して実行できます。

これで問題は終わりですか?もちろんそうではありません。フロントエンドの作業の非常に重要な部分は、上記の JS を最適化する方法です。そこでsetTimeoutを考えました。

setTimeout は、js コードの実行を遅延させるために使用されます。これには、背後での js の実行がブロックされないという利点があります。したがって、setTimeout もページのレンダリングをブロックしないと思います。

オプション 1: 上記の①の部分を次のように置き換えます:

 setTimeout(f,0);

その結果、hello world は出力されるまでに 5 秒待つ必要があります。ただし、注意して見ると、ブラウザーのタグにロード記号が表示されていないことがわかります。

推測を続けます。0 は小さすぎるため、ブラウザーは setTimeout の背後に JS コードがないことを検出し、すぐに setTimeout の内容、つまり f 関数を実行します。そこで時間を 100ms に変更します。

オプション 2: 上記の①の部分を次のように置き換えます:

setTimeout(f, 100);

その結果、Hello World が即座にポップアップ表示されます。ちょっと興奮。興味のある学生は、この時点で、クリティカル値があることがわかります (ブラウザごとにクリティカル値が異なります)。それ以外の場合は、hello world が即座にポップアップ表示されます。 、内部の機能が完了するとポップアップします。

すごいですね、なぜこんなことが起こるのでしょうか?この質問に答えるには、ブラウザのスレッド メカニズムを研究する必要があります。

ブラウザ内には少なくとも 2 つのスレッドがあることがわかっています。js を解析するスレッドとインターフェイスをレンダリングするスレッドです。ここでは、それらを仮に JS スレッドと UI スレッドと呼びます。

jsはDOMを操作できるため、これらの要素の属性を変更しながらインターフェースを描画すると(つまり、JSスレッドとUIスレッドが同時に実行されると)、描画スレッドの前後で取得した要素のデータが保持されてしまう可能性があります。一貫性がなくなる。したがって、予期しないレンダリング結果を防ぐために、ブラウザーは JS スレッドと UI スレッドがキュー内で同期的に実行されるように制御します。

上記の質問に戻りますが、setTimeout が実行されると、JS スレッドの実行の途中で新しいタイマー スレッドが開きます。JS スレッドが完了すると、すぐに setTimeout が実行を開始することがわかります。つまり、時間が上記の臨界値未満である場合)、UI スレッドの実行時間が長すぎることによって引き起こされる setTimeout の重大な遅延によって引き起こされる悪いエクスペリエンスを回避するために、ブラウザーは setTimeout の有効期限が切れるまで待機することを選択し、その後実行されます。中のjs。 setTimeout の有効期限が切れるまでに長い時間がかかることが判明した場合、時間の無駄を避けるために、ブラウザーはすぐに UI スレッドに切り替えることを選択します。

結論: setTimeout は、時間のかかる JS コードの処理に使用できますが、2 番目のパラメーターを小さすぎないように注意してください。小さすぎると、同じ空白のページが表示されます。すべてのブラウザで満足できる 100 ミリ秒程度が推奨されます。もちろん、IE と互換性がない場合は、setTimeout を放棄し、Web Workers を選択するのが良いでしょう。

HTML4 では、js によって作成されたプログラムはシングルスレッドであり、Web ワーカーは HTML5 の新機能であり、Web アプリケーションでバックグラウンド処理を実装するために使用されるテクノロジーです。この API を使用すると、バックグラウンドで実行されるスレッドを非常に簡単に作成できます:

var worker = new Worker(&#39;*.js&#39;);// 后台线程是不能访问页面或窗口对象的// 但可通过发送消息和接受消息与后台线程传递数据worker.onmessage = function (e) {};
worker.postMessage = function (e) {};

以上がsetTimeou スレッドメカニズムの簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、