]> granicus.if.org Git - transmission/commitdiff
parsing uris is expensive, so cache the results.
authorJordan Lee <jordan@transmissionbt.com>
Wed, 28 Sep 2011 18:06:04 +0000 (18:06 +0000)
committerJordan Lee <jordan@transmissionbt.com>
Wed, 28 Sep 2011 18:06:04 +0000 (18:06 +0000)
web/javascript/transmission.js

index e582695c1d1f8c657c0a630efbbb6af27eefafa3..932a15e52855dab1612f056eb88436e03e801b19 100644 (file)
@@ -33,6 +33,7 @@ Transmission.prototype =
                this._torrents     = {};
                this._rows         = [];
                this.dirtyTorrents = {};
+               this.uriCache      = {};
 
                // Initialize the clutch preferences
                Prefs.getClutchPrefs(this);
@@ -1549,19 +1550,29 @@ Transmission.prototype =
                var ret = {};
 
                var torrents = this.getAllTorrents();
-               for (var i=0, torrent; torrent=torrents[i]; ++i) {
+               for (var i=0, torrent; torrent=torrents[i]; ++i)
+               {
                        var names = [];
                        var trackers = torrent.getTrackers();
-                       for (var j=0, tracker; tracker=trackers[j]; ++j) {
-                               var uri = parseUri(tracker.announce);
-                               var domain = this.getDomainName(uri.host);
-                               var name = this.getReadableDomain(domain);
-                               if (!(name in ret))
-                                       ret[name] = { 'uri': uri,
-                                                     'domain': domain,
-                                                     'count': 0 };
-                               if (names.indexOf(name) === -1)
-                                       names.push(name);
+                       for (var j=0, tracker; tracker=trackers[j]; ++j)
+                       {
+                               var uri, announce = tracker.announce;
+
+                               if (announce in this.uriCache)
+                                       uri = this.uriCache[announce];
+                               else {
+                                       uri = this.uriCache[announce] = parseUri (announce);
+                                       uri.domain = this.getDomainName (uri.host);
+                                       uri.name = this.getReadableDomain (uri.domain);
+                               }
+
+                               if (!(uri.name in ret))
+                                       ret[uri.name] = { 'uri': uri,
+                                                         'domain': uri.domain,
+                                                         'count': 0 };
+
+                               if (names.indexOf(uri.name) === -1)
+                                       names.push(uri.name);
                        }
                        for (var j=0, name; name=names[j]; ++j)
                                ret[name].count++;