Почему этот javascript так медленно работает в IE, когда все, что он делает, это изменяет список выбора?

Я ' m работает над созданием списка с множественным выбором, в котором вы можете выбирать элементы, а затем нажимать кнопку «Вверх» или «Вниз», которая позволит вам переупорядочить эти элементы в списке.

У меня есть простая самооценка. содержащийся пример:

<html>
    <head>
        <title>Example</title>
    <script src="https://www.google.com/jsapi"></script>
    <script>
        google.load('jquery', '1.4.1');
    </script>
    </head>
    <body>
        <select id="selectedDataPoints" multiple="multiple">
            <option>Pig</option>
            <option>Duck</option>
            <option>Dog</option>
            <option>Zebra</option>
            <option>Snake</option>
            <option>Giraffe</option>
            <option>Cow</option>
        </select>
    <input type="button" id="btnReorderUp"  value="Up" />
    <input type="button" id="btnReorderDown" value="Down" />
    </body>
</html>

<script type="text/javascript">
    var DataPointSelector = (function() {

    var $selectedList = $('#selectedDataPoints');

        $('#btnReorderUp').click(function(e) {
            moveUp();
            e.preventDefault();
        });

        $('#btnReorderDown').click(function(e) {
            moveDown();
            e.preventDefault();
        });

    function moveUp() {
            var select = $selectedList[0];
            for (var i = 1, n = select.options.length; i < n; i++)
                if (select.options[i].selected && !select.options[i - 1].selected)
                select.insertBefore(select.options[i], select.options[i - 1]);
        }

        function moveDown() {
            var select = $selectedList[0];
            for (var i = select.options.length - 1; i > 0; i--)
                if (select.options[i].selected && !select.options[i + 1].selected)
                    select.insertBefore(select.options[i + 1], select.options[i]);           
        }

    } ());
</script>

Однако нажатие кнопки «Вверх / Вниз» в IE7 / 8 начинает действовать буквально через 3–8 секунд. Первый щелчок иногда бывает быстрым, но после этого требуется очень много времени, чтобы список выбора обновлялся с новыми позициями (особенно если у вас выбрано несколько элементов).

Эта проблема отсутствует в Chrome / FF. Я бы не подумал, что это простое переупорядочивание будет настолько интенсивным!

У кого-нибудь есть какая-нибудь информация, которая могла бы помочь мне ускорить выполнение функций moveUp / moveDown ?! Лучший способ извне генерировать последовательные значения UID для поля MySQL, которое должно быть представлено в виде строки. Причина: Общие последовательные значения UUID для on-disk -...

Пробовали поиск в Google, но:

Вопрос : Лучший способ извне генерировать последовательные значения UID для поля MySQL, которое должно быть представлено в виде строки.

Причина:
Общие последовательные значения UUID для вставок порядка на диске / добавления страниц для выполнения операций записи и префикс даты для скорости чтения при поиске индекса поля от char [0] вперед. Столбец будет проиндексирован, но ищутся лучшие данные для увеличения производительности чтения и записи таблицы, а не простой старый UUID.

Моя первоначальная мысль связана с некоторой степенью детализации (возможно, дополненной эпохой), добавленной или заменяющей некоторые часть сгенерированной строки UUIDv4, то есть [Unix epoch] [оставшийся UUID4] в поле char фиксированной ширины, но я не уверен, будет ли это иметь желаемый результат упорядочивания на странице / на диске и поиск по индексу результат. Примером может быть:

12904645950049bceba1cc24e80806dd

Значения не должны зависеть от самого MySQL, следовательно, используются UUID и временные метки, а не какой-либо вариант автоинкремента.

Любой, кто знает внутреннюю структуру индексов MySQL, может что-нибудь предложить (для таблиц InnoDB)?

Эйден

5
задан Aiden Bell 23 November 2010 в 00:36
поделиться