From 8961e3e06afd252082a5686b8140dc3208404d96 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 16 Nov 2020 12:44:21 +0100 Subject: [PATCH] Accelerated load time --- Makefile | 7 +++++-- static/js/data.js | 8 +++++--- static/js/getTextFromFile.js | 33 +++++++++++++++++++++++++++++++-- tools/generate_data.py | 30 ++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 7 deletions(-) create mode 100755 tools/generate_data.py diff --git a/Makefile b/Makefile index d2af1bbc..d90121f6 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,11 @@ -default: +default: data hugo -serve: +serve: data hugo -D server clean: rm -rf public + +data: + python3 tools/generate_data.py diff --git a/static/js/data.js b/static/js/data.js index 910cc579..f711d035 100644 --- a/static/js/data.js +++ b/static/js/data.js @@ -232,7 +232,8 @@ class dataFileBase { return /^#\s*([A-Za-z_]+)\s*:\s*(.*)$/; } async getGeometryAsync(state = null) { - var text = await getTextFromFileUrlAsync(`/data/structures/${this.set.name.replace("#", "")}/${this.molecule.toLowerCase()}.xyz`) + // var text = await getTextFromFileUrlAsync(`/data/structures/${this.set.name.replace("#", "")}/${this.molecule.toLowerCase()}.xyz`) + var text = getTextFromFileUrl(`/data/structures/${this.set.name.replace("#", "")}/${this.molecule.toLowerCase()}.xyz`) var lines = text.split("\n") var indexes = lines.findAllIndexes((line) => { return line.match(/^\d+$/) @@ -279,7 +280,8 @@ class dataFileBase { case String.name: file = getFullDataPath(file) const maxAge= (DebugMode.Enabled,0,600) - var str = await getTextFromFileUrlAsync(file,{"Cache-Control":`max-age=${maxAge}`}) + // var str = await getTextFromFileUrlAsync(file,{"Cache-Control":`max-age=${maxAge}`}) + var str = await getTextFromFileUrl(file) break; case File.name: var str = await getTextFromUploadedFileAsync(file) @@ -413,4 +415,4 @@ class VertDataFile extends dataFileBase { ex.VertExcitationKind = kind return ex } -} \ No newline at end of file +} diff --git a/static/js/getTextFromFile.js b/static/js/getTextFromFile.js index a2da778b..7695e610 100644 --- a/static/js/getTextFromFile.js +++ b/static/js/getTextFromFile.js @@ -1,3 +1,33 @@ +var fileCache = function () { + var json_url = "/data/database.json"; + var req = new XMLHttpRequest(); + req.open("GET",json_url, true); + req.responseType = 'json'; + return new Promise(function (resolve, reject) { + req.onreadystatechange = function() { + if (req.readyState == 4) { + if (req.status == 200 || req.status==304) {//when a good response is given do this + resolve(req.response); + } else { + reject({ + status: req.status, + statusText: req.statusText + }); + } + } + } + req.send(); + }); +} + + +_cache = fileCache(); +async function getTextFromFileUrl(url,header={}) { + var cache = await _cache; + return cache[url]; +} + + async function getTextFromFileUrlAsync(url,header={}) { return new Promise(function (resolve, reject) { var req = new XMLHttpRequest(); @@ -21,7 +51,6 @@ async function getTextFromFileUrlAsync(url,header={}) { req.send(); }); } - async function getTextFromUploadedFileAsync(inputFile){ const temporaryFileReader = new FileReader(); @@ -36,4 +65,4 @@ async function getTextFromUploadedFileAsync(inputFile){ }; temporaryFileReader.readAsText(inputFile); }); -}; \ No newline at end of file +}; diff --git a/tools/generate_data.py b/tools/generate_data.py new file mode 100755 index 00000000..cd29320e --- /dev/null +++ b/tools/generate_data.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 + +import os +import os.path +import json + + +def main(): + + d = {} + os.chdir("static") + try: + os.remove(os.path.join("data","database.json")) + except FileNotFoundError: + pass + for root, dirs, files in os.walk('data'): + for name in files: + filename = os.path.join(root,name) + with open(filename,'r',encoding="utf8") as f: + try: + d["/"+filename] = f.read() + except UnicodeDecodeError: + pass + + with open(os.path.join("data","database.json"),'w') as f: + f.write(json.dumps(d,indent=1)) + + +if __name__ == "__main__": + main()