Home > C# > 目的別資料 > Web関連 > AngleSharp

AngleSharpドキュメントのPerformanceの日本語訳

新規作成日 2018-07-09
最終更新日

原文「Performance

このページ(原文ページ)は、Florian Rapplによって編集されました。 2015年9月8日・10改訂

一般的な注意事項

General considerations

生産的な使い方のための候補をプリロードや"ウォームアップ"を作成する(あるいは、NGenを使用する)、ライブラリは、小さく( も巨大でも)ありません。最初の実行は、常に次に示すものに比べて遅くなります。これは、AngleSharpとは、何の関係がない、C#/MSIL(または、一般的なJITプロセス)のプロパティです。

AngleSharpは、性能を念頭に置いて記述されています。実際の優先順位は、以下の通りです:

  • 標準準拠
  • 性能
  • ヘルパー/拡張機能
  • ツーリング

まだ、最適化が可能ですが(すべてが、まず動作している必要があるため、すなわち、標準準拠が検討されています)、性能は、将来性があります。(通常、C/C++で書き込まれている)確立したWebブラウザのパーサは、まだ、より速い実行時間を持っています。しかし、完全に管理されたプロセスでは、解析/ DOM作成の手順全体が、非常に高速です。

以下では、AngleSharpは、どちらも、とても人気がある、(HtmlAgilityPackのような)または野心的な(CsQueryのような)他の人気があるライブラリと比較します。

HtmlAgilityPackとの比較

Comparison with the HtmlAgilityPack

HtmlAgilityPack (HAP)は、優れた比較対象です。それは、長い間、最も使用され、確立されています。言うまでもなく、AngleSharpは、次の理由により、HAPの優れた代替品です。:

  • 標準化されたHTML5解析モデル
  • 遥かに優れた誤り訂正/処理
  • また、正しくSVG/MathML要素を解析します
  • CSS(セレクタ、ルール、...)を扱うことができます
  • よりよい性能

最初の点は、すべて非常に明白で明確ですが、(それは、AngleSharpが、最初に開発された理由です)、最後の点は、議論の余地があります。

最初の点は、すべて非常に明白で明確ですが、(それは、AngleSharpが、最初に開発された理由です)、最後の点は、議論の余地があります。

static async Task<Int64> Test(Func<String, Int64> test, String source)
{
    var min = Int64.MaxValue;

    for (int i = 0; i < 20; i++)
        min = Math.Min(min, await Task.Run(() => test(source)));

    return min;
}

static Int64 TestAngle(String source)
{
    var sw = Stopwatch.StartNew();
    var parser = new HtmlParser(source);
    parser.Parse();
    sw.Stop();
    return sw.ElapsedMilliseconds;
}

static Int64 TestAgility(String source)
{
    var sw = Stopwatch.StartNew();
    var document = new HtmlDocument();
    document.LoadHtml(source);
    sw.Stop();
    return sw.ElapsedMilliseconds;
}

このプログラムは、続いて、いくつかのWebページのソース・コードを持つ、Testメソッドを呼び出します。それらのすべては、とても重要であり、とても頻繁に使用されます。そして、それらのいくつかは、極めて大きいです。最大なものは、明らかに、公式のW3C構文仕様です。

次の図は、このテストを実行した結果を示しています。(注意:含まれているパーサーは、すべて古いバージョンです。;説明のためだけに)

テストの実行結果

私たちが、20回の試験で、最低のウォールタイムを取得したことに注意してください。私たちが、平均を取得する場合、結果の詳細はわずかに変わります。-AngleSharpが、より多くのコードパスを持っているため、そして、その結果、HAPに比べて、ウォームアップ実行で、よりすばらしいミックスを必要とします。しかしながら、全体の成果は、まだ、AngleSharpの方が速いので、全体の結果は変わりません。

HAPが、優れているただ一つの項目は、「GoogleNews」です。しかし、これは、誤った印象です。真の高速化は、(大きな)インライン・スタイルシートを省略することによってもたらされます。ここでも、AngleSharpは、CSSを解析する必要があります。それには、もう少し時間がかかります。以下の公式のベンチマーク・プログラムは、CSSの解析を無効にすることで、除外されています。(その結果、HTML解析のみが、目的どおりにベンチマークされます)。

CsQuery/validator.nu HTMLパーサとの比較

Comparison with CsQuery / validator.nu HTML parser

CsQueryプロジェクトは、jQueryのC#ポートを目指しています。HTMLを解析するために、validator.nu HTML5エンジンのポートが選択されています。したがって、結果として生じるDOMの妥当性は、AngleSharpとほぼ同じレベルにあるはずです。しかしながら、テンプレートやメインなどの重要な要素が、欠落しています。上記の画像には、HTMLパーサーのパフォーマンス測定値も含まれています。

構文解析性能は、AngleSharpと比較して混在しています。AngleSharpは、初期段階(v0.8.6)で測定されています。すなわち、AngleSharpの性能が、さらに高まる可能性があります。CsQueryプロジェクトは、野心的で、いくつかの面白い概念と機能が、含まれていますが、AngleSharpは、反対側から問題を解決しようとしています。-まず、標準に準拠し、その後、一番上に、素敵な機能を追加します。過去には、派手な機能や非標準的ではあるが優れたAPIを実装すると、後で問題につながることが明らかになりました。

一般に、AngleSharpの方が優れている領域、そして、validator.nuパーサがより速い他のページがあります。ほとんどの場合、(2ms対3msのような場合)勝者は、実際には、重要ではありません。

他の解決法との比較

Comparison with other solutions

他のプロジェクトと比較することもできます。公式の性能プロジェクトで、(Visual Studioソリューションに含まれています)Majestic (Majestic 13)パーサーが見つかります。この1つは、他のどんな解決法に比べても、ほとんどの場合、より速いです。それは、あなたのプロジェクトにとって、正しい選択ですか?おそらく、そうではありません。理由は、簡単です。:Majesticは、DOMを構築しません。また、それは、特別なタグ、意味とHTML誤り訂正、を気にしません。基本的に、Majesticは、少しシンプルなトークナイザで、そのトークナイザーを減らしたAngleSharpです。

また、これは、Majesticを性能比較から除外した、理由です。しかしながら、あなたは、もちろん(自分の喜びのために)Majesticを再び含めることができます。コードは、既に、登録されています。

現在の性能

Current performance

現在、AngleSharpの性能は、完全に満足です。16 GBのRAMと3.2 GHzのシステムを搭載したIntelコアi5 4570で、私たちは、(公式のベンチマーク・プログラムから)次の統計をまとめることができました。

                            RUNNING TESTS (v0.9.1)
============================================================================
                       AngleSharp           CsQuery        HTMLAgilityPack
----------------------------------------------------------------------------
amazon                     1ms                7ms                0ms
blogspot                   1ms                2ms                5ms
smashing                   1ms                1ms                1ms
youtube                   11ms               15ms               13ms
weibo                      0ms                0ms                0ms
yahoo                      8ms               35ms               22ms
google                     2ms                2ms                8ms
linkedin                   3ms                2ms                3ms
pinterest                  1ms                1ms                5ms
news.google               28ms               34ms               41ms
baidu                      1ms                1ms                6ms
codeproject                4ms                4ms                4ms
ebay                       8ms                8ms                8ms
msn                       18ms               18ms               13ms
nbc                        5ms                4ms                8ms
qq                        17ms              1060ms              52ms
florian-rappl              0ms                1ms                0ms
stackoverflow             16ms               15ms               12ms
html5rocks                 0ms                0ms                0ms
live                       0ms                0ms                0ms
taobao                    14ms               15ms                7ms
huffingtonpost            11ms                9ms               10ms
wordpress                  1ms                0ms                0ms
myspace                   20ms               29ms               21ms
flickr                     3ms                5ms               13ms
godaddy                    6ms                5ms                7ms
reddit                     6ms                9ms                6ms
nytimes                   14ms               13ms               13ms
peacekeeper.futu...        0ms                0ms                1ms
pcmag                      9ms               11ms               16ms
sitepoint                  1ms                2ms                3ms
html5test                  0ms                1ms                2ms
spiegel                   15ms               12ms               13ms
tmall                      2ms                3ms                2ms
sohu                      20ms               46ms               39ms
vk                         2ms                0ms                1ms
wordpress                  2ms                0ms                0ms
bing                       1ms                1ms                4ms
tumblr                     2ms                3ms                3ms
ask                        0ms                0ms                1ms
mail.ru                    6ms               11ms               15ms
imdb                       6ms                4ms                6ms
kickass.to                 0ms                0ms                0ms
360.cn                     4ms                4ms                8ms
163                       32ms               45ms               56ms
neobux                     1ms                0ms                0ms
aliexpress                10ms                9ms                9ms
netflix                    4ms                3ms                7ms
w3                        912ms              579ms             1064ms
en.wikipedia              37ms               26ms               33ms
----------------------------------------------------------------------------
Total                    1292ms             2080ms             1583ms
----------------------------------------------------------------------------
Fastest                    20                 19                 11
----------------------------------------------------------------------------
Slowest                    13                 12                 25
----------------------------------------------------------------------------

この実行は、デフォルト設定の5リピートと1ランで行われています。変動が大きいかもしれませんし、代表的な試験ではたくさんのリピートとランを考慮する必要があります。

現時点では、AngleSharpのパフォーマンスは、HAPより優れているようです。そして、CsQueryとほぼ同じです。(上記のように)調査中のエッジケースがあります。それらは、v1.0.0を再リリースする前に、確実に改善されるでしょう。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」