Ich hab das mal analysiert
Das Packagefile ist gar nicht das Problem.
Die Bremse ist der Code zum Parsen des Statusfiles (bei mir 500 KB) zum Ermitteln der aktuell installierten Version.
Das createSetup dauert hier insgesamt ca. 1sek. Gefühlt öffnete das Plugin nach 2sek.
Mit nachfolgendem optimierten Code für "currentVersion" dauert das createSetup nur noch 0,08 sek
Auf meiner 2. Box konnte ich damit die Zeit von 0,7sek auf 0,07sek reduzieren.
(also ungefähr 10x schneller)
Jetzt öffnet sich das Plugin praktisch sofort. Man merkt da gar keine Verzögerung mehr.
Und damit stört es wohl auch nicht, wenn da noch ein paar Plugins im Feed dazukommen.
Python
def createSetup(self, first=False):
+ global statusfile_data
+ statusfile_data = ""
updates=0
...
Python
statusfile_data = ""
def currentVersion(package):
global statusfile_data
if not statusfile_data:
print "=== read data"
if os_path.exists("/var/lib/dpkg/status"):
statusfile_data = open("/var/lib/dpkg/status","r").read().split("\n")
else:
statusfile_data = open("/var/lib/opkg/status","r").read().split("\n")
needle="Package: %s" % package
needle=needle.strip()
version=_("none")
try:
if needle in statusfile_data:
index = statusfile_data.index(needle)
status_line = statusfile_data[index+1]
if status_line.startswith("Status: deinstall ok"):
return version
for line in statusfile_data[index+1:]:
if line.startswith("Version:"):
sp=line.split(":")
if len(sp) > 1:
version=sp[1].strip()
# cprint("[gutemine] got Version %s for %s" % (version,package))
return version
return version
except:
import traceback, sys
traceback.print_exc()
return version
Alles anzeigen