[ Performance - Read ] ByteArray.readObject vs JSON.decode

by clockmaker
♥2 | Line 44 | Modified 2010-07-20 02:18:42 | MIT License
play

ActionScript3 source code

/**
 * Copyright clockmaker ( http://wonderfl.net/user/clockmaker )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/nZX3
 */

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" addedToStage="setup()">
    <mx:Script>
        <![CDATA[
            import com.adobe.serialization.json.JSON;
            import mx.utils.Base64Decoder;
            import jp.nium.utils.ClassUtil;
            private static const MAX:Number = 100;
            // Base64データ(2,770 バイト)
            private const DATA_BASE64:String = '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';
            // JSONデータ(7,356 バイト)
            private const DATA_JSON:String = '[{"x":93.23650458827615,"y":39.38408084213734,"length":101.21339640393286},{"x":11.032281909137964,"y":69.0460981335491,"length":69.92192010800608},{"x":40.90401763096452,"y":44.880379224196076,"length":60.72385937719956},{"x":76.07700754888356,"y":46.598697965964675,"length":89.21406688250507},{"x":90.65276593901217,"y":93.09395272284746,"length":129.94001695381252},{"x":31.894187163561583,"y":99.70557801425457,"length":104.68257477718487},{"x":24.619103502482176,"y":41.768106957897544,"length":48.48376033387158},{"x":3.0616820324212313,"y":86.99047788977623,"length":87.04434008227817},{"x":96.71943942084908,"y":76.14712198264897,"length":123.09766101808644},{"x":2.776502864435315,"y":74.60976922884583,"length":74.66141327712627},{"x":83.54209009557962,"y":14.821929996833205,"length":84.84674670468496},{"x":30.707050627097487,"y":71.76323030143976,"length":78.05692910634271},{"x":43.44088868238032,"y":45.38331748917699,"length":62.823214784332684},{"x":87.44004853069782,"y":82.6560809276998,"length":120.32368761543692},{"x":39.189546182751656,"y":41.085319966077805,"length":56.77872882272917},{"x":65.49635268747807,"y":23.090522084385157,"length":69.44742202192961},{"x":2.7617155108600855,"y":19.47683203034103,"length":19.671656221605833},{"x":64.99644927680492,"y":52.31859893538058,"length":83.43724715709095},{"x":26.91229241900146,"y":9.10805850289762,"length":28.411761876695522},{"x":35.51785172894597,"y":95.86613676510751,"length":102.2342113468172},{"x":76.31219425238669,"y":48.78551107831299,"length":90.57360036338514},{"x":1.160026527941227,"y":93.63513593561947,"length":93.64232132549611},{"x":72.78556800447404,"y":0.5659252405166626,"length":72.78776807343229},{"x":90.50484104081988,"y":97.13192014023662,"length":132.76195299088283},{"x":80.02968328073621,"y":93.39512074366212,"length":122.99349082263734},{"x":21.474455995485187,"y":94.05281962826848,"length":96.47323535742768},{"x":80.59646976180375,"y":10.269660735502839,"length":81.24811917630878},{"x":62.74527134373784,"y":18.663407396525145,"length":65.46214059781393},{"x":3.9329994935542345,"y":26.685825921595097,"length":26.97409479730459},{"x":44.19683809392154,"y":24.48290907777846,"length":50.52497733211843},{"x":54.30533979088068,"y":44.95059885084629,"length":70.49557622186454},{"x":14.892512978985906,"y":24.799248715862632,"length":28.92731718809192},{"x":40.28501519933343,"y":44.52771134674549,"length":60.04664459725966},{"x":57.68176419660449,"y":97.69364204257727,"length":113.45145929592931},{"x":23.10344148427248,"y":75.96508469432592,"length":79.40064924818508},{"x":54.3014092836529,"y":86.78067624568939,"length":102.36956979420177},{"x":78.43263042159379,"y":2.549835154786706,"length":78.4740668894311},{"x":47.40558243356645,"y":97.25460410118103,"length":108.19310174287048},{"x":61.66574158705771,"y":60.12024525552988,"length":86.12263102731384},{"x":65.77956299297512,"y":34.389401879161596,"length":74.22655770782627},{"x":95.51822380162776,"y":75.2536560408771,"length":121.60116704101357},{"x":24.08887343481183,"y":92.76231015101075,"length":95.83903175591193},{"x":7.822543755173683,"y":66.88554985448718,"length":67.34143575940965},{"x":57.55927828140557,"y":68.4194378554821,"length":89.41079349125845},{"x":55.71602242998779,"y":59.90783558227122,"length":81.81212574900705},{"x":68.11407622881234,"y":93.15582667477429,"length":115.40162660883531},{"x":70.60823431238532,"y":88.20399977266788,"length":112.98437205476475},{"x":44.377995980903506,"y":43.10145201161504,"length":61.86389652123961},{"x":81.7207196727395,"y":53.62733453512192,"length":97.7454194997001},{"x":76.0985569562763,"y":98.62838196568191,"length":124.57346467043484},{"x":30.02531500533223,"y":11.2023432739079,"length":32.0470285049316},{"x":46.75484546460211,"y":49.99809111468494,"length":68.45308385698311},{"x":81.86481846496463,"y":0.4093218594789505,"length":81.86584175763578},{"x":5.591811425983906,"y":38.64602213725448,"length":39.048474772478976},{"x":22.601669654250145,"y":9.678687527775764,"length":24.58683516478227},{"x":91.11386584118009,"y":51.367334090173244,"length":104.59607812942144},{"x":52.49440954066813,"y":69.14965510368347,"length":86.81784283188432},{"x":86.6439500823617,"y":96.32187942042947,"length":129.55724040345464},{"x":97.2800656221807,"y":0.046727992594242096,"length":97.28007684495873},{"x":22.3395389970392,"y":18.45876076258719,"length":28.978972574794014},{"x":25.445585418492556,"y":59.93578992784023,"length":65.11356795295428},{"x":8.825761638581753,"y":10.095786489546299,"length":13.409659702750359},{"x":33.83256425149739,"y":77.74176844395697,"length":84.78457975732098},{"x":19.5050829090178,"y":74.42198949865997,"length":76.93556251972369},{"x":29.871021956205368,"y":4.879852943122387,"length":30.266993862202494},{"x":71.44097764976323,"y":84.34077203273773,"length":110.5313490129936},{"x":45.24858840741217,"y":22.17901931144297,"length":50.39190064366252},{"x":84.05109900049865,"y":25.219559436663985,"length":87.75313909696366},{"x":38.200081838294864,"y":68.07298716157675,"length":78.05881009567477},{"x":26.843711221590638,"y":38.20414817892015,"length":46.69198828733939},{"x":65.4678993858397,"y":95.23231899365783,"length":115.56487542027739},{"x":4.4394786935299635,"y":42.706447560340166,"length":42.9365768814235},{"x":61.4408990368247,"y":32.45484046638012,"length":69.48597516154948},{"x":74.53947383910418,"y":61.8110969197005,"length":96.83359366783361},{"x":55.50048844888806,"y":74.97323523275554,"length":93.28070657607206},{"x":42.419657902792096,"y":48.593457927927375,"length":64.50388771216166},{"x":99.61612029001117,"y":27.09152242168784,"length":103.23430635577878},{"x":71.83653670363128,"y":63.73585914261639,"length":96.0351380809108},{"x":42.41970386356115,"y":80.44094196520746,"length":90.94051033572497},{"x":49.79791180230677,"y":17.4626053776592,"length":52.77096366796968},{"x":97.24569879472256,"y":98.87402313761413,"length":138.68236508471927},{"x":91.8752683326602,"y":28.17592304199934,"length":96.09863459210534},{"x":27.05362718552351,"y":45.18632856197655,"length":52.66595705770659},{"x":66.05307986028492,"y":85.39475249126554,"length":107.95959018111212},{"x":32.86703624762595,"y":0.568788917735219,"length":32.87195754036708},{"x":25.387475546449423,"y":6.1114012729376554,"length":26.112700743899154},{"x":8.754257299005985,"y":59.19731771573424,"length":59.84111835180542},{"x":73.3804112765938,"y":16.010513715445995,"length":75.10673277779122},{"x":60.45515132136643,"y":31.35396223515272,"length":68.10210179673382},{"x":0.12458288110792637,"y":83.01842543296516,"length":83.01851891152396},{"x":24.36004262417555,"y":23.027687007561326,"length":33.52142666370061},{"x":13.381152600049973,"y":54.24359790049493,"length":55.86969803119042},{"x":26.566780637949705,"y":29.870756156742573,"length":39.97569144918589},{"x":73.2082397211343,"y":90.23314551450312,"length":116.19581280110124},{"x":90.77587104402483,"y":15.504965279251337,"length":92.09051369230284},{"x":88.34275822155178,"y":52.3194495588541,"length":102.6731110482829},{"x":85.89701307937503,"y":78.87865235097706,"length":116.6196323637861},{"x":75.60107158496976,"y":26.382094202563167,"length":80.07207327969371},{"x":74.69794391654432,"y":70.36754367873073,"length":102.62248305677113},{"x":28.18826246075332,"y":99.88927934318781,"length":103.79039583823604}]';
            private var array:Array = [];
            
            protected function calc():void {
                var log:Array = [], old:int, o:Object;
                // --
                log.push("" + MAX + " 個の Point インスタンスを格納した配列情報について\n文字列から復元した場合の計算結果 [単位 : ミリ秒]");
                log.push("(誤差は多少生じます)");
                log.push("");
                // --
                old = getTimer();
                registerClassAlias(ClassUtil.getClassPath(Point), Point);
                var enc:Base64Decoder = new Base64Decoder();
                enc.decode(DATA_BASE64);
                var ba:ByteArray = enc.toByteArray();
                o = ba.readObject();
                log.push("ByteArray.readObject() + Base64 Decode -> " + (getTimer() - old) + " ms (input is String)");
                trace(o);
                // --
                old = getTimer();
                o = JSON.decode(DATA_JSON);
                log.push("JSON.decode() -> " + (getTimer() - old) + " ms (input is String)");
                trace(o);
                // --
                log.push("");
                log.push("保存容量について、Base64 データは 2770 バイト、JSON データは 7356 バイト");
                log.push("結果については言及しませんので, 各自ご判断ください.");
                ta.text = log.join("\n");
            }
            
            protected function setup():void {
                for (var i:int = 0; i < MAX; i++) {
                    array[ i ] = new Point(MAX * Math.random(), MAX * Math.random());
                }
                calc();
            }
        ]]>
    </mx:Script>
    <mx:Button label="Re Calculation" click="calc()"/>
    <mx:TextArea id="ta" editable="false" width="100%" height="100%"/>
</mx:Application>