国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript使用享元模式實現(xiàn)文件上傳優(yōu)化操作示例

2024-05-06 15:32:03
字體:
供稿:網(wǎng)友

本文實例講述了JavaScript使用享元模式實現(xiàn)文件上傳優(yōu)化操作。分享給大家供大家參考,具體如下:

一、享元模式是一種用于性能優(yōu)化的模式,主要優(yōu)化方式為,若系統(tǒng)中因為創(chuàng)建了大量類似的對象而導(dǎo)致內(nèi)存占用過高,則可以考慮使用享元模式實現(xiàn)。

二、實例說明:

如果在瀏覽器中上傳文件,若使用常規(guī)寫法, 每上傳一個文件,就會創(chuàng)建一個實例對象;如果上傳2000個文件,那就有2000個對象,瀏覽器很可能出現(xiàn)假死狀態(tài)。這種情況下,我們考慮適應(yīng)享元模式。

三、實例:

var Upload = function( uploadType ){  this.uploadType = uploadType;};Upload.prototype.delFile = function( id ){  uploadManager.setExternalState( id, this );  if( this.fileSize < 300 ){   return this.dom.parentNode.removeChild( this.dom );  }  if( window.confirm('確定要刪除該文件嗎?' + this.fileName )){     return this.dom.parentNode.removeChild( this.dom);  }};var UploadFactory = (function(){  var createdFlyWeightObjs = {};  return {    create: function( uploadType ){      if(createFlyWeightObjs[uploadType]){        return createdFlyWeightObjs[uploadType];      }      return createdFlyWeightObjs[uploadType] = new Upload(uploadType);    }  }})();var uploadManager = (function(){  var uploadDatabase = {};  return{    add: function(id, uploadType, fileName, fileSize){      var flyWeightObj = UploadFactory.create( uploadType );      var dom = document.createElement( 'div' );      dom.innerHTML = '<span>文件名稱:'+fileName+',文件大小:' +fileSize + '</span>' + '<button class="delFile">刪除</button>';      dom.querySelector( ".delFile" ).onclick = function(){       flyWeightObj.delFile( id );       document.body.appendChild( dom );       uploadDatabase[ id ] = {         fileName: fileName,         fileSize: fileSize,         dom: dom       };       return flyWeightObj;     },     setExternalState: functon( id, flyWeightObj ){        var uploadData = uploadDatabase[ id ];        for( var i in uploadData){           flyWeightObj[ i ] = uploadData[ i ];        }     }  }})();

然后需要寫一個觸發(fā)上傳動作的startUpload函數(shù):

var id = o;window.startUpload = function( uploadType, files ){  for( var i=0,file; file = fules[ i ++ ];){     var uploadObj = uploadManger.add( ++id, uploadType, file.fileName, file.fileSize );  }};

最后調(diào)用,如下:

startUpload( 'plugin', [  {    fileName: '1.txt',    fileSize: 1000   },   {     fileName: '2.html',     fileSize: 1000   },   {     fileName: '3.txt',     fileSize: 5000   }]);startUpload( 'flash', [  {    fileName: '4.txt',    fileSize: 1000   },   {     fileName: '5.html',     fileSize: 1000   },   {     fileName: '6.txt',     fileSize: 5000   }]);

四、解釋:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 名山县| 海口市| 山东省| 四子王旗| 丽江市| 丘北县| 于都县| 右玉县| 林口县| 大渡口区| 门头沟区| 辽宁省| 都安| 康平县| 湖州市| 商水县| 阳高县| 葵青区| 合川市| 聂拉木县| 南平市| 蒲城县| 刚察县| 丰原市| 土默特右旗| 廊坊市| 天镇县| 都安| 永寿县| 旬阳县| 延庆县| 芦山县| 潮安县| 梧州市| 岱山县| 玛沁县| 莎车县| 乡宁县| 淮北市| 福泉市| 二手房|