2

JavaScriptではxmlHttpRequest.responseXML()、オブジェクトを返しDOM Documentます。DOM Documentオブジェクトは、XML構造のHTTP応答本文から作成されます。

オブジェクトの存続期間中のどの時点でxmlHttpRequest、XML文字列が解析されてDOM Document

私はそれが2つの場所のうちの1つで起こるかもしれないと想像することができます。

  • responseXML()が呼び出されたとき。
    XML文字列が実際に必要であることがわかるまで、XML文字列をDOMに解析するためにリソースを浪費する必要はありません。

  • HTTP応答を受信したとき。
    サーバーがtext/xml content-typeを返す場合は、XMLを要求したことは明らかであり、要求されたデータをあまり処理できないため、応答本文をDOMに解析する必要があります。

どちらのオプションにもいくつかのメリットがありますが、XML文字列はが呼び出されたときにのみ解析されると言いたくなりますresponseXML

XML文字列の解析はどの時点で発生しますか?

質問の理由:これをJSON逆シリアル化のパフォーマンスと比較する目的で、ブラウザーベースのXML逆シリアル化のパフォーマンスを測定する必要があります。

4

3 に答える 3

1

Chrome の場合、DOM は responseXML() が呼び出されたときに作成および解析されます。

メソッドのソースは次のとおりです。

Document* XMLHttpRequest::responseXML(ExceptionCode& ec)
{
    if (responseTypeCode() != ResponseTypeDefault && responseTypeCode() != ResponseTypeText && responseTypeCode() != ResponseTypeDocument) {
        ec = INVALID_STATE_ERR;
        return 0;
    }

    if (m_state != DONE)
        return 0;

    if (!m_createdDocument) {
        if ((m_response.isHTTP() && !responseIsXML()) || scriptExecutionContext()->isWorkerContext()) {
            // The W3C spec requires this.
            m_responseXML = 0;
        } else {
            m_responseXML = Document::create(0, m_url);
            // FIXME: Set Last-Modified.
            m_responseXML->setContent(m_responseBuilder.toStringPreserveCapacity());
            m_responseXML->setSecurityOrigin(document()->securityOrigin());
            if (!m_responseXML->wellFormed())
                m_responseXML = 0;
        }
        m_createdDocument = true;
    }

    return m_responseXML.get();
}
于 2011-03-25T20:49:18.460 に答える
1

これがブラウザに依存していても驚かないでしょう。3つすべてをプロファイルしてみませんか?

于 2009-02-28T16:28:57.663 に答える
1

ストリームが受信されたときに解析されることは非常に理にかなっています。応答が完了するまで (または responseXml プロパティが呼び出されるまで) 待機するということは、最終バイトを受信して​​から DOM が構築されるまでの間に余分な遅延が発生することを意味します。ストリームの受信と並行して DOM を構築する方が良いと思われるため、完了時に DOM を使用する準備が整います。

Content タイプが XML タイプを指定していない場合、MSXML は DOM を提供しないという事実に大きな手がかりがあることに注意してください。Mozilla の実装では、受信したコンテンツを XML であるかのように扱うように指示できますそうでないことを示します。

プロパティがアクセスされるまで DOM が解析されない場合は、上記のいずれも必要ありません。プロパティは、単に解析を試みることもできます。上記が必要なのは、コンテンツが受信されるとDOMが構築される可能性があるためです。

于 2009-02-28T19:22:47.730 に答える