Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > DOMDocument


Автор: webevt 18.3.2008, 15:19
Сколько времени занимает создание объекта DOMDocument в Internet Explorer?
Код

DOM.XMLDoc = new ActiveXObject('MSXML2.DomDocument');

Что делает IE при создании этого объекта, к каким ресурсам обращается?

Собственно, такой возник вопрос из-за того, что именно из-за этого IE очень сильно замедляет загрузку страницы, обращаясь по пути ко всем необходимым DTD-документам на w3.org. Причем происходит эти обращения только при срабатывающем mod_rewrite.

Класс, обеспечивающий создание DOMDocument и загрузку xml-документа:
Код

// обьект
DOM = new Object( );

// параметры
DOM.XMLString = null; // загрузка XML из строки
DOM.XMLFile   = null; // загрузка XML из файла
DOM.XMLDoc        = null;  // XML документ
DOM.XSLDoc        = null;  // XSL документ

// загрузка данных
DOM.Load = function( )
{
  if ( document.implementation && document.implementation.createDocument )
  {
    if( DOM.XMLString )
      DOM.XMLDoc = new DOMParser( ).parseFromString ( DOM.XMLString, "text/xml" );

    DOM.XMLDoc = document.implementation.createDocument ( "", "", null );
  }

  else if ( window.ActiveXObject )
  {
    try { DOM.XMLDoc = new ActiveXObject('MSXML2.DomDocument'); }

    catch( e )
    {
      try { DOM.XMLDoc = new ActiveXObject('Microsoft.DomDocument'); }

      catch( e )
      {
        try { DOM.XMLDoc = new ActiveXObject('MSXML.DomDocument'); }

        catch( e )
        {
          try  { DOM.XMLDoc = new ActiveXObject('MSXML3.DomDocument'); }

          catch( e ) { DOM.XMLDoc = false; }
        }
      }
    }
  }

  DOM.XMLDoc.async = false;
  if( DOM.XMLFile )
    DOM.XMLDoc.load( DOM.XMLFile );
  else if( DOM.XMLString )
    DOM.XMLDoc.loadXML( DOM.XMLString );

  return DOM.XMLDoc;
}

// получение данных
DOM.asXML = function ( )
{
  if( !DOM.XMLDoc )
    return false;

  if ( document.implementation && document.implementation.createDocument )
  {
    return new XMLSerializer( ).serializeToString ( DOM.XMLDoc );
  }
  else if( window.ActiveXObject )
    return DOM.XMLDoc.xml;
}

// трансформирование XML
DOM.XSLT = function( )
{
  if( !DOM.XMLDoc || DOM.XSLDoc )
    return false;

  if ( document.implementation && document.implementation.createDocument )
  {
    var XSLT = new XSLTProcessor ( );
    XSLT.importStylesheet ( DOM.XSLDoc );
    var XHTMLDoc = XSLT.transformToDocument ( DOM.XMLDoc );

    return new XMLSerializer( ).serializeToString( XHTMLDoc );
  }
  else if ( window.ActiveXObject )
    return DOM.XMLDoc.transformNode( DOM.XSLDoc );
}



Настройки mod_rewite в .htaccess можно посмотреть в оригинальной теме:
http://forum.vingrad.ru/forum/topic-200839.html

Автор: Fortop 18.3.2008, 17:07
Цитата(webevt @  18.3.2008,  14:47 Найти цитируемый пост)
 я не посылаю аякс-запросов при загрузке....

Не понял... В свете ниже изложенного
Цитата(webevt @  18.3.2008,  14:47 Найти цитируемый пост)
 Скрипт проверяет существование этого метода(простой if()) и выполняет загрузку xml-дока.

Загрузку ты чем выполняешь и когда она у тебя происходит?

Или ты хочешь сказать что вызов твоего класса нигде не происходит, но IE сам по себе лезет несколько раз за DTD?

Автор: webevt 18.3.2008, 22:02
Цитата(Fortop @  18.3.2008,  17:07 Найти цитируемый пост)
Загрузку ты чем выполняешь и когда она у тебя происходит?

Класс Ajax здесь не причем, на его месте могло быть и что-то другое. Если проверку на существование этого метода убрать, то в корне ничего не изменится) На него можно не обращать внимание.

Загрузка выполнятся в ходе загрузки всей страницы. И тормоза начинаются не при чтении xml-документа, а еще только при создании объекта DOMDocument. Поэтому, то, что находится в xml-доке и как я его буду получать - роли не играет.

Автор: Sardar 18.3.2008, 22:49
Взгляни на 43 строчку, похоже это твоя "проблема". Вообще синхронные загрузки (друг за дружкой, водном потоке, блокирующие) - это зло.

Автор: webevt 19.3.2008, 22:23
Sardar, спасибо большое, помогло smile 

Но почему такие проблемы возникают только при включеном mod_rewrite? (просто интерес, может и другим интересно )

Спасибо всем за участие! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)