Первый раз, когда jQuery $ .post занимает необычайно много времени, последующие времена нормальные - PullRequest
0 голосов
/ 18 сентября 2011

На веб-странице у нас есть следующая система проверки формы на стороне сервера. Например, если пользователь добавляет сведения о дате для события (и событие может содержать много таких сведений о дате), мы вызываем функцию javascript при нажатии кнопки «Добавить», как показано ниже.

validateForm('frmName','codelibrary/classes/myclass.php','validationArrName')
where:
@frmName = form name
@codelibrary/classes/myclass.php = location of class file, that contains classes and functions for server side validation
@validationArrName = Type of validation we apply

In the php script, validationArrName is defined as a list of keys (representing form fields) and values (representing the functions we will call to validate that form field).
validationArrName  = array ('fieldName1'=>validationFun1,'fieldName2'=>validationFun2);

eg:
fieldName1 = email_address
validationFun1 = validateEmail()

На html-странице мы вызываем проверку на стороне сервера через ajax следующим образом.

$.post(className,$("form[name="+formName+"]").serialize()+"&isValidate=1&validateArrayName="+validateArrayName,function(data){ ... });

Если функция проверки сообщает об ошибке, мы отображаем соответствующее сообщение об ошибке на странице html.

Проблема в том, что когда мы делаем это в первый раз (например, после жесткого обновления страницы), отправка этой формы с информацией о дате для проверки занимает много времени по сравнению с на последующие запросы.

Мы заметили, что вместо однократного вызова файла codelibrary / classes / myclass.php он на самом деле ссылается на этот файл более 10 раз, прежде чем перейти к нужному месту (validationArrName) и запустить его.

Для последующих запросов он работает нормально и ссылается на этот файл только один раз.

В чем может быть проблема здесь? Может ли быть проблема с использованием jquery submit?

1 Ответ

0 голосов
/ 18 сентября 2011

лучшее, что вы можете сделать, это время.

в JavaScript:

console.time('post load'):
$.post(className,$("form[name="+formName+"]").serialize()+"&isValidate=1&validateArrayName="+validateArrayName,function(data){ 
    console.timeEnd('post load');
    console.log('data');
    ... 
});

в php, используйте microtime для определения времени другой части и повторяйте их. они будут напечатаны в консоли.

Он не должен быть кэшированным или включать связанный, так как ajax каждый раз устанавливает новое соединение.

Следуя вашим комментариям, я редактирую этот ответ:

Я все еще в растерянности того, что происходит. Однако я вижу две возможности. Во-первых, вы используете «флаг» для проверки форм или нет. При загрузке страницы все формы флага сбрасываются, и при первой проверке проверяйте их все. Последующие представления работают правильно.

Другой вариант заключается в том, что при первой отправке формы вы не нажимаете event.preventDefault() при нажатии кнопки "Отправить", но объяснение по-прежнему неэффективно.

Мне бы очень хотелось посмотреть, как вы вызываете функцию $.post(...) (как связана кнопка отправки или как вызывается $ (). Submit ()).

...