From 8e173eab88e234683b808764d6232f3e75b23f7e Mon Sep 17 00:00:00 2001 From: jokob-sk Date: Thu, 4 Aug 2022 22:45:12 +1000 Subject: [PATCH] optimisations #2, basic session cache for some dropdowns --- back/pialert.py | 4 ++ front/deviceDetails.php | 99 +++++++++++++++++++++++++++++------------ 2 files changed, 74 insertions(+), 29 deletions(-) diff --git a/back/pialert.py b/back/pialert.py index 3f6c3852..0321b70d 100644 --- a/back/pialert.py +++ b/back/pialert.py @@ -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() diff --git a/front/deviceDetails.php b/front/deviceDetails.php index e4319171..03ea31a5 100644 --- a/front/deviceDetails.php +++ b/front/deviceDetails.php @@ -815,44 +815,85 @@ 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) { - // get data from server - $.get('php/server/devices.php?action='+queryAction, function(data) { - var listData = JSON.parse(data); - var order = 1; +function initializeCombo (dropdownId, queryAction, txtDataField, useCache) { - HTMLelement.innerHTML = '' - // for each item - listData.forEach(function (item, index) { - // insert line divisor - if (order != item['order']) { - HTMLelement.innerHTML += '
  • '; - order = item['order']; - } + // check if we have the value cached already + var dropdownHtmlContent = useCache ? getCache(dropdownId) : ""; - id = item['name']; - // use explicitly specified id (value) if avaliable - if(item['id']) - { - id = item['id']; - } + if(dropdownHtmlContent == "") + { + // get data from server + $.get('php/server/devices.php?action='+queryAction, function(data) { + var listData = JSON.parse(data); + var order = 1; + - // add dropdown item - HTMLelement.innerHTML += - '
  • '+ item['name'] + '
  • ' + // for each item + listData.forEach(function (item, index) { + // insert line divisor + if (order != item['order']) { + dropdownHtmlContent += '
  • '; + order = item['order']; + } + + id = item['name']; + // use explicitly specified id (value) if avaliable + if(item['id']) + { + id = item['id']; + } + + // add dropdown item + dropdownHtmlContent += + '
  • '+ item['name'] + '
  • ' + }); + + 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); }