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

View File

@@ -815,28 +815,34 @@ function initializeiCheck () {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
function initializeCombos () { function initializeCombos () {
// Initialize combos with queries // Initialize combos with queries
initializeCombo ( $('#dropdownOwner')[0], 'getOwners', 'txtOwner'); initializeCombo ( '#dropdownOwner', 'getOwners', 'txtOwner', true);
initializeCombo ( $('#dropdownDeviceType')[0], 'getDeviceTypes', 'txtDeviceType'); initializeCombo ( '#dropdownDeviceType', 'getDeviceTypes', 'txtDeviceType', true);
initializeCombo ( $('#dropdownGroup')[0], 'getGroups', 'txtGroup'); initializeCombo ( '#dropdownGroup', 'getGroups', 'txtGroup', true);
initializeCombo ( $('#dropdownLocation')[0], 'getLocations', 'txtLocation'); initializeCombo ( '#dropdownLocation', 'getLocations', 'txtLocation', true);
initializeCombo ( $('#dropdownNetworkNodeMac')[0], 'getNetworkNodes', 'txtNetworkNodeMac'); initializeCombo ( '#dropdownNetworkNodeMac', 'getNetworkNodes', 'txtNetworkNodeMac', false);
// Initialize static combos // Initialize static combos
initializeComboSkipRepeated (); 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 data from server
$.get('php/server/devices.php?action='+queryAction, function(data) { $.get('php/server/devices.php?action='+queryAction, function(data) {
var listData = JSON.parse(data); var listData = JSON.parse(data);
var order = 1; var order = 1;
HTMLelement.innerHTML = ''
// for each item // for each item
listData.forEach(function (item, index) { listData.forEach(function (item, index) {
// insert line divisor // insert line divisor
if (order != item['order']) { if (order != item['order']) {
HTMLelement.innerHTML += '<li class="divider"></li>'; dropdownHtmlContent += '<li class="divider"></li>';
order = item['order']; order = item['order'];
} }
@@ -848,11 +854,46 @@ function initializeCombo (HTMLelement, queryAction, txtDataField) {
} }
// add dropdown item // add dropdown item
HTMLelement.innerHTML += dropdownHtmlContent +=
'<li><a href="javascript:void(0)" onclick="setTextValue(\''+ '<li><a href="javascript:void(0)" onclick="setTextValue(\''+
txtDataField +'\',\''+ id +'\')">'+ item['name'] + '</a></li>' 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);
} }