在一些请求静态资源较多的地方,如webgame中要请求很多数值相关的信息,为了减少请求数以及请求的文件大小,可以通过zip工具先将文件合并后进行压缩,得到一个zip包,然后请求这个zip包,客户端再使用工具包对zip包进行解压得到相关数据即可。

 

可以点击这个链接,在线体验一下这个功能。在线Demo地址>>

 

虽然会造成客户端cpu和内存的消耗,但总的来讲效率是略胜于单次、单个的请求文件。(哪些文件需要使用这种方式,哪些不需要,这个就需要自己去判定了,根据实际情况去衡量:文件更新次数、文件大小、文件使用的频率、文件使用的优先级等因素)

这里使用的是nochump.util.zip这个工具,里面的as文件也比较少,总共才8个文件。

假设目前有40个XML文件,如下图所示:

使用as工具包解压zip文件

编码解析后得到的效果图:

使用as工具包解压zip文件

两张图可以对比一下,文件信息没什么变化。

解析压缩文件的关键代码是,创建ZipFile实例,使用getInput获取压缩信息中数据(ByteArray)。

完整的示例代码(就一个mxml文件):

 

?>
>
   3:     
   4:     
   5:     <mx:Script>
   6:         <![CDATA[
import mx.controls.Alert;
import mx.formatters.DateFormatter;
   9:             
import nochump.util.zip.ZipEntry;
import nochump.util.zip.ZipFile;
  12:             
;
private var zipList:Array = [];
  15:             
void {
  17:                 
  18:             }
  19:             
void {
  21:                 
  22:                 
new URLStream();
  24:                 
  25:                 loadProgress.source = urlStream;
  26:                                 
  27:                 urlStream.addEventListener(Event.COMPLETE, completeHandler);
  28:                 urlStream.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
  29:                 urlStream.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);
  30:                 
new URLRequest(fileUrl));
  32:                 
  33:                 loadBtn.enabled = false;
  34:             }
  35:             
void {
  37:                 loadBtn.enabled = true;
  38:                 
  39:                 var data:URLStream = URLStream(evt.target);
  40:                 
new ZipFile(data);
  42:                 var entry:ZipEntry;
  43:                 var text:ByteArray;
  44:                 var list:Array = [];
  45:                 
int = 0; i < zipFile.entries.length; i++) {
  47:                     entry = zipFile.entries[i];
  48:                     text  = zipFile.getInput(entry);
  49:                     zipList[entry.name] = String(text);
  50:                 }
  51:                 
  52:                 dgEntries.dataProvider = zipFile.entries;
  53:                 
 + zipFile.entries.length;
  55:             }
  56:             
void {
  58:                 loadBtn.enabled = true;
 + errEvt.text);
  60:             }
  61:             
void {
  63:                 var entry:ZipEntry = evt.currentTarget.selectedItem as ZipEntry;
if(entry) taEntryData.text = zipList[entry.name];
  65:             }
  66:             
private function labelSize(item:Object, column:DataGridColumn):String {
;
  69:             }
  70:             
private function labelModified(item:Object, column:DataGridColumn):String {
new DateFormatter();
;
new Date(item.time));
  75:             }
  76:             
private function labelCrc(item:Object, column:DataGridColumn):String {
return item.crc.toString(16).toUpperCase();
  79:             }
  80:             
  81:         ]]>
  82:     </mx:Script>
  83:     
 />
  85:     
>
 />
  88:         
 />
  90:         
 />
  92:         
>
  94:             <mx:columns>
 />
  />
 />
 />
 />
 100:             </mx:columns>
 101:         </mx:DataGrid>
 />
 103:     </mx:VBox>
 104:     
 105: </mx:Application>

相关文章:

  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2021-11-10
  • 2022-12-23
  • 2021-11-30
  • 2021-06-22
猜你喜欢
  • 2022-12-23
  • 2021-09-17
  • 2022-02-20
  • 2022-12-23
  • 2021-11-21
  • 2021-10-26
  • 2021-08-10
相关资源
相似解决方案