検索
ホームページウェブフロントエンドjsチュートリアルWebサイトがブラウザをクラッシュさせる原因まとめ(各種ブラウザ) 推奨_JavaScriptスキル

ある企業との面接の際、面接官から「ブラウザがクラッシュする原因は何ですか?」と質問されました。私は愚かなので、メモリリークの質問にしか答えませんでした。実際、Web ページの読み込みプロセス中に、さまざまな理由でブラウザの応答が非常に遅くなったり、ブラウザが応答を失ったり、マシンが他の操作を実行できなくなったりすることがよくあります。

訪問者にとって、Web サイトにログインするとブラウザがすぐにクラッシュすることは誰にとっても耐え難いことだと思います。Web サイトがブラウザをクラッシュさせる理由の概要は次のとおりです。

1。メモリ リーク

まずメモリ リークについて説明しましょう。メモリ リークが原因で Web サイトがクラッシュする場合は、サーバーのクラッシュとブラウザのクラッシュの 2 つの状況があります。メモリ リークによって引き起こされる問題は明白で、割り当てられたメモリへの参照が失われ、システムが動作している限りプロセスはメモリを使用し続けます。その結果、プログラムがより多くのメモリを占有すると、マシンが完全に動作を停止してメモリが完全にクリアされるまで、システムのパフォーマンスが低下します。

Apache の Web サーバーは C/C で書かれています。言うまでもなく、C/C には回復不能なメモリがあり、メモリ不足やシステムクラッシュが発生することがあります。 Java では、メモリ リークは、アクセス可能だが役に立たないオブジェクトが割り当てられていることを意味します。これらのオブジェクトは GC によってリサイクルされませんが、メモリを占有します。

クライアント側では、JavaScript によって引き起こされるメモリ リークによってブラウザがクラッシュする可能性もあります。 JavaScript のメモリ リークに関するより権威のある記事には、「JavaScript のメモリ リーク パターン」および「Internet Explorer のリーク パターンの理解と解決」などがあります。 》。

JavaScript はガベージ コレクター (GC) 言語です。つまり、メモリはオブジェクトの作成に基づいてオブジェクトに割り当てられ、オブジェクトへの参照がない場合にはブラウザによって再利用されます。記事「Fabulous Adventures Incoding」によると、「JScript は非世代のマーク アンド スイープ ガベージ コレクターを使用します。」、「非世代のマーク アンド スイープ」は使用できます。このように、ブラウザーは JavaScript を処理するために純粋なガベージ コレクションを使用しませんが、ネイティブ オブジェクト (Dom、ActiveX オブジェクトなど) のメモリを処理するために参照カウントも使用します。

参照カウント システムでは、参照される各オブジェクトは、そのオブジェクトを参照しているオブジェクトの数を知るためにカウントを保持します。カウントがゼロに達すると、オブジェクトは破棄され、オブジェクトが占有していたメモリはヒープに返されます。 オブジェクトが相互に参照する場合、循環参照が形成されます。ブラウザ (IE6、Firefox2.0) は純粋な JavaScript オブジェクト間の循環参照を正しく処理できますが、参照カウント システムにより、オブジェクトの相互参照を行うことができません。参照カウントをゼロにすることはできないため、ブラウザは JavaScript とネイティブ オブジェクト (Dom、ActiveX オブジェクトなど) 間の循環参照を処理できないため、破棄されます。したがって、Native オブジェクトと JavaScript オブジェクトの間で循環参照がある場合、メモリ リークが発生します。

簡単に言うと、ブラウザは参照カウントを使用してネイティブ オブジェクトのメモリを処理し、ネイティブ オブジェクトに関係する循環参照はメモリ リークの原因となるため、参照カウントされたオブジェクトを破棄することはできません。次の例を使用してこの文を理解すると、JavaScript によって引き起こされるメモリ リークを基本的に理解できます。

コードをコピーします コードは次のとおりです。

var
window.onload; = function( ){
// DOM オブジェクトへの JavaScript オブジェクト obj の参照は、id に従って取得されます。
obj=document.getElementById("DivElement"); // DOM オブジェクトはこの JavaScript オブジェクトへの参照は、expandoProperty 実装
document.getElementById("DivElement").expandoProperty=obj;


; JavaScript オブジェクトと DOM オブジェクトの間に参照が生成されます。 DOM オブジェクトは参照カウントによって管理されるため、どちらのオブジェクトも破棄されません。

クロージャに遭遇してイベント応答コードをネイティブ オブジェクトにバインドすると、クロージャ メモリ リークが簡単に発生します。主な理由は前者と同じで、これも JavaScript オブジェクトとネイティブ オブジェクト間の循環参照です。コードがより隠されているというだけです。


コードをコピー コードは次のとおりです:

window.onload = function AttachEvents(element){
//要素には関数 ClickEventHandler() への参照があります
element.attachEvent( " onclick " , ClickEventHandler
function ClickEventHandler); ( ){
//この関数には、Scope を呼び出すための AttachEvents(element) を指す参照があります。
//つまり、パラメータ要素が実行されます。
}
}

JavaScript がメモリ リークを引き起こし、ブラウザの負荷を増加させ、ブラウザのクラッシュを引き起こす可能性がある理由を簡単に理解します。私たちがしなければならないことは、この状況を回避することです。上記の「JavaScript のメモリ リーク パターン」および「Internet Explorer の理解と解決」を参照してください。リークパターン 》理解するための 2 つの記事。 JavaScript のメモリ リークに対処する最終目標は、JavaScript オブジェクトとネイティブ オブジェクト間の循環参照を解除するか、参照カウントをクリアしてオブジェクトを解放することです。

クロージャのメモリ リークなど、一部のメモリ リークは検出が難しい場合があります。メモリ リークを検出するには、「JavaScript メモリ リーク ツールの使用」を参照してください。

2。複雑な Web ページのコードとブラウザのバグ

多数の個人 Web サイトと低品質の Web サイトコードの出現により、ブラウザーで何らかのバグが発生すると、ブラウザーのレンダリング エンジンで処理中にエラーが発生します。ループまたは直接クラッシュなどの Web ページ コード。

HTML コードにより Web サイトがクラッシュする

これは、IE6 のクラッシュを引き起こす HTML 構造エラーです。

の前後に文字を追加すると、IE6 がクラッシュします。
コードをコピー コードは次のとおりです:

BR>"http://www.w3.org/TR/html4/loose.dtd">

head>


:fixed; ">






website

では、どのバージョンの XHTML や HTML を使用しても、DOCTYPE 宣言が含まれていれば、IE6 はすぐにクラッシュします。DOCTYPE 宣言がない場合、エラーは発生しません。文書型宣言に関連します。

IE6 をクラッシュさせる CSS コード コードはウェブサイトCats who Code

から参照しています。このバグは 2007 年に発見され、日本人によって発見されたと言われています:

コードをコピー
コードは次のとおりです:

理由IE6 ではテーブル Content に直接配置されているため、mshtml.dll モジュールが破損し、ブラウザが閉じられます。IE6 でない場合は安全です。
さらに、IE6 に存在するバグとして、次の状況も発生します。この問題は、疑似クラスが a:active の場合にも発生します:


コードをコピー


コードは次のとおりです:
IE6 がクラッシュする、IE6 がクラッシュする
解決策: haslayout をトリガーするには、zoom:1; を に追加します。




コードをコピー

コードは次のとおりです:

IE7 をクラッシュさせる CSS コード

このバグは Stealing Rice に由来しており、省略された単語を処理するときに IE7 がクラッシュする原因と推定されています。

コードをコピー コードは次のとおりです:




  • クラッシュ クラッシュ クラッシュ クラッシュ
  • crash ie7



解決策:
をトリガーするには、zoom:1 を追加します。

IE6 をクラッシュさせる JavaScript コード

Internet Explorer Sucks より、この Web サイトはコードを使用しています。IE6 を使用してアクセスすると、ブラウザーがすぐにクラッシュします。コードは次のとおりです:

コードをコピー コードは次のとおりです:
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
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の実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:学習曲線と使いやすさPython vs. JavaScript:学習曲線と使いやすさApr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール