JQuery скрипт занимает слишком много времени в IE - PullRequest
2 голосов
/ 12 марта 2010

У меня есть страница с, скажем, 120 коробками с датами. Я использую плагин проверки для проверки этих полей на странице отправки. Я написал несколько пользовательских кодов проверки даты.

Я использую jQuery.validator.addMethod () для создания правил, а затем использую validator.addClassRules (), чтобы добавить эти проверки в мои календари.

В Firefox (время от времени) он работает нормально, но в IE, как только я нажимаю Enter, выдается всплывающее окно с надписью: «Сценарий на этой странице вызывает замедление работы Internet Explorer ....»

Может кто-нибудь, пожалуйста, помогите.

Добавление кода тоже .....

/******* This is the input thats there *********/
<input type="text" toDate="${dateRangeModel.toDate}" fromDate="${dateRangeModel.fromDate}" prefill="mm/dd/yyyy" class="calendarInput"  />

/* Checking if its a valid date */
            jQuery.validator.addMethod("isDateValid",function(value, element) { 
                    var re =  /(0[1-9]|1[012]|[1-9])+\/(0[1-9]|[12][0-9]|3[01]|[1-9])+\/(19|20)\d\d/;                                      

                    if($(element).is(':hidden') || value.match(re) || value === $(element).attr('prefill')){
                        return true;
                    }
                    else    {
                        return false;
                    }
            }, 'Enter a valid date');


/******** Adding class rule ***********/
$.validator.addClassRules({
                calendarInput: {
                    dateRange:true,
                    isDateValid: true
                }
            });

Ответы [ 2 ]

0 голосов
/ 12 марта 2010

Одна вещь, которую вы можете сделать, это скомпилировать регулярное выражение вне вызова проверки, как

var re = new RegExp("(0[1-9]|1[012]|[1-9])+\/(0[1-9]|[12][0-9]|3[01]|[1-9])+\/(19|20)\d\d");

и затем повторно использовать один и тот же объект во всех вызовах проверки, а не постоянно перестраивать его. Тем не менее, наличие 120 практически всего на одной странице является катастрофой для пользовательского интерфейса.

Вы можете также сократить оставшуюся часть (в основном, чтобы сделать ее более краткой):

jQuery.validator.addMethod("isDateValid",function(value, element) { 
    return ($(element).is(':hidden') || value === $(element).attr('prefill') || value.match(re));
}, 'Enter a valid date');

Я переупорядочил тест в надежде, что последний тест на регулярные выражения сделает все немного быстрее.

0 голосов
/ 12 марта 2010

Лучший инструмент для решения проблем производительности IE - dynaTrace AJAX Edition . У них есть руководства по быстрому старту на сайте , просто запустите свою страницу и посмотрите, что требует больше времени для выполнения.

И да, это бесплатно:)

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