プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • JavaScript
  • 【JavaScript】動作の仕組み(非同期、シングルスレッド、イベント駆動等)
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【JavaScript】動作の仕組み(非同期、シングルスレッド、イベント駆動等)

04.29

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

非同期処理が基本

JavaScriptは、「非同期処理が基本」と言われています。

では、非同期処理って何でしょうか?普通のJavaとかのプログラミング言語ではあまり聞きなれない言葉ですよね。

同期・非同期とは?

わかりやすく言えば、「ソースコードの処理が一本道で書かれているかどうか?」ということです。

同期処理

Java等の言語では、基本的には同期処理で動いています。(ただ、マルチスレッドをさせるために、非同期メソッド等もありますが…)

非同期処理

JavaScriptの場合は、「非同期処理」なので、基本的には一本道ではなく、色々なコードに飛び移りながらソースが実行されます。

通常のプログラムであれば、何か関数を呼び出した場合は、その関数が終了するまでは次の行の処理に移ることはありません。

しかし、JavaScriptのようなWebプログラムの場合は、サーバーとの通信の結果数秒も待たされてしまうと困ります。その時点でWebページが止まってしまったら「何だこのページは!?」ってことになり、影響が大きいですからね。

そこで考え出されたのが、「一度関数を呼び出した場合は、一度呼び出し元に戻り、関数の結果を戻せる状態になったら呼び出し元に通知をする。」という仕組みが考えられました。

これを「非同期処理」と呼んでいるのです。

シングルスレッド

JavaScriptは、「シングルスレッド」なので、二つの処理を並列して実行させることができません。

なので、片方の処理が非常に長いと、そこで処理自体が止まってしまいます。

処理が止まってしまわないような対策

そこでJavaScriptでは、「イベントループ」と呼ばれるループを作って、そこに「キュー」をためる形でタスクを処理していくようになっています。

イベントループとは?

イベントをずっと監視して待っているようなループ構造のことです。

イベント駆動(イベントトリブン)型

JavaScriptは、ブラウザ上で動くということもあり、「マウスをクリックしたタイミング」、「マウスを動かしたタイミング」等利用者の操作に応じて処理をするという「イベント駆動」の概念が取り入れられています。

具体的には、下記の記事で使い方を解説しています。

【JavaScript】イベントハンドラ、イベントリスナについて

ディスク上のデータの書き換えはできない。

JavaScriptは、セキュリティ上の観点からディスク上のデータの書き換えはできません。

例えば、あるサイトにアクセスした際に、自分のPCのローカルのファイルを削除されるというプログラムが組まれていたら、大多数の人が困るでしょう。

そういう意味で、JavaScriptでは、ディスク上のデータの書き換えは、禁止されているのです。

ディスク上に書き込む方式の例外「クッキー(Cookie)」

基本的には、JavaScriptからコンピュータにデータを書き込むことは出来ませんが、その例外として「クッキー(Cookie)」と呼ばれる仕組みを提供しています。

クッキーを利用することで、クライアントに対して、小さなテキストを保存することができました。

詳しくは、下記の記事で解説しています。

【Webセキュリティ】クッキーの仕組み

新たなデータ蓄積手法「Web Storage(ストレージ)」

クッキーを使えば、クライアントにデータを蓄積することができました。

しかし、クッキーでは、下記のデメリットがあります。

  • JavaScriptからは操作がしずらい。
  • サイズも制限されている。

そこであらたに登場した技術として「Web Storage(ストレージ)」という技術が登場しています。

詳しくは、下記の記事でも解説しています。

【JavaScript】「Web Storage(ストレージ)」、ローカルストレージの実装など

スポンサーリンク
  • 2018 04.29
  • miyabisan2
  • コメントを書く
  • JavaScript
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 07.08

    【JavaScript】「ECMAScript2015」から導入された「モジュール」について

  2. 2018 04.11

    【jQuery】イベント処理について深く理解する。

  3. 2020 05.09

    【JavaScript】配列の便利メソッド「map」、「filter」、「find」、「reduce」について

  4. 2019 12.08

    【Ruby on Rails】YarnでのJavaScriptパッケージ管理

  5. 2023 01.09

    【JavaScript】ejsについて

  6. 2021 08.16

    【JavaScript】「TypeScript」でESlintを使うための設定

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【データベース設計】物理的なファイル配置の検討(物理設…

【HTML】HTML5の影響(JavaScriptや追…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー