Нам просто пришлось обойти эту проблему и протестировать три разных подхода.
var Ajax1 = {
call: function() {
if (typeof this.xhr !== 'undefined')
this.xhr.abort();
this.xhr = $.ajax({
url: 'your/long/running/request/path',
type: 'GET',
success: function(data) {
//process response
}
});
}
};
var Ajax2 = {
counter: 0,
call: function() {
var self = this,
seq = ++this.counter;
$.ajax({
url: 'your/long/running/request/path',
type: 'GET',
success: function(data) {
if (seq === self.counter) {
//process response
}
}
});
}
};
var Ajax3 = {
active: false,
call: function() {
if (this.active === false) {
this.active = true;
var self = this;
$.ajax({
url: 'your/long/running/request/path',
type: 'GET',
success: function(data) {
//process response
},
complete: function() {
self.active = false;
}
});
}
}
};
$(function() {
$('#button').click(function(e) {
Ajax3.call();
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="button" type="button" value="click" />
В нашем случае мы решили использовать подход №3, поскольку он создает меньшую нагрузку для сервера. Но я не уверен на 100%, если jQuery гарантирует вызов метода .complete (), это может вызвать тупиковую ситуацию. В наших тестах мы не смогли воспроизвести такую ситуацию.
Оптимально ли хранить все отдельные данные журнала набора в одной таблице (записи журнала)?
blockquote>По всей вероятности, да, исключение будет, если количество строк вырос, чтобы негативно повлиять на время отклика.
Должны ли таблицы «Тип упражнения» и «Оборудование» быть отдельными или просто столбцами в «Таблице упражнений»? То же самое относится и к типу тренировки
blockquote>Они должны быть отделены друг от друга, чтобы уменьшить ненужное дублирование и выдать, например, если вам нужно изменить тип или оборудование, вам придется применить это изменение ко всем строкам в таблице упражнений с отдельной таблицей, вам просто нужно внести одно изменение.
Будет ли это хорошим подходом с точки зрения производительности / удобства использования?
blockquote>За исключением таблицы Log (в том виде, в каком она есть, включая получение даты), тогда она выглядит как хороший и эффективный подход. Таблица «Журнал» не нужна, поскольку в таблице «Записи журнала» есть столбец для даты и времени (поэтому в ответ на комментарий «да» было бы лучше использовать дату / время в записях журнала и покончить с журналом таблицу).