1.クロスラベル⻚コミュニケーションズ
異なる通信、ラベル間⻚の原則の本質は、一つのトランスポートの使用にあるこれらのがかもしれ共有中間媒体より頻繁に使用⽐救済は次のとおりであるので、:
⽗⻚⾯のwindow.open()とサブメニュー⻚⾯のpostMessage
非同期、によって window.open( 'について:空白')と tab.location.href = '*'
同じドメインの下の設定は、共有のlocalStorageとリスニング window.onstorageを
繰り返し同じ値⽆トリガ法を書いています
これは、モードなどシークレット制限されます
共有設定のクッキーと常にポーリング汚れチェック(のsetIntervalを)
サーバーまたは中間層の実装により、
2.ブラウザのアーキテクチャ
ユーザーインターフェイスを使用して⾯
メインプロセスカーネル
レンダリングエンジン
JS リード エンジン
スタックの実行
イベントトリガーのスレッド
メッセージキュー
マイクロタスク
マクロタスク
オープンネットワークの非同期スレッド
タイマースレッド
3.次のイベントループブラウザ(イベントループ)
イベントループ手段:それを実行するためのマクロタスク、マイクロタスクリストを実行し、空、タスクサイクリングはミクロ、マクロを実行し、タスクリストをクリアします
マイクロタスクマイクロタスク(ジョブ):約束/ AJAX / Object.observe( 救済廃止)
マクロ 任意の タスクのマクロタスク(タスク):setTimout /スクリプト / IO / UIのレンダリング
入力4. スタートのプロセスを表示するURL
DNSのソリューションの分析
TCP 3ウェイハンドシェイク時計
送信要求、部分解析ファイル要求(ヘッダ、本体)を設定したURL、
サーバーが返す要求されたファイルを(HTML)
ブラウザのレンダリング
HTMLパーサ - > DOMツリー
アルゴリズムをラベリング、フラグの状態の要素を作ります
DOMツリー構築
CSSパーサ - >スタイルツリー
ソリューション解像度の CSSコード、スタイルツリーに⽣
添付ファイル - >ツリーをレンダリング
バインディング DOM ツリー とツリーをレンダリングするために、スタイルツリーを⽣
レイアウト:布 局
GPUの絵:ピクセルレンダリング⻚⾯
再描画と還流
ヘアスタイル要素⽣変更は、ブラウザが要素を再描画するための更新をトリガする必要がある場合。このプロセス、操作の二つのタイプ、すなわち、戻り再描画が存在します
再描画(再描画):レイアウトスタイルに影響を与えない要素を変更する場合、ブラウザが⾏使用に要素を再描画しますピクセルのみUI層のための画面を再描画する必要があるので、あまり損失ので、このケースを更新
リフロー(リフロー):サイズ要素、構造、またはトリガー特定の属性は、ブラウザが⾯⻚再レンダリングされます、逆流と呼ばれます。この場合は、ブラウザが再計算を通過する必要があり、計算も⾯⻚布再する必要が 事務局、したがって重い動作を制御します。これは、リフロー操作をトリガします。
⻚⾯初期レンダリング
ブラウザウィンドウ-コネクタが⼩の変化をズーム
要素サイズは、場所、コンテンツ開発⽣変化素子は、ズーム、フォントを変更し⼩
ティムの追加または削除でき⻅ DOM要素
刺激ライブ CSSの擬似クラスを(例えば::ホバー )
一定の救済をクエリ特定の属性を使用するか、リコール
clientWidth、clientHeight、のclientTop、clientLeft offsetWidth、
offsetHeight、offsetTop、offsetLeft
scrollWidth、scrollHeight、scrollTopスプライト、scrollLeft
getComputedStyle()
getBoundingClientRect()
scrollTo()
確かに逆流再描画をトリガー、トリガーの逆流を与えられていない⼀再描画します。、小さいサイズでオーバーヘッド返すの高いコストを再描画します
ベストプラクティス:
CSS
避けてください使用を避けるのテーブルレイアウトを
アニメーション効果に適用する位置にプロパティ絶対または固定要素に
ジャバスクリプト
頻出操作パターン、システムをまとめることができ避け⼀ ⼀改正を
使用してみてください ⾏スタイルの変更にクラスを
削減の追加および削除DOMの数を、あなたが使用することができ 、文字列 または DocumentFragmentの⼀-time挿入
制限の最適化、サンプルの変更タイプが可能ディスプレイ:変更後なし
救済は、言及した上⾯逆流を誘発することができ、複数のトリガーを避けるために、あなたは、使用して試すことができた場合 の変数が存在し、ライブ
6.ストレージ
私たちは、多くの場合、一部のデータが通過、何を格納⼀でビジネスに必要な多くの場合に分けることができます 短い一時的な保管 と 保持長期揮発性記憶を。
過渡は、我々は唯一の時間を実行すると、ときにのみ、メモリに格納されたデータに必要な使用することができ、永続ストレージを分けることができ、ブラウザ側の とサーバー側
ブラウザ:
クッキー:ユーザーIDを保存するために、通常の使用を使用して、ログインステータス
HTTPを自動的に行う、ボリュームの限界 4K 、自作の有効期限を設定してもよいです
localStorage /のsessionStorage:⻓長期保存/削除するには、ウィンドウ・コネクタに近い、 ボリュームがこれらに限定されている 4〜5M
indexDB
サーバー:
分散キャッシュのRedis
データベース
7.Webワーカー
最近のブラウザのための JavaScriptが作成するために、マルチスレッド環境を。新しいタスクが割り当てられると、部分的にすることが可能にワーカースレッド⾏を実行するときに二つのスレッドがあってもよい直ちに独立注目相互干渉を実行して、乾燥していない場合を介してメッセージを使用して自動的に、機械システムそれぞれが通信します。
基本法を使用します:
// ワーカー作成 のconst労働者 = 新しい新しいワーカー(「work.js」を); // プッシュメッセージ主要プロセスに worker.postMessage(「Hello Worldの」); //はニュースにメインプロセスをリッスン worker.onmessage = 機能(イベント) { にconsole.log( + '受信メッセージ' event.data); }
制限事項:
相同制限
法⽆ 使い⽤ドキュメント/ウィンドウ/警告/確認
ローカルリソースをロード⽆法律を
8.メモリリーク
予期しないグローバル変数:⽆方法が回収され、
タイマー:イベントが解除され、正常に閉じられた外部変数⽆法を使用して引用し、得られていません
モニター:なし破壊する権利(ブラウザの低いバージョンが表示される場合があります)
閉鎖:原因⽗段階のプロセス変数が解放され⽆
引用DOMを使用します。DOMを要素が削除された場合、適切にクリアされていないメモリを使用して引用
使用であってもよいクロムでタグメモリ⾏にタイムライン、視覚的記憶、外れ値を識別するために変更を表示します。