jQuery div.offsetWidth низкая производительность - PullRequest
2 голосов
/ 03 июня 2011

У меня странная проблема с jquery.Мы пытаемся использовать jQuery 1.5.1 в нашем старом веб-приложении.Он поддерживает только IE и всегда отображается в режиме причуд (без элемента doctype).

jQuery работает отлично, за исключением одной проблемы.Я заметил, что одна функция работает медленно.Используя несжатую версию, я обнаружил, что проблема в функции инициализации jQuery.Следующий код выполняется около 2 секунд

        div.style.width = div.style.paddingLeft = "1px";
    body.appendChild( div );
    jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;

    if ( "zoom" in div.style ) {
        // Check if natively block-level elements act like inline-block
        // elements when setting their display to 'inline' and giving
        // them layout
        // (IE < 8 does this)
        div.style.display = "inline";
        div.style.zoom = 1;
        **jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;**

Жирная линия - это проблема.

По некоторым причинам div.offsetLength требует около 2 секунд для выполнения после установки атрибутов отображения и масштабирования.Первый вызов этого свойства (3-я строка) работает быстро.

Интересно, что может вызвать эту проблему и как я могу улучшить производительность инициализации jQuery

1 Ответ

1 голос
/ 03 июня 2011

Режим срабатывания причуд - ужасная, ужасная, ужасная вещь.
В режиме причуд jQuery вынужден использовать альтернативные методы для взаимодействия с DOM и почти наверняка является причиной проблем со скоростью в IE.

http://lostechies.com/johnteague/2009/09/15/jquery-does-not-like-quirksmode/
http://blog.yourinnovative.com/the-development-lab/jquery-quirks-mode-in-ie6/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...