optimisations #2, basic session cache for some dropdowns

This commit is contained in:
jokob-sk
2022-08-04 22:45:12 +10:00
parent 42363879e1
commit 8e173eab88
2 changed files with 74 additions and 29 deletions

View File

@@ -1576,6 +1576,9 @@ def upgradeDB ():
ALTER TABLE "Devices" ADD "dev_Network_Node_port" INTEGER
""")
# don't hog DB access
closeDB ()
#-------------------------------------------------------------------------------
def openDB ():
@@ -1591,6 +1594,7 @@ def openDB ():
# Open DB and Cursor
sql_connection = sqlite3.connect (DB_PATH, isolation_level=None)
sql_connection.execute('pragma journal_mode=wal') #
sql_connection.text_factory = str
sql_connection.row_factory = sqlite3.Row
sql = sql_connection.cursor()

View File

@@ -815,28 +815,34 @@ function initializeiCheck () {
// -----------------------------------------------------------------------------
function initializeCombos () {
// Initialize combos with queries
initializeCombo ( $('#dropdownOwner')[0], 'getOwners', 'txtOwner');
initializeCombo ( $('#dropdownDeviceType')[0], 'getDeviceTypes', 'txtDeviceType');
initializeCombo ( $('#dropdownGroup')[0], 'getGroups', 'txtGroup');
initializeCombo ( $('#dropdownLocation')[0], 'getLocations', 'txtLocation');
initializeCombo ( $('#dropdownNetworkNodeMac')[0], 'getNetworkNodes', 'txtNetworkNodeMac');
initializeCombo ( '#dropdownOwner', 'getOwners', 'txtOwner', true);
initializeCombo ( '#dropdownDeviceType', 'getDeviceTypes', 'txtDeviceType', true);
initializeCombo ( '#dropdownGroup', 'getGroups', 'txtGroup', true);
initializeCombo ( '#dropdownLocation', 'getLocations', 'txtLocation', true);
initializeCombo ( '#dropdownNetworkNodeMac', 'getNetworkNodes', 'txtNetworkNodeMac', false);
// Initialize static combos
initializeComboSkipRepeated ();
}
function initializeCombo (HTMLelement, queryAction, txtDataField) {
function initializeCombo (dropdownId, queryAction, txtDataField, useCache) {
// check if we have the value cached already
var dropdownHtmlContent = useCache ? getCache(dropdownId) : "";
if(dropdownHtmlContent == "")
{
// get data from server
$.get('php/server/devices.php?action='+queryAction, function(data) {
var listData = JSON.parse(data);
var order = 1;
HTMLelement.innerHTML = ''
// for each item
listData.forEach(function (item, index) {
// insert line divisor
if (order != item['order']) {
HTMLelement.innerHTML += '<li class="divider"></li>';
dropdownHtmlContent += '<li class="divider"></li>';
order = item['order'];
}
@@ -848,11 +854,46 @@ function initializeCombo (HTMLelement, queryAction, txtDataField) {
}
// add dropdown item
HTMLelement.innerHTML +=
dropdownHtmlContent +=
'<li><a href="javascript:void(0)" onclick="setTextValue(\''+
txtDataField +'\',\''+ id +'\')">'+ item['name'] + '</a></li>'
});
writeDropdownHtml(dropdownId, dropdownHtmlContent)
});
} else
{
writeDropdownHtml(dropdownId, dropdownHtmlContent)
}
}
// write out the HTML for the dropdown
function writeDropdownHtml(dropdownId, dropdownHtmlContent)
{
// cache
setCache(dropdownId, dropdownHtmlContent);
// write HTML for the dropdown
var HTMLelement = $(dropdownId)[0];
HTMLelement.innerHTML = ''
HTMLelement.innerHTML += dropdownHtmlContent;
}
function getCache(key)
{
// check cache
if(sessionStorage.getItem(key))
{
return sessionStorage.getItem(key);
} else
{
return "";
}
}
function setCache(key, data)
{
sessionStorage.setItem(key, data);
}