improve receiver load times by concating javascript
This commit is contained in:
parent
7a3043559f
commit
8c8445eb3b
@ -24,18 +24,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<title>OpenWebRX | Open Source SDR Web App for Everyone!</title>
|
<title>OpenWebRX | Open Source SDR Web App for Everyone!</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
<link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico" />
|
||||||
<script src="static/openwebrx.js"></script>
|
<script src="compiled/receiver.js"></script>
|
||||||
<script src="static/lib/jquery-3.2.1.min.js"></script>
|
|
||||||
<script src="static/lib/jquery.nanoscroller.js"></script>
|
|
||||||
<script src="static/lib/Demodulator.js"></script>
|
|
||||||
<script src="static/lib/DemodulatorPanel.js"></script>
|
|
||||||
<script src="static/lib/BookmarkBar.js"></script>
|
|
||||||
<script src="static/lib/AudioEngine.js"></script>
|
|
||||||
<script src="static/lib/ProgressBar.js"></script>
|
|
||||||
<script src="static/lib/Measurement.js"></script>
|
|
||||||
<script src="static/lib/FrequencyDisplay.js"></script>
|
|
||||||
<script src="static/lib/Js8Threads.js"></script>
|
|
||||||
<script src="static/lib/Modes.js"></script>
|
|
||||||
<link rel="stylesheet" type="text/css" href="static/lib/nanoscroller.css" />
|
<link rel="stylesheet" type="text/css" href="static/lib/nanoscroller.css" />
|
||||||
<link rel="stylesheet" type="text/css" href="static/css/openwebrx.css" />
|
<link rel="stylesheet" type="text/css" href="static/css/openwebrx.css" />
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
|
@ -4,13 +4,22 @@ from datetime import datetime
|
|||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
from abc import ABCMeta, abstractmethod
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class AssetsController(Controller):
|
class AssetsController(Controller, metaclass=ABCMeta):
|
||||||
def getModified(self, file):
|
def getModified(self, file):
|
||||||
return None
|
return datetime.fromtimestamp(os.path.getmtime(self.getFilePath(file)))
|
||||||
|
|
||||||
def openFile(self, file):
|
def openFile(self, file):
|
||||||
|
return open(self.getFilePath(file), "rb")
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def getFilePath(self, file):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def serve_file(self, file, content_type=None):
|
def serve_file(self, file, content_type=None):
|
||||||
@ -41,8 +50,8 @@ class AssetsController(Controller):
|
|||||||
|
|
||||||
|
|
||||||
class OwrxAssetsController(AssetsController):
|
class OwrxAssetsController(AssetsController):
|
||||||
def openFile(self, file):
|
def getFilePath(self, file):
|
||||||
return pkg_resources.resource_stream("htdocs", file)
|
return pkg_resources.resource_filename("htdocs", file)
|
||||||
|
|
||||||
|
|
||||||
class AprsSymbolsController(AssetsController):
|
class AprsSymbolsController(AssetsController):
|
||||||
@ -57,8 +66,54 @@ class AprsSymbolsController(AssetsController):
|
|||||||
def getFilePath(self, file):
|
def getFilePath(self, file):
|
||||||
return self.path + file
|
return self.path + file
|
||||||
|
|
||||||
def getModified(self, file):
|
|
||||||
return datetime.fromtimestamp(os.path.getmtime(self.getFilePath(file)))
|
|
||||||
|
|
||||||
def openFile(self, file):
|
class CompiledAssetsController(Controller):
|
||||||
return open(self.getFilePath(file), "rb")
|
profiles = {
|
||||||
|
"receiver.js": [
|
||||||
|
"openwebrx.js",
|
||||||
|
"lib/jquery-3.2.1.min.js",
|
||||||
|
"lib/jquery.nanoscroller.js",
|
||||||
|
"lib/Demodulator.js",
|
||||||
|
"lib/DemodulatorPanel.js",
|
||||||
|
"lib/BookmarkBar.js",
|
||||||
|
"lib/AudioEngine.js",
|
||||||
|
"lib/ProgressBar.js",
|
||||||
|
"lib/Measurement.js",
|
||||||
|
"lib/FrequencyDisplay.js",
|
||||||
|
"lib/Js8Threads.js",
|
||||||
|
"lib/Modes.js",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
def indexAction(self):
|
||||||
|
profileName = self.request.matches.group(1)
|
||||||
|
if profileName not in CompiledAssetsController.profiles:
|
||||||
|
self.send_response("profile not found", code=404)
|
||||||
|
|
||||||
|
files = CompiledAssetsController.profiles[profileName]
|
||||||
|
logger.debug(files)
|
||||||
|
files = [pkg_resources.resource_filename("htdocs", f) for f in files]
|
||||||
|
logger.debug(files)
|
||||||
|
|
||||||
|
modified = self.getModified(files)
|
||||||
|
|
||||||
|
if modified is not None and "If-Modified-Since" in self.handler.headers:
|
||||||
|
client_modified = datetime.strptime(
|
||||||
|
self.handler.headers["If-Modified-Since"], "%a, %d %b %Y %H:%M:%S %Z"
|
||||||
|
)
|
||||||
|
if modified <= client_modified:
|
||||||
|
self.send_response("", code=304)
|
||||||
|
return
|
||||||
|
|
||||||
|
contents = [self.getContents(f) for f in files]
|
||||||
|
|
||||||
|
(content_type, encoding) = mimetypes.MimeTypes().guess_type(profileName)
|
||||||
|
self.send_response("\n".join(contents), content_type=content_type, last_modified=modified, max_age=3600)
|
||||||
|
|
||||||
|
def getContents(self, file):
|
||||||
|
with open(file) as f:
|
||||||
|
return f.read()
|
||||||
|
|
||||||
|
def getModified(self, files):
|
||||||
|
modified = [datetime.fromtimestamp(os.path.getmtime(f)) for f in files]
|
||||||
|
return max(*modified)
|
||||||
|
@ -6,7 +6,8 @@ from owrx.controllers.template import (
|
|||||||
)
|
)
|
||||||
from owrx.controllers.assets import (
|
from owrx.controllers.assets import (
|
||||||
OwrxAssetsController,
|
OwrxAssetsController,
|
||||||
AprsSymbolsController
|
AprsSymbolsController,
|
||||||
|
CompiledAssetsController
|
||||||
)
|
)
|
||||||
from owrx.controllers.websocket import WebSocketController
|
from owrx.controllers.websocket import WebSocketController
|
||||||
from owrx.controllers.api import ApiController
|
from owrx.controllers.api import ApiController
|
||||||
@ -91,6 +92,7 @@ class Router(object):
|
|||||||
StaticRoute("/status", StatusController),
|
StaticRoute("/status", StatusController),
|
||||||
StaticRoute("/status.json", StatusController, options={"action": "jsonAction"}),
|
StaticRoute("/status.json", StatusController, options={"action": "jsonAction"}),
|
||||||
RegexRoute("/static/(.+)", OwrxAssetsController),
|
RegexRoute("/static/(.+)", OwrxAssetsController),
|
||||||
|
RegexRoute("/compiled/(.+)", CompiledAssetsController),
|
||||||
RegexRoute("/aprs-symbols/(.+)", AprsSymbolsController),
|
RegexRoute("/aprs-symbols/(.+)", AprsSymbolsController),
|
||||||
StaticRoute("/ws/", WebSocketController),
|
StaticRoute("/ws/", WebSocketController),
|
||||||
RegexRoute("(/favicon.ico)", OwrxAssetsController),
|
RegexRoute("(/favicon.ico)", OwrxAssetsController),
|
||||||
|
Loading…
Reference in New Issue
Block a user