您好,登錄后才能下訂單哦!
本文實例講述了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程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。