第一次jQuery $ .post需要非常长的时间,后续正常

时间:2011-09-18 12:05:03

标签: ajax performance jquery jquery-post

在网页上,我们有以下服务器端表单验证系统。例如,如果用户正在为事件添加日期详细信息(并且事件可以包含许多此类日期详细信息),则我们会在单击“添加”按钮时调用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文件,而是在跳转到所需位置(validationArrName)并运行它之前实际引用此文件超过10次。

对于后续请求,它工作正常,只引用该文件一次。

这可能是什么问题?我们使用jquery提交会有问题吗?

1 个答案:

答案 0 :(得分:0)

你能做的最好的事情就是时间。

在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()。