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

首頁 > 編程 > JavaScript > 正文

JavaScript使用享元模式實現文件上傳優化操作示例

2019-11-19 13:19:57
字體:
來源:轉載
供稿:網友

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

一、享元模式是一種用于性能優化的模式,主要優化方式為,若系統中因為創建了大量類似的對象而導致內存占用過高,則可以考慮使用享元模式實現。

二、實例說明:

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

三、實例:

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 ];        }     }  }})();

然后需要寫一個觸發上傳動作的startUpload函數:

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 );  }};

最后調用,如下:

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   }]);

四、解釋:

調用時,有六個對象,但只有兩個類型(plugin和flash),我們通過享元模式,在創建對象時,只有兩個,如果上面提到的上傳2000個文件,利用上面的代碼,同樣只創建兩個對象,那么這就很好的解決了瀏覽器崩潰假死的問題。

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库尔勒市| 金沙县| 双城市| 洪雅县| 攀枝花市| 习水县| 桑植县| 茶陵县| 遂宁市| 吉首市| 江门市| 宜城市| 丹阳市| 克拉玛依市| 正蓝旗| 大埔区| 盱眙县| 宁安市| 米脂县| 宝山区| 轮台县| 淮南市| 茌平县| 南木林县| 兖州市| 福海县| 萝北县| 贵德县| 五寨县| 遂昌县| 海伦市| 讷河市| 贡山| 青龙| 隆德县| 泸州市| 嘉兴市| 桂林市| 永泰县| 稻城县| 苍山县|