検索

問題

通常、XML の使用について言及するとき、最も問題になるのは XML の冗長性と XML の解析速度です。この問題は、大きな XML ファイルを処理する必要がある場合に特に深刻になります。ここで言及するのは、XML の処理速度を最適化する方法に関するトピックです。

XML ファイルの処理を選択する場合、通常 2 つのオプションがあります:

DOM。これは、XML の構造情報をツリー状に構築し、インターフェースとメソッドをトラバースする方法を提供します。 。
SAX は低レベルのパーサーであり、要素ごとに前方読み取り専用処理を実行しますが、構造情報は含まれません。
上記のオプションにはそれぞれ長所と短所がありますが、どちらも特に優れた解決策というわけではありません。長所と短所は次のとおりです:

DOM

利点: すべての XML 構造情報がメモリ内に存在するため、使いやすい。シンプルなトラバーサルと XPath のサポート。
短所: 解析速度が遅すぎ、メモリ使用量が高すぎ (元のファイルの 5 倍から 10 倍)、大きなファイルに使用するのはほぼ不可能です。
SAX

利点: 解析は高速で、メモリ使用量は XML のサイズに関係ありません (XML が大きくなってもメモリを増やすことなく実行できます)。
短所: 構造情報がないため、トラバースできず、XPath をサポートしていないため、使いやすさが劣ります。構造が必要な場合、少し読んで少し構築するだけで済み、メンテナンス性が非常に悪いです。
基本的に DOM と SAX は両極端であることがわかりますが、どちらもほとんどの要件を十分に満たすことができず、別の処理方法を見つける必要があります。 XML の効率の問題は、XML 自体の問題ではなく、上で見た 2 つの方法が異なる効率のトレードオフを持っているのと同じように、XML を処理するパーサーの問題であることに注意してください。

考え方

私たちは DOM のようなメソッドを使用することを好みます。トラバースできるため、つまり XPath がサポートされ、使いやすさが大幅に向上しますが、DOM の効率は非常に低いです。すでにご存知のとおり、効率の問題は処理メカニズムにあります。では、DOM のどのような側面がその効率に影響を与えるのでしょうか?以下で包括的な分析を行ってみましょう:

仮想マシン (ホスト型、または類似のメカニズム) テクノロジーに基づいた今日のほとんどのプラットフォームでは、オブジェクトの作成と破棄は時間のかかる作業です (ここでは主にガベージ コレクションについて言及する価値があります)時間がかかりますが、DOM メカニズムで使用される多数のオブジェクトの作成と破棄は、間違いなくその効率に影響を与える理由の 1 つです (大量のガベージ コレクションが発生します)。
各オブジェクトには、そのメモリ アドレスを保存するために追加の 32 ビットが必要になります。DOM のように多数のオブジェクトがある場合、この追加コストは小さくありません。上記 2 つの問題を引き起こす主な効率の問題は、DOM と SAX の両方が抽出解析モードであるため、DOM と SAX の両方で大量のオブジェクトの作成 (破棄) が必要となり、効率の問題が発生することです。いわゆる抽出解析とは、XML を解析するときに、DOM または SAX が元のファイルの一部 (通常は文字列) を抽出し、それをメモリ内で解析して構築することを意味します (出力は当然 1 つまたはいくつかのオブジェクトです)。 DOM を例に挙げると、DOM は各要素、属性、処理命令、コメントなどをオブジェクトに解析し、それに構造を与えます。これはいわゆる抽出解析です。
抽出の問題によって引き起こされるもう 1 つの問題は、DOM では更新効率です (SAX は更新をサポートしていないため、これについてはまったく触れません)。変更が必要になるたびに、必要なのは、オブジェクト情報を再度 XML 文字列を返します。この解析は完全な解析であることに注意してください。つまり、元のファイルは使用されませんが、DOM モデルは完全に XML 文字列に直接再解析されます。つまり、DOM は Incremental Update (増分更新) をサポートしていません。
気づかれないかもしれないもう 1 つの「小さな」問題は、XML のエンコーディングです。どのような解析方法を使用する場合でも、XML のエンコーディング、つまり、読み取り時と書き込み時のデコードを処理できる必要があります。 DOM に関するもう 1 つの効率の問題は、大規模な XML に小さな変更を加えるだけの場合、最初にファイル全体をデコードしてから構造を構築する必要があることです。目に見えないが、それは別の出費である。
問題を要約すると、DOM の効率の問題は主に抽出解析モードにあります (SAX にも同じ問題があり、これが一連の効率のボトルネックを引き起こしています)。そうすれば、さらにXMLの処理効率が向上すると考えられる。 XML の使いやすさや処理効率が大幅に向上すれば、XML の適用範囲や適用モデルはさらに昇華され、これまで考えられなかった素晴らしいものが数多く生み出されるかもしれません。

解決策

VTD-XML は、上記の質問を検討した結果得られる答えです。これは、その優れたメカニズムにより、上記の問題をうまく解決 (回避) できます。 、そして「ついでに」、高速解析とトラバーサル、XPath サポート、増分更新など、他の非抽出的な利点ももたらします。ここに、VTD-XML の公式 Web サイトから取得した一連のデータがあります:

VTD-XML の解析速度は、SAX (NULL コンテンツ ハンドラーを使用) の 1.5 倍から 2.0 倍です。 NULL コンテンツ ハンドラーを使用すると、SAX 解析に追加の処理ロジックが挿入されないことを意味します。これが SAX の最大速度です。
VTD-XML のメモリ使用量は、元の XML の 1.3 倍から 1.5 倍になります (1.0 倍の部分は元の XML、0.3 倍から 0.5 倍の部分は VTD-XML が占める部分です)。 DOM の使用法は、元の XML の 5x ~ 10x と同じです。たとえば、XML のサイズが 50MB の場合、VTD-XML が占有するメモリは 65MB ~ 75MB となり、DOM が占有するメモリは 250M ~ 500MB になります。 DOM を使用して、このデータに基づいて大きな XML ファイルを処理することは、ほぼ不可能なオプションです。
信じられないと思われるかもしれませんが、DOM よりも使いやすく、SAX よりも高速な XML パーサーを作成することは本当に可能でしょうか?結論を急がずに、VTD-XML の原則を見てみましょう。

基本原理

ほとんどの優れた製品と同様、VTD-XML の原理は複雑ではありませんが、非常に賢明です。非抽出の目的を達成するために、元の XML ファイルをデコードせずにそのままバイナリ モードでメモリに読み込み、このバイト配列上の各要素の位置を解析して、後続の走査操作を記録します。これらの保存されたレコードに対して実行され、XML コンテンツを抽出する必要がある場合は、レコード内の位置とその他の情報を使用して元のバイト配列がデコードされ、文字列が返されます。これはすべて単純に見えますが、この単純なプロセスには複数のパフォーマンスの詳細があり、いくつかの潜在的な機能が隠されています。まず、各パフォーマンスの詳細を説明します。

過剰なオブジェクトの作成を避けるために、VTD-XML は、ヒープが必要ないように、レコード タイプとして元の数値タイプを使用することにしました。 VTD-XML の記録メカニズムは VTD (Virtual Token Descriptor) と呼ばれ、VTD はトークン化段階でのパフォーマンスのボトルネックを解決します。これは実に賢明で思慮深いアプローチです。 VTDは、各要素の開始位置(オフセット)、長さ(length)、深さ(深さ)、トークンの種類(タイプ)などの情報を記録する64ビット長の数値型です。
VTD は固定長であることに注意してください (正式に 64 ビットを使用することが決定されました)。これは、長さが固定されているため、読み取り、クエリ、その他の操作の際に非常に効率的 (O(1)) です。 VTD を編成する配列の効率的な構造により、オブジェクトの大量使用によって引き起こされるパフォーマンスの問題が大幅に軽減されます。 VTD の超強力な点は (まったく誇張ではありません)、XML などのツリー状のデータ構造をバイト配列の操作に簡単に変換できることです。想像できるあらゆる操作を XML に適用できます。これは、読み込まれる XML がバイナリ (バイト配列) であるため、VTD には各要素の位置やその他のアクセス情報が記録されており、操作対象の VTD を見つけるには、オフセットや長さなどの情報を使用するだけで済みます。元のバイト配列を操作することも、VTD を直接操作することもできます。たとえば、大きな XML 内の要素を見つけて削除したい場合は、この要素の VTD を見つけて (走査方法については後で説明します)、この VTD を VTD 配列から削除して、次を使用するだけです。すべて VTD を別のバイト配列に書き込むだけです。削除された VTD は削除される要素の位置をマークするため、この要素は新しく書き込まれるバイト配列には表示されません。バイト配列は実際には のコピーです。これは、いわゆる増分更新であり、その効率は非常に高いです。
VTD-XML のトラバーサル方式に関しては、LC (Location Cache) を使用します。LC (Location Cache) は、VTD の深さを標準として構築されたツリー状のテーブル構造です。 LC のエントリも 64 ビット長の数値タイプで、最初の 32 ビットは VTD のインデックスを表し、最後の 32 ビットはこの VTD の最初の子のインデックスを表します。この情報を使用して、到達したい位置を計算できます。具体的な移動方法については、公式 Web サイトの記事を参照してください。この走査方法に基づく VTD-XML は DOM とは異なる操作インターフェイスを備えていることは理解できますが、この VTD-XML の走査方法は最小限のステップで必要な場所に移動できるため、走査パフォーマンスが非常に優れています。

概要

上記のとおり、VTD-XML には魅力的な機能があり、バージョン 1.5 では XPath のサポートが追加されました (走査できる限り、XPath をサポートできますが、これは時間の問題です:- ))、その実用性は今日の私たちが想像できるものを超えています。 VTD-XML のもう 1 つのスーパーパワーは、現在の処理方法に基づいて、将来のバイナリ XML 標準を完全にサポートし、バイナリ化を通じて XML のアプリケーションをより高いレベルに押し上げることができることです。これが今の楽しみです! :-)

しかし、VTD-XML にはまだ改善と完成が必要な領域が多くあり、この点については私たちの努力と議論の価値があります。

上記は、新しい XML 処理方式 VTD-XML の紹介です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
XMLを使用したフィードの構築:RSSの実践ガイドXMLを使用したフィードの構築:RSSの実践ガイドApr 14, 2025 am 12:17 AM

XMLを使用してRSSFeedを構築する手順は次のとおりです。1。ルート要素を作成してバージョンを設定します。 2.チャネル要素とその基本情報を追加します。 3.タイトル、リンク、説明を含むエントリ要素を追加します。 4. XML構造を文字列に変換して出力します。これらの手順を使用すると、有効なRSSFeedをゼロから作成し、リリース日や著者情報などの追加要素を追加することにより、機能を強化できます。

RSSドキュメントの作成:ステップバイステップのチュートリアルRSSドキュメントの作成:ステップバイステップのチュートリアルApr 13, 2025 am 12:10 AM

RSSドキュメントを作成する手順は次のとおりです。1。要素を含むルート要素を使用して、XML形式で書き込みます。 2。チャネル情報を説明する要素など。 3.要素を追加します。それぞれがコンテンツエントリを表します。 4.オプションで、コンテンツを濃縮するための要素を追加します。 5. XML形式が正しいことを確認し、オンラインツールを使用してパフォーマンスを最適化し、コンテンツを更新します。

RSSにおけるXMLの役割:シンジケートコンテンツの基礎RSSにおけるXMLの役割:シンジケートコンテンツの基礎Apr 12, 2025 am 12:17 AM

RSSにおけるXMLの中心的な役割は、標準化された柔軟なデータ形式を提供することです。 1. XMLの構造とマークアップ言語の特性により、データ交換とストレージに適しています。 2。RSSはXMLを使用して標準化された形式を作成して、コンテンツの共有を容易にします。 3. RSSでのXMLの適用には、タイトルやリリース日などのフィードコンテンツを定義する要素が含まれます。 4.利点には標準化とスケーラビリティが含まれ、課題にはドキュメントの冗長および厳密な構文要件が含まれます。 5.ベストプラクティスには、XMLの有効性の検証、シンプルな状態を維持し、CDATAの使用、定期的に更新されます。

XMLから読み取り可能なコンテンツまで:RSSフィードを分類しますXMLから読み取り可能なコンテンツまで:RSSフィードを分類しますApr 11, 2025 am 12:03 AM

rssfeedsarexmldocumentsusedforcontentaggregationanddistribution.totransformthemintoreadablecontent:1)parsethexmlusinglibrarieslibrarieslibrarieslibrarieslibrarieslibrarieslibrarieslibraries.2)heandlederentrssiversions andpotentialparsingerrors.3)変換された拡張型拡張型のfienderidederidrederidederidederidedionderiondiontiontiontiontiontiontiontiontional

JSONに基づいたRSSの代替品はありますか?JSONに基づいたRSSの代替品はありますか?Apr 10, 2025 am 09:31 AM

JSonFeedは、JSONベースのRSSの代替品であり、その利点のシンプルさと使いやすさがあります。 1)JSonFeedはJSON形式を使用しますが、これは簡単に生成して解析できます。 2)動的生成をサポートし、最新のWeb開発に適しています。 3)JSonFeedを使用すると、コンテンツ管理の効率とユーザーエクスペリエンスが向上する可能性があります。

RSSドキュメントツール:フィードの構築、検証、公開RSSドキュメントツール:フィードの構築、検証、公開Apr 09, 2025 am 12:10 AM

RSSFeedsを構築、検証、公開する方法は? 1。ビルド:Pythonスクリプトを使用して、タイトル、リンク、説明、リリース日など、RSSFeedを生成します。 2。検証:FeedValidator.orgまたはPythonスクリプトを使用して、RSSFeedがRSS2.0標準に準拠しているかどうかを確認します。 3.公開:RSSファイルをサーバーにアップロードするか、フラスコを使用してRSSFeedを動的に生成および公開します。これらの手順を通じて、コンテンツを効果的に管理および共有できます。

XML/RSSフィードのセキュリティ:包括的なセキュリティチェックリストXML/RSSフィードのセキュリティ:包括的なセキュリティチェックリストApr 08, 2025 am 12:06 AM

XML/RSSFeedsのセキュリティを確保する方法には、次のものが含まれます。1。データ検証、2。暗号化された伝送、3。アクセス制御、4。ログと監視。これらの測定値は、ネットワークセキュリティプロトコル、データ暗号化アルゴリズム、アクセス制御メカニズムを介して、データの整合性と機密性を保護します。

XML/RSSインタビューの質問と回答:専門知識をレベルアップしますXML/RSSインタビューの質問と回答:専門知識をレベルアップしますApr 07, 2025 am 12:19 AM

XMLはデータの保存と転送に使用されるマークアップ言語であり、RSSは頻繁に更新されるコンテンツを公開するために使用されるXMLベースの形式です。 1)XMLはタグと属性を介してデータ構造を記述します。2)RSSは特定のタグの公開と購読コンテンツを定義します。3)XMLは、PythonのXML.ETREE.ELEMENTTREEモジュールを使用して作成および解析できます。 XMLLINT、7)SAXパーサーで大規模なXMLファイルを処理することで検証できます。パフォーマンスを最適化できます。

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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

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

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

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境