событие window.resize, стреляющее в Internet Explorer

На самом деле причины представляют в виде строки, неизменны в Java, не имеет непосредственное отношение к безопасности. Эти две главных причины следующие:

Безопасность Thead:

Строки являются чрезвычайно широко используемым типом объекта. Это, как поэтому более или менее гарантируют, будет использоваться в многопоточной среде. Строки неизменны, чтобы удостовериться, что безопасно совместно использовать строки среди потоков. Наличие неизменные строки гарантируют, что при передаче строк от потока к другому потоку B, поток B не может неожиданно изменить, распараллеливают строку A.

Не только делает эту справку, упрощают уже довольно сложную задачу многопоточного программирования, но это также помогает с производительностью многопоточных приложений. Доступ к изменяемым объектам должен так или иначе синхронизироваться, когда к ним можно получить доступ от нескольких потоков, чтобы удостовериться, что один поток не пытается считать значение Вашего объекта, в то время как это изменяется другим потоком. Надлежащая синхронизация должна и трудно чтобы сделать правильно для программиста, и дорогой во времени выполнения. Неизменные объекты не могут быть изменены и поэтому не нуждаются в синхронизации.

Производительность:

, В то время как Строковое интернирование было упомянуто, оно только представляет маленькое усиление в эффективности памяти для программ Java. Только строковые литералы интернируются. Это означает, что только строки, которые являются тем же в Вашем исходный код , совместно используют тот же Строковый Объект. Если Ваша программа динамично создаст строку, которые являются тем же, то они будут представлены в различных объектах.

, Что еще более важно, неизменные строки позволяют им совместно использовать свои внутренние данные. Для многих строковых операций это означает, что основной массив символов не должен быть скопирован. Например, скажите, что Вы хотите взять пять первых символов Строки. В Java Вы были бы вызовы myString.substring (0,5). В этом случае, что подстрока (), который делает метод, должна просто создать новую Строку, возражают, что myString's долей, лежащий в основе символа [], но кто знает, что это запускается в индексе 0 и концах в индексе 5 того символа []. Для помещения этого в графическую форму Вы закончили бы со следующим:

 |               myString                  |
 v                                         v
"The quick brown fox jumps over the lazy dog"   <-- shared char[]
 ^   ^
 |   |  myString.substring(0,5)

Это делает этот вид из операций чрезвычайно дешевым, и O (1) начиная с операции ни зависит от длины исходной строки, ни на длине подстроки, которую мы должны извлечь. Это поведение также обладает некоторыми преимуществами памяти, так как много строк могут совместно использовать свой базовый символ [].

75
задан MissingLinq 5 December 2009 в 20:12
поделиться

2 ответа

I couldn't get the resize event to fire when an element resized (only tried in IE8 though).

However what is the target on the event object when you're experiencing this issue, could you do:

$(window).resize(function(e) {
    if( e.target != window ) return;
    // your stuff here
});
-1
ответ дан 24 November 2019 в 11:41
поделиться

Я только что обнаружил другую проблему, которая может вам помочь.

Я использую jQuery, и у меня есть событие window.resize для вызова функции, которая изменяет положение div, добавленного к телу.

Теперь, когда я устанавливаю свойство LEFT css этого добавленного элемента div, событие window.resize запускается НЕ ПО ПРИЧИНЕ.

Это приводит к бесконечному циклу, запускающему window.resize снова и снова.

Код без исправления:

$(window).resize(function(){
    var onResize = function(){
        //The method which alter some css properties triggers 
        //window.resize again and it ends in an infinite loop
        someMethod();
    }
    window.clearTimeout(resizeTimeout);
    resizeTimeout = window.setTimeout(onResize, 10);
});

Решение:

var winWidth = $(window).width(),
    winHeight = $(window).height();

$(window).resize(function(){
    var onResize = function(){
        //The method which alter some css properties triggers 
        //window.resize again and it ends in an infinite loop
        someMethod();
    }

    //New height and width
    var winNewWidth = $(window).width(),
        winNewHeight = $(window).height();

    // compare the new height and width with old one
    if(winWidth!=winNewWidth || winHeight!=winNewHeight){
        window.clearTimeout(resizeTimeout);
        resizeTimeout = window.setTimeout(onResize, 10);
    }
    //Update the width and height
    winWidth = winNewWidth;
    winHeight = winNewHeight;
});

Таким образом, в основном он проверяет, были ли изменены высота или ширина (что произойдет ТОЛЬКО, когда вы действительно измените размер с помощью окна).

58
ответ дан 24 November 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: