Ваше выполнение сценария jquery не должно ничего блокировать. Думаю, единственное повышение производительности, которое вы можете получить, - это серверный сайт.
Но я попытался минимизировать ваш код и сделать его немного проще для чтения. Далее я использовал new Date().getTime()
, чтобы получить текущие миллисекунды. Может быть, это вам поможет.
$(document).ready(function() {
$('#upload-form').on('submit', onSubmitUploadForm);
function onSubmitUploadForm(event) {
event.preventDefault();
var uploadForm = $(event.target);
var uploadStatus = $('#upload-status');
var startTime = new Date().getTime();
$.ajax({
url: uploadForm.attr('action'),
type: uploadForm.attr('method'),
data: {}, //new FormData(uploadForm),
processData: false,
contentType: false,
cache: false,
beforeSend: function() {
onBeforeSend(uploadStatus);
},
success: function() {
onSuccess(uploadForm, startTime);
},
error: function() {
onError(uploadStatus, startTime);
},
xhr: function() {
onXhr(uploadStatus);
}
});
}
function onBeforeSend(uploadStatus) {
uploadStatus.text('Uploading...');
}
function onSuccessUploadForm(uploadForm, uploadStatus, startTime) {
var requestTime = new Date().getTime() - startTime;
uploadStatus.text(
getSuccessResultText(
uploadForm.find('input[name="bigFile"]').eq(0).files[0].size,
requestTime
)
);
}
function getSuccessResultText(fileSize, requestTime) {
return 'Upload complete. ' +
fileSize + ' bytes in ' +
requestTime + ' milliseconds. Rate=' +
((fileSize / 1000000) / (requestTime / 1000)).toFixed(2) + ' Mbps';
}
function onError(uploadStatus, startTime) {
var requestTime = new Date().getTime() - startTime;
uploadStatus.text('Something went wrong after ' + requestTime + ' milliseconds');
}
function onXhr(uploadStatus) {
var xhrobj = $.ajaxSettings.xhr();
if (xhrobj.upload) {
xhrobj.upload.addEventListener('progress', function(event) {
if (event.lengthComputable) {
var percent = (event.loaded / event.total) * 100;
uploadStatus.text('Uploading ' + percent + '%. Please wait.');
}
}, false);
return xhr;
}
return xhrobj;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="upload-form" method="post" action="testUploadSpeed.html">
<input type="file" name="bigFile" />
<br />
<input type="submit" value="submit" />
</form>
<p id="uploadStatus"></p>