Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Скорость работы скрипта в IE (https://javascript.ru/forum/css-html-internet-explorer/4338-skorost-raboty-skripta-v-ie.html)

Artem (krsk) 13.07.2009 05:48

Скорость работы скрипта в IE
 
Есть такой скрипт:
<script language="JavaScript" type="text/JavaScript">
function listxml()
{
	var xmlDoc;
	if (window.ActiveXObject)
	{xmlDoc=new ActiveXObject("Microsoft.XMLDOM");}
	else if (document.implementation.createDocument)
	{xmlDoc=document.implementation.createDocument("","",null);}
	else
	{alert('Your browser cannot handle this script');}
	
	xmlDoc.async=false;
	xmlDoc.load("iss.xml");
	var f='';
	for (i=0; i<xmlDoc.getElementsByTagName("catalog").length; i++)
	{
		if (xmlDoc.getElementsByTagName("catalog")[i].getAttribute("name")=='атрибут')
		{f+=xmlDoc.getElementsByTagName("catalog")[i].getAttribute("name")+'<br />';}
	}
	document.getElementById("forxml").innerHTML=f;
}
</script>

в FF и Opera этот скрипт отрабатывает на раз (выводит список найденных узлов), а IE уходит в себя и больше не возвращается. Надо сказать что xml файл очень большой, более 2 мегабайт. Как-то можно скрипт модернизировать чтоб IE тоже работал, или надо принципиально по другому задачу решать?

Riim 13.07.2009 05:59

for (i=0; i<xmlDoc.getElementsByTagName("catalog").length; i++)
    {
        if (xmlDoc.getElementsByTagName("catalog")[i].getAttribute("name")=='атрибут')
        {f+=xmlDoc.getElementsByTagName("catalog")[i].getAttribute("name")+'<br />';}
    }


меняем на:


for (var catalogs = xmlDoc.getElementsByTagName("catalog"), i=0, length = catalogs.length; i<length; i++)
    {
        var nameAttr = catalogs[i].getAttribute("name");
        if (nameAttr=='атрибут') f+=nameAttr+'<br />';
    }

Artem (krsk) 13.07.2009 07:07

Да, действительно, слона -то я и не приметил :) Спасибо, так работает. Это действительно рациональней, хотя скорость обработки в сравнении с другими браузерами показательна, получился этакий тест :)

x-yuri 14.07.2009 20:02

вроде где-то недавно читал, что ie просто не кэширует поиск по DOM'у


Часовой пояс GMT +3, время: 15:50.