JavaScript使用享元模式实现文件上传优化操作示例
本文实例讲述了JavaScript使用享元模式实现文件上传优化操作。分享给大家供大家参考,具体如下:
一、享元模式是一种用于性能优化的模式,主要优化方式为,若系统中因为创建了大量类似的对象而导致内存占用过高,则可以考虑使用享元模式实现。
二、实例说明:
如果在浏览器中上传文件,若使用常规写法,每上传一个文件,就会创建一个实例对象;如果上传2000个文件,那就有2000个对象,浏览器很可能出现假死状态。这种情况下,我们考虑适应享元模式。
三、实例:
varUpload=function(uploadType){
this.uploadType=uploadType;
};
Upload.prototype.delFile=function(id){
uploadManager.setExternalState(id,this);
if(this.fileSize<300){
returnthis.dom.parentNode.removeChild(this.dom);
}
if(window.confirm('确定要删除该文件吗?'+this.fileName)){
returnthis.dom.parentNode.removeChild(this.dom);
}
};
varUploadFactory=(function(){
varcreatedFlyWeightObjs={};
return{
create:function(uploadType){
if(createFlyWeightObjs[uploadType]){
returncreatedFlyWeightObjs[uploadType];
}
returncreatedFlyWeightObjs[uploadType]=newUpload(uploadType);
}
}
})();
varuploadManager=(function(){
varuploadDatabase={};
return{
add:function(id,uploadType,fileName,fileSize){
varflyWeightObj=UploadFactory.create(uploadType);
vardom=document.createElement('div');
dom.innerHTML='文件名称:'+fileName+',文件大小:'+fileSize+''+'删除';
dom.querySelector(".delFile").onclick=function(){
flyWeightObj.delFile(id);
document.body.appendChild(dom);
uploadDatabase[id]={
fileName:fileName,
fileSize:fileSize,
dom:dom
};
returnflyWeightObj;
},
setExternalState:functon(id,flyWeightObj){
varuploadData=uploadDatabase[id];
for(variinuploadData){
flyWeightObj[i]=uploadData[i];
}
}
}
})();
然后需要写一个触发上传动作的startUpload函数:
varid=o;
window.startUpload=function(uploadType,files){
for(vari=0,file;file=fules[i++];){
varuploadObj=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程序设计有所帮助。