Changeset 11305


Ignore:
Timestamp:
Oct 12, 2010, 5:38:03 PM (11 years ago)
Author:
charles
Message:

(trunk web) #3624 "Web client very slow for large number of torrents" -- minor tweaks to avoid excessive string concatenation in javascript

Location:
trunk/web/javascript
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/javascript/torrent.js

    r11202 r11305  
    514514                if( this.needsMetaData() ){
    515515                        var metaPercentComplete = this._metadataPercentComplete * 100;
    516                         progress_details = "Magnetized transfer - retrieving metadata (";
    517                         progress_details += Transmission.fmt.percentString( metaPercentComplete );
    518                         progress_details += "%)";
     516                        progress_details = [ "Magnetized transfer - retrieving metadata (",
     517                                             Transmission.fmt.percentString( metaPercentComplete ),
     518                                             "%)" ].join('');
    519519
    520520                        var empty = "";
     
    530530                else if( notDone )
    531531                {
    532                         var eta = '';
    533 
    534                         if( this.isActive( ) )
    535                         {
    536                                 eta = ' - ';
    537                                 if (this._eta < 0 || this._eta >= Torrent._InfiniteTimeRemaining )
    538                                         eta += 'remaining time unknown';
    539                                 else
    540                                         eta += Transmission.fmt.timeInterval(this._eta) + ' remaining';
    541                         }
    542 
    543532                        // Create the 'progress details' label
    544533                        // Eg: '101 MiB of 631 MiB (16.02%) - 2 hr remaining'
    545                         c = Transmission.fmt.size( this._sizeWhenDone - this._leftUntilDone );
    546                         c += ' of ';
    547                         c += Transmission.fmt.size( this._sizeWhenDone );
    548                         c += ' (';
    549                         c += this.getPercentDoneStr();
    550                         c += '%)';
    551                         c += eta;
    552                         progress_details = c;
     534
     535                        c = [ Transmission.fmt.size( this._sizeWhenDone - this._leftUntilDone ),
     536                              ' of ', Transmission.fmt.size( this._sizeWhenDone ),
     537                              ' (', this.getPercentDoneStr(), '%)' ];
     538                        if( this.isActive( ) ) {
     539                                c.push( ' - ' );
     540                                if (this._eta < 0 || this._eta >= Torrent._InfiniteTimeRemaining )
     541                                        c.push( 'remaining time unknown' );
     542                                else
     543                                        c.push( Transmission.fmt.timeInterval(this._eta) + ' remaining' );
     544                        }
     545                        progress_details = c.join('');
    553546
    554547                        // Figure out the percent completed
     
    557550                        // Update the 'in progress' bar
    558551                        e = root._progress_complete_container;
    559                         c = 'torrent_progress_bar'+compact;
    560                         c += this.isActive() ? ' in_progress' : ' incomplete_stopped';
    561                         if(css_completed_width === 0) { c += ' empty'; }
    562                         e.className = c;
     552                        c = [ 'torrent_progress_bar'+compact,
     553                              this.isActive() ? 'in_progress' : 'incomplete_stopped' ];
     554                        if(css_completed_width === 0) { c.push( 'empty' ); }
     555                        e.className = c.join(' ');
    563556                        e.style.width = css_completed_width + '%';
    564557
     
    571564                else
    572565                {
    573                         var eta = '';
    574 
     566                        // Create the 'progress details' label
     567
     568                        if( this._size == this._sizeWhenDone )
     569                        {
     570                                // seed: '698.05 MiB'
     571                                c = [ Transmission.fmt.size( this._size ) ];
     572                        }
     573                        else
     574                        {
     575                                // partial seed: '127.21 MiB of 698.05 MiB (18.2%)'
     576                                c = [ Transmission.fmt.size( this._sizeWhenDone ), ' of ', Transmission.fmt.size( this._size ),
     577                                      ' (', Transmission.fmt.percentString( 100.0 * this._sizeWhenDone / this._size ), '%)' ];
     578                        }
     579
     580                        // append UL stats: ', uploaded 8.59 GiB (Ratio: 12.3)'
     581                        c.push( ', uploaded ', Transmission.fmt.size( this._upload_total ),
     582                                ' (Ratio ', Transmission.fmt.ratioString( this._upload_ratio ), ')' );
     583
     584                        // maybe append remaining time
    575585                        if( this.isActive( ) && this.seedRatioLimit( ) > 0 )
    576586                        {
    577                                 eta = ' - ';
     587                                c.push(' - ');
     588
    578589                                if (this._eta < 0 || this._eta >= Torrent._InfiniteTimeRemaining )
    579                                         eta += 'remaining time unknown';
     590                                        c.push( 'remaining time unknown' );
    580591                                else
    581                                         eta += Transmission.fmt.timeInterval(this._eta) + ' remaining';
     592                                        c.push( Transmission.fmt.timeInterval(this._eta), ' remaining' );
    582593                        }
    583594
    584                         // Create the 'progress details' label
    585                         // Partial seed
    586                         if( this._size != this._sizeWhenDone ) {
    587                                 // Eg: '127.21 MiB of 698.05 MiB (18.2%)'
    588                                 c = Transmission.fmt.size( this._sizeWhenDone );
    589                                 c += ' of ';
    590                                 c += Transmission.fmt.size( this._size );
    591                                 c += ' (';
    592                                 c += Transmission.fmt.percentString( 100.0 * this._sizeWhenDone / this._size );
    593                                 c += '%)';
    594                         }
    595                         // Regular seed
    596                         else {
    597                                 // Eg: '698.05 MiB'
    598                                 c = Transmission.fmt.size( this._size );
    599                         }
    600                         // Eg:', uploaded 8.59 GiB (Ratio: 12.3)'
    601                         c += ', uploaded ';
    602                         c += Transmission.fmt.size( this._upload_total );
    603                         c += ' (Ratio ';
    604                         c += Transmission.fmt.ratioString( this._upload_ratio );
    605                         c += ')';
    606                         c += eta;
    607                         progress_details = c;
     595                        progress_details = c.join('');
    608596
    609597                        var status = this.isActive() ? 'complete' : 'complete_stopped';
     
    965953
    966954        refreshProgressHTML: function() {
    967                 var c = Transmission.fmt.size(this._done);
    968                 c += ' of ';
    969                 c += Transmission.fmt.size(this._size);
    970                 c += ' (';
    971                 c += this._size ? Transmission.fmt.percentString(100 * this._done / this._size) : '100';
    972                 c += '%)';
     955                var c = [ Transmission.fmt.size(this._done),
     956                          ' of ',
     957                          Transmission.fmt.size(this._size),
     958                          ' (',
     959                          this._size ? Transmission.fmt.percentString(100 * this._done / this._size) : '100',
     960                          '%)' ].join('');
    973961                setInnerHTML(this._progress[0], c);
    974962        },
     
    976964        refreshWantedHTML: function() {
    977965                var e = this.domElement();
    978                 var c = e.classNameConst;
    979                 if(!this._wanted) { c += ' skip'; }
    980                 if(this.isDone()) { c += ' complete'; }
    981                 e.className = c;
     966                var c = [ e.classNameConst ];
     967                if(!this._wanted) { c.push( 'skip' ); }
     968                if(this.isDone()) { c.push( 'complete' ); }
     969                e.className = c.join(' ');
    982970        },
    983971
    984972        refreshPriorityHTML: function() {
    985973                var e = this._priority_control;
    986                 var c = e.classNameConst;
     974                var c = [ e.classNameConst ];
    987975                switch( this._prio ) {
    988                         case 1: c += ' high'; break;
    989                         case -1: c += ' low'; break;
    990                         default: c += ' normal'; break;
    991                 }
    992                 e.className = c;
     976                        case 1  : c.push( 'high'   ); break;
     977                        case -1 : c.push( 'low'    ); break;
     978                        default : c.push( 'normal' ); break;
     979                }
     980                e.className = c.join(' ');
    993981        },
    994982
  • trunk/web/javascript/transmission.js

    r11228 r11305  
    12291229                var total_have = 0;
    12301230                var total_size = 0;
    1231                 var total_state = null;
     1231                var total_state = [ ];
    12321232                var pieces = 'N/A';
    12331233                var total_upload = 0;
     
    13051305                        total_download_peers += t.peersSendingToUs();
    13061306                        total_availability   += t._sizeWhenDone - t._leftUntilDone + t._desiredAvailable;
    1307                         if( total_state == null )
    1308                                 total_state = t.stateStr();
    1309                         else if ( total_state.search ( t.stateStr() ) == -1 )
    1310                                 total_state += '/' + t.stateStr();
     1307
     1308                        var s = t.stateStr();
     1309                        if( total_state.indexOf( s ) == -1 )
     1310                                total_state.push( s );
     1311
    13111312                        if( t._is_private )
    13121313                                have_private = true;
     
    13251326                setInnerHTML( tab.pieces, pieces );
    13261327                setInnerHTML( tab.hash, hash );
    1327                 setInnerHTML( tab.state, total_state );
     1328                setInnerHTML( tab.state, total_state.join('/') );
    13281329                setInnerHTML( tab.download_speed, torrents.length ? fmt.speedBps( total_download_speed ) : na );
    13291330                setInnerHTML( tab.upload_speed, torrents.length ? fmt.speedBps( total_upload_speed ) : na );
Note: See TracChangeset for help on using the changeset viewer.