<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; javascript: Сортировка массива с отображением процесса]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6918</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6918&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «javascript: Сортировка массива с отображением процесса».]]></description>
		<lastBuildDate>Sat, 24 Mar 2012 16:05:58 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58322#p58322</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Нe честно, не ругается и работает.</p></blockquote></div><p>Казнить нельзя помиловать.<br />Где будем ставить запятую?:)</p><br /><div class="quotebox"><blockquote><p>Firefox 12.0</p></blockquote></div><p>За новыми не гоняюсь, а тем что версия от версии отличаются устранением старых и внесением новых ошибок нас не запугаешь.:)</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Sat, 24 Mar 2012 16:05:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58322#p58322</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58306#p58306</link>
			<description><![CDATA[<p>Нe честно, не ругается и работает. <a href="https://developer.mozilla.org/en/DOM/Node.firstChild">(firstChild)</a><br />Firefox 12.0</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sat, 24 Mar 2012 03:24:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58306#p58306</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58296#p58296</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>У меня огнелис не ругается на &quot;.firstChild;&quot; почему то.</p></blockquote></div><p>И работает?<br />Две разных лисы, 5.01 и 3.56<br /></p><div class="quotebox"><blockquote><p>Ошибка: el.style is undefined<br />Источник: file:<br />Строка: 29</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Fri, 23 Mar 2012 10:21:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58296#p58296</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58280#p58280</link>
			<description><![CDATA[<p>Ни на кого я не спихивал. Я просто хотел посмотреть как бы решили такую задачу местные. 6)<br />Писать же прогресс бар я хотел сам, но у меня нифига не получилось.</p><p>У меня огнелис не ругается на &quot;.firstChild;&quot; почему то.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Fri, 23 Mar 2012 04:27:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58280#p58280</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58277#p58277</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>На данный момент у меня вообще не получается сделать сортировку при работающем прогресс баре. Ищу свои ошибки</p></blockquote></div><p>Не понял, а чего их самому искать, когда есть кому это можно спихнуть? <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><br /><p>Валидатор сразу ругнулся на отсутствие <br /></p><div class="codebox"><pre><code>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Windows-1251&quot;&gt;</code></pre></div><p>А сафари написала кракозяблами, правильно и сделала.</p><p>Консоль лисы сразу показала на эту строку<br /></p><div class="codebox"><pre><code>el = document.getElementById(&quot;progressbar&quot;).firstChild;</code></pre></div><p>Исправляем на<br /></p><div class="codebox"><pre><code>el=document.getElementById(&quot;progressbar&quot;).getElementsByTagName(&quot;div&quot;)[0];</code></pre></div><p>и всё начинает работать.</p><p>Total duration: (округлённо)<br />Осёл 6 = 93сек<br />Опера 11.50 = 24сек<br />Лиса 5.01 = 23сек<br />ГуглХром 12 = 24сек<br />Сафари 5.0 = 57сек</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Fri, 23 Mar 2012 04:15:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58277#p58277</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58267#p58267</link>
			<description><![CDATA[<div class="quotebox"><cite>Любитель пишет:</cite><blockquote><p>на эту ссылку браузер ругается, yield из JavaScript 1.7</p></blockquote></div><p>МСИЕ банит сайт мозиллы ))</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 22 Mar 2012 17:45:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58267#p58267</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=58265#p58265</link>
			<description><![CDATA[<p>Вот это использую для замера, быстро, просто, кроссбраузерно.<br /></p><div class="codebox"><pre><code>var vcb=new Date().getTime();
сам цикл чего то
vcb=(new Date().getTime()-vcb)/1000;
alert(vcb);</code></pre></div><p>Несколько раз пытался сделать такой бар, браузер просто игнорирует вывод на экран.<br />А вот идея с остановкой цикла&nbsp; меня не посещала, надо попробовать.</p><p><strong>Rumata</strong>б на эту ссылку браузер ругается, <strong>yield из JavaScript 1.7</strong></p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Thu, 22 Mar 2012 17:09:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=58265#p58265</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57997#p57997</link>
			<description><![CDATA[<p><strong>DnsIs</strong>, спасибо. <br />Не мог сразу ответить, хотя времени, чтобы зайти на форум было. Первой моей мыслью было оптимизировать сам алгоритм сортировки - все-таки там используется алгоритм пузырьковой сортировки. Вторая - поискать само описание, кстати я нашел оригинальную статью. Правда мелькала мысль - пореже вызывать функцию таймера. </p><p>Решение, приведенное в статье, меня удивило. <br />-- Частота вызова функции таймера &quot;не изменилась&quot;. Изменилось время исполнения каждого цикла<br />-- Внутренний цикл прерывается и повторно выполняется с прерванной итерации. Фактически, новый алгоритм это функцию-генератор, которая эмулирует оператор <a href="https://developer.mozilla.org/en/JavaScript/Guide/Iterators_and_Generators">yield из JavaScript 1.7</a><br />-- Скорость вычислений изменилась примерно в 50 раз! С учетом того, что чистое время исполнения алгоритма без таймера превышает время, затраченное алгоритмом с использованием таймера. Либо парадокс, либо ошибка автора - я не проверял качественно.<br />-- В МСИЕ безобразно медленные алгоритмы: 15-16 сек и 1.3 сек. против 5-6 сек. и 0.06-0.13 сек в мозилле для примеров из статьи.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 17 Mar 2012 20:03:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57997#p57997</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57766#p57766</link>
			<description><![CDATA[<p>В общем Rumata, вот <a href="http://www.realcoding.net/articles/optimiziruem-%C2%ABtyazhelye%C2%BB-javascript-vychisleniya.html">статья.</a></p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Tue, 13 Mar 2012 02:22:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57766#p57766</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57713#p57713</link>
			<description><![CDATA[<p><strong>Rumata</strong>, именно так. ) Я просто более глобально смотрю на этот процесс, поэтому говоря о синхронности стараюсь учитывать и остальные события.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Sun, 11 Mar 2012 10:17:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57713#p57713</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57712#p57712</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>процессы компьютера</p></blockquote></div><p>Разные точки зрения. Я подразумеваю js&nbsp; в рамках одной страницы. Вот здесь Вы правы и подразумевается выполнение js в рамках одной страницы (процесса ?) </p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>пока крутятся циклы и двигаются элементы массива, отрисовка элементов на экране может не происходить</p></blockquote></div><p>.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 11 Mar 2012 10:04:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57712#p57712</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57711#p57711</link>
			<description><![CDATA[<p>Ссылку я не хотел сразу давать, как раз что бы увидеть как бы решили такую задачу мастера скриптинга. Понятно, что писать не нужный код код с нуля не охота. 8)</p><p>Чтож. Rumata, давайте сначала не ссылку а вариант решения. В статье идет речь о таком коде:<br /></p><div class="codebox"><pre><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot; &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;Running long JavaScript processes in a web browser&lt;/title&gt;
    &lt;style&gt;

body {
  padding:0;
  margin:1em;
}

#progressbar {
  position:relative;
  width:300px; height:20px;
  border:1px solid black;
  overflow:hidden;
}

#progressbar div {
  background:#316AC5;
  width:0; height:100%;
}
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;p&gt;Sorting, please wait...&lt;/p&gt;
    &lt;div id=&quot;progressbar&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;

    &lt;script&gt;

(function () {

    var i, length, data, el, start;

    // Initialize a few things...
    length = 5000;
    data = [];
    el = document.getElementById(&quot;progressbar&quot;).firstChild;

    // Setup an array of random integers...
    for (i = 0; i &lt; length; i++) {
        data[i] = Math.floor(Math.random() * length);
    }

    function sort (progressFn) {
        i = 0;

        (function () {
            var j, value;

            for (j = length; j &gt; i; j--) {
                if (data[j] &lt; data[j - 1]) {
                    value = data[j];
                    data[j] = data[j - 1];
                    data[j - 1] = value;
                }
            }

            i++;
            progressFn(i, length);

            if (i &lt; length) {
                setTimeout(arguments.callee, 0);
            }

        })();
    }

    start = new Date().getTime();
    sort(function (value, total) {
        el.style.width = (100 * value / total) + &quot;%&quot;;
        if (value &gt;= total) {
            alert(&quot;Total duration: &quot; + ((new Date().getTime() - start) / 1000) + &quot; seconds&quot;);
        }
    });

})();

    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre></div><p>Далее идет его оптимизация.</p><p>В исходном тексте length = 1000, я же изменил на length = 5000; У меня при таком варианте сортировка происходит за ~26 секунд.</p><p>Раз писать код никто не хочет, давайте попробуем оптимизировать уже готовый.</p><p>ps, в статье код после оптимизации отрабатывает за ~.62 секунды.<br />Rumata, ну хоть вы не откажите. Ну очень хочется увидеть как вы справитесь.<br />Скажу сразу, я так бы не смог, как там написано.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sun, 11 Mar 2012 10:01:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57711#p57711</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57710#p57710</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Сортировка - полностью синхронный процесс.</p></blockquote></div><p>Не соглашусь ) Я говорил о частичной синхронности, т.к все остальные процессы компьютера продолжают работать как и работали. )</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Sun, 11 Mar 2012 09:48:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57710#p57710</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57709#p57709</link>
			<description><![CDATA[<p><strong>DnsIs</strong>, дайте ссылку. Очень почитать хочется. </p><p>Коллега <strong>Xameleon</strong> прав. Я всего лишь поправлю его. Сортировка - полностью синхронный процесс. Вообще задача решаема, и может показаться весьма интересной - асинхронная сортировка ну очень большого массива. Но проблема в том, что это будет ну очень долго. Чтобы хоть что-то показать, так как браузер будет &quot;висеть&quot; в этот момент... Можно сделать, например, так</p><div class="codebox"><pre><code>
&lt;script type=&quot;text/javascript&quot;&gt;

function doSort()
{
	loadinfo = document.createElement(&#039;div&#039;);
	loadinfo.innerHTML = &#039;&lt;img src=&quot;loadinfo.gif&quot; /&gt; Sorting...&#039;;
	loadinfo.style.position = &#039;absolute&#039;;
	document.body.appendChild(loadinfo);

	array.sort();

	document.body.removeChild(loadinfo);
};

&lt;/script&gt;</code></pre></div><p>И анимированную картинку, например, такую <br /><span class="postimg"><img src="http://atcasa.corriere.it/Speciali/annual-bravacasa/loadinfo.gif" alt="http://atcasa.corriere.it/Speciali/annual-bravacasa/loadinfo.gif" /></span></p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 11 Mar 2012 09:31:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57709#p57709</guid>
		</item>
		<item>
			<title><![CDATA[Re: javascript: Сортировка массива с отображением процесса]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57707#p57707</link>
			<description><![CDATA[<p>Не в обиду. 8)<br />Тем не менее вы меня поняли.</p><p>В данном примере сложности по функции сортировки нет. Обычный sort(function (){return a-b}) справится.<br />Сейчас мне как раз стало интересно, от чего же у кого-то получилось заставить работать прогрессбар, а у меня нет.</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Sun, 11 Mar 2012 09:23:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57707#p57707</guid>
		</item>
	</channel>
</rss>
