Web面接でよくある質問:リフローとリペイントの原理と違い

Web面接でよくある質問:リフローとリペイントの原理と違い

ブラウザのレンダリングメカニズム

1. ブラウザはページを処理するために2つのエンジンを使用し、ブラウザによってレンダリングエンジンは異なります。

レンダリングエンジン:

ChromとSafariは「WebKit」を使用します。

Firefor 「Geoko」を使用します

jsエンジン

2. ブラウザはHTMLを解析してDOMツリー、CSSを解析してCSSOM (CSS オブジェクト モデル);

3. 次にDOMツリーとCSSOMを組み合わせてレンダリングツリー(レンダリングツリー);

4. レンダリングツリーが完成すると、ブラウザはレンダリングツリーに従ってレイアウトします。レイアウトが完了すると、「ボックスモデル」が出力され、ビュー内の各ノードの位置とサイズを正確にキャプチャし、すべての測定値を画面上の物理的なピクセル値に変換します。(このステップにより、回流(reflow)が発生します)

5. レイアウトが完了すると、ブラウザはすぐにペイントスタンプイベントを発行し、レンダリングツリーを画面ピクセルに変換します。(このステップにより重繪(repaint)が行われます)

6.上記の手順を実行すると、ページが画面に表示されます。

ここに画像の説明を挿入

リフローは必然的に再描画を引き起こしますが、再描画は必ずしもリフローを引き起こすわけではありません。

リフローと再塗装

リフロー

コンセプト:

要素の構造、サイズ、レイアウトなどの変更によりレンダリング ツリーの一部またはすべてが変更されると、ブラウザーは DOM の一部またはすべてを再レンダリングします。

要素ノードの位置と距離が変更されたことを強調します。

逆流を引き起こす行為:

  • ブラウザウィンドウのサイズが変わる
  • コンテンツの変更
  • ノードを追加または削除する
  • CSS疑似クラスを有効にする
  • 等…

再描画

コンセプト:

ページ要素のスタイルがドキュメント フロー内の位置に影響を与えずに変更された場合、ブラウザーは単に新しいスタイルを要素に割り当てて再描画します。

要素ノードのスタイルを強調します。たとえば、色、境界線の実線が破線になります (位置と距離は変更されません)。

再描画を引き起こす操作:

  • 背景色のプロパティ値が変更された場合
  • border-colorプロパティの値が変更された場合
  • 可視性属性値が変更された場合
  • 等…

ここに画像の説明を挿入

以上がWeb面接でよく聞かれるリフローとリペイントの原理と違いについての詳しい内容です。Web面接でのリフローとリペイントについてさらに詳しく知りたい方は、123WORDPRESS.COM内の他の関連記事もぜひご注目ください!

以下もご興味があるかもしれません:
  • ブラウザのリフローと再描画を減らす方法
  • JavaScript における Repaint と Reflow の使用方法の詳細な説明
  • JavaScript パフォーマンスの最適化 (再描画とリフロー)
  • 高性能な WEB 開発ページのレンダリング、再描画、リフロー。

<<:  Linux で libudev を使用して USB デバイスの VID と PID を取得する方法

>>:  Navicat 経由で MySQL にリモート接続する方法

推薦する

ウェブデザインにおけるテキスト入力ボックスのパラメータの説明

一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われています。これは HTML 言...

Linux telnetコマンドの使用

1. はじめにtelnet コマンドは、リモート ホストにログインするために使用されます。これは、T...

MySQL 5.7.18 のインストール中に MySQL サービスの起動に失敗する問題の解決策

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...

MySQLの明示的な型変換の簡単な分析

CAST関数前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙...

ウェブページの幅を携帯電話の画面(ビューポート)の幅に自動的に適応させる実装コード

一般的な書き方は次のとおりです。 XML/HTML コードコンテンツをクリップボードにコピー<...

Dockerを使用してSonarQubeをインストールする詳細なチュートリアル

目次1. イメージをプルする1.1 関連するイメージをプルして実行する1.1.1 関連する画像を取得...

Django 2.2 を MySQL データベースに接続する方法

1. プロジェクトの実行時に報告されるエラー情報は次のとおりです。 ファイル "/home...

MySQLの文字セット設定を5分で理解しましょう

目次1. コンテンツの概要2. 文字セットと文字順序の概念と関係3. MySQL でサポートされてい...

Vueはシンプルなコメント機能を実装します

この記事では、Vueの簡単なコメント機能を実装するための具体的なコードを参考までに共有します。具体的...

MySqlデータベースをバックアップするいくつかの方法

mysqldump ツールのバックアップデータベース全体をバックアップする $> mysqld...

レスポンシブ Web デザインが価値のない 5 つの理由

この記事は Tom Ewer の Managewp ブログからのもので、現在人気のレスポンシブ デザ...

Linux で Hadoop クラスターをインストールするための詳細な手順

目次1. usrディレクトリにHadoopディレクトリを作成し、インストールパッケージをそのディレク...

コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?

無料ポイントインタビュアー:Linuxを使ったことはありますか?私:はいインタビュアー:メモリ使用量...

CSSレコードテキストアイコン配置のいくつかのソリューション

開発中に画像とテキストが 1 行に表示されることはよくあります。2 つのインライン要素を揃えるのは通...

MySQL スライディング集計/年初来集計の原理と使用例の分析

この記事では、例を使用して、MySQL スライディング集計/年初来集計の原理と使用方法を説明します。...