gzip ระหว่าง as3 + php by plug.in
Nov0
อันนี้ก็มาจากการพยายามลดขนาดข้อมูลที่ต้องส่งไปมาระหว่าง Php กับ Flash ซึ่งเป็น Text ล้วนๆ ซึ่งก็ใหญ่ไม่ใช่เล่นเหมือนกัน
เลยพยายามลองใช้ gzip ที่มีติดอยู่กับ php เป็น default อยู่แล้ว
ประเด็นคือ gzip ของ php มี function เยอะมากมาย ประมาณ 3-4 แบบได้
ส่วน as3 ก็ไม่รู้ว่ามีหรือเปล่า ต้องหาอะไรเพิ่มมั้ย ก็เลยต้องศึกษาเพิ่มกันหน่อย
หลังจากวิจัยมาเกือบวัน ก็สรุปได้ผลตามนี้
PHP
หลังจากลองผิดลองถูกอยู่ซักพักก็ได้ โค้ดมาประมาณนี้
$log_zip = base64_encode(gzcompress(json_encode($log),5));
- แปลง Object เป็น Json ก่อนเพื่อความสะดวกในการใช้งาน
- gzip ด้วย gzcompress ระดับเท่าไหรก็แล้วแต่ เท่าที่ลองประมาณ 5 กำลังดี ทั้งเวลาและขนาด
- สุดท้ายเข้ารหัสเป็น Base64 เพื่อจะได้ส่งทาง Flashvar ได้
โดยส่งไปทาง FlashVars แบบนี้
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″
width=”600″ height=”450″
codebase=”http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab” style=”visibility: visible;”>
<param name=”movie” value=”assets/flash/battle.swf” />
<param name=”quality” value=”high” />
<param name=”bgcolor” value=”#869ca7″ />
<param name=”wmode” value=”transparent” />
<param name=”allowScriptAccess” value=”sameDomain” />
<param name=”flashVars” value=”&log=<?=$log_zip?>” />
<embed src=”assets/flash/battle.swf” quality=”high” bgcolor=”#869ca7″ wmode=”transparent”
width=”600″ height=”450″ name=”flashBattle” align=”middle”
play=”true”
loop=”false”
quality=”high”battle_result
allowScriptAccess=”sameDomain”
flashVars=”&log=<?=$log_zip?>“
type=”application/x-shockwave-flash”
pluginspage=”http://www.adobe.com/go/getflashplayer”>
</embed>
</object>
- ตัวแปล log_zip ส่งไปทาง FlashVars
AS3
หลังจากโง่งมหาอยู่นาน ปรากฏว่ามันมีอยู่แล้ว แต่ search แล้วดันเจอแต่ library เก่าๆ!
โค้ดก็ประมาณนี้หล่ะ เธอว์
var log_zip:String = root.loaderInfo.parameters.log;
var b64:Base64Decoder = new Base64Decoder();
log_zip = log_zip.replace(/ /g,”+”);
b64.decode(log_zip);
var ba:ByteArray = b64.flush();
ba.uncompress();
var log_text:String = ba.toString();
log = new JSONDecoder(log_text).getValue();
- ต้องมี Base64Decoder จาก as3lib ด้วย ไปหาโหลดเพิ่มเอา
- ที่เจ็บปวดคือส่งผ่าน FlashVar แล้วมันดันแปลง + เป็น space ให้ตามประสา urlencode! หาเป็นชั่วโมง!
- สุดท้ายก็แกะ Json ด้วย JSONDecoder (as3lib เหมือนกัน)
ผลจากการ gZip
ขนาดลดลงอย่างเห็นได้ชัดทีเดียว
เดิม = 8167 ตัวอักษร
gzip = 524 ตัวอักษร
ประหยัดไปเกือบๆ 20 เท่าทีเดียวเชียว
Enjoy this article?
Consider subscribing to our RSS feed!
ไม่มีความเห็น
ยังไม่มีความเห็น