Flashplatform optimizing content türkçe

2,096 views

Published on

Flashplatform optimizing content türkçe

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,096
On SlideShare
0
From Embeds
0
Number of Embeds
1,407
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Flashplatform optimizing content türkçe

  1. 1. ADOBE®FLASH®PLATFORMiçin Performansı En İyileştirme
  2. 2. Son güncelleme 30/3/2011Telif Hakkı© 2011 Adobe Systems Incorporated and its licensors. All rights reserved.Adobe® Flash® Platform için Performansı En İyileştirmeThis user guide is protected under copyright law, furnished for informational use only, is subject to change without notice, and should not be construed as acommitment by Adobe Systems Incorporated. Adobe Systems Incorporated assumes no responsibility or liability for any errors or inaccuracies that may appearin the informational content contained in this guide.This guide is licensed for use under the terms of the Creative Commons Attribution Non-Commercial 3.0 License. This License allows users to copy, distribute,and transmit the user guide for noncommercial purposes only so long as (1) proper attribution to Adobe is given as the owner of the user guide; and (2) anyreuse or distribution of the user guide contains a notice that use of the user guide is governed by these terms. The best way to provide notice is to include thefollowing link. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/.Adobe, the Adobe logo, Acrobat, Acrobat Capture, Acrobat Connect, Acrobat Messenger, Acrobat 3D Capture, ActionScript, ActiveTest, Adobe ActionSource,Adobe AIR, Adobe AIR logo, Adobe Audition, Adobe Caslon, Adobe Connect, Adobe DataWarehouse, Adobe Dimensions, Adobe Discover, Adobe FinancialServices, Adobe Garamond, Adobe Genesis, Adobe Griffo, Adobe Jenson, Adobe Kis, Adobe OnLocation, Adobe Originals logo, Adobe PDF logo, AdobePremiere, AdobePS, Adobe SiteSearch, Adobe Type Manager, Adobe Wave, Adobe Wave logo , Adobe WebType, Adobe Wood Type, After Effects, AIR , Alexa,Andreas, Arno, ATM, Authorware, Balzano, Banshee, Benson Scripts, Better by Adobe. , Bickham Script, Birch, Blackoak, Blue Island, Brioso, BusinessCatalyst,Buzzword, Caflisch Script, Cairngorm, Calcite, Caliban, Captivate, Carta, Chaparral, Charlemagne, Cheq, Classroom in a Book, ClickMap, Co-Author,ColdFusion, ColdFusion Builder, Conga Brava, Contribute, Copal, Coriander, Cottonwood, Creative Suite, Critter, Cronos, CS Live, Custom Insight,CustomerFirst, Cutout, Digital Pulse, Director, Distiller, DNG logo, Dreamweaver, DV Rack, Encore, Engaging beyond the Enterprise, ePaper, Ex Ponto,Fireworks, Flash, Flash logo, Flash Access, Flash Access logo, Flash Builder, Flash Cast , FlashCast, Flash Catalyst, FlashHelp, Flash Lite, Flash on., FlashPaper,Flash Platform Services logo , Flex, Flex Builder, Flood, Font Folio, Frame , FrameCenter, FrameConnections, FrameMaker, FrameManager, FrameViewer,FreeHand, Fusaka, Galahad, Giddyup, Giddyup Thangs, GoLive, GoodBarry, Graphite, HomeSite, HBX, HTML Help Studio, HTTP Dynamic Streaming logo ,Hypatia, Illustrator, ImageReady, Immi 505, InCopy, InDesign, Ironwood, Jimbo, JRun, Juniper, Kazuraki, Kepler, Kinesis, Kozuka Gothic, Kozuka Mincho,Kuler, Leander Script, Lens Profile Creator logo , Lightroom, Lithos, LiveCycle, Macromedia, Madrone, Mercado, Mesquite, Mezz, Minion, Mojo, Montara,Moonglow, MXML, Myriad, Mythos, Nueva, Nyx, 1-Step RoboPDF, Omniture, Open Screen Project, Open Source Media Framework logo, OpenType logo,Ouch!, Ovation, PageMaker, PageMaker Portfolio, PDF JobReady, Penumbra, Pepperwood, Photoshop, Photoshop logo, Pixel Bender, Poetica, Ponderosa,Poplar, Postino, PostScript, PostScript logo, PostScript 3, PostScript 3i, Powered by XMP, Prana, PSPrinter, Quake, Rad, Reader, Real-Time Analytics, Reliq,RoboEngine, RoboHelp, RoboHTML, RoboLinker, RoboPDF, RoboScreenCapture, RoboSource Control, Rosewood, Roundtrip HTML, Ryo, Sanvito, Sava,Scene7, See What’s Possible , Script Teaser, Shockwave, Shockwave Player logo, Shuriken Boy, Silentium, Silicon Slopes, SiteCatalyst, SiteCatalyst NetAverages,Software Video Camera, Sonata, Soundbooth, SoundEdit, Strumpf, Studz, Tekton, Test&Target, 360Code, Toolbox, Trajan, TrueEdge, Type Reunion, Ultra,Utopia, Vector Keying, Version Cue, VirtualTrak, Visual Call, Visual Communicator, Visual Sciences, Visual Sensor, Visual Server, Viva, Voluta , Warnock,Waters Titling, Wave , Willow, XMP logo, Zebrawood are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/orother countries.Android is a trademark of Google Inc. ActiveX and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States andother countries. Windows is either a registered trademark or a trademark of Microsoft Corporation in the United States and/or other countries. Macintosh is atrademark of Apple Inc., registered in the U.S. and other countries. All other trademarks are the property of their respective owners.Updated Information/Additional Third Party Code Information available at http://www.adobe.com/go/thirdparty.Portions include software under the following terms:This product includes software developed by the Apache Software Foundation (http://www.apache.org/).MPEG Layer-3 audio compression technology licensed by Fraunhofer IIS and Thomson Multimedia (http://www.mp3licensing.com).This software is based in part on the work of the Independent JPEG Group.Speech compression and decompression technology licensed from Nellymoser, Inc. (www.nellymoser.com).Video in Flash Player is powered by On2 TrueMotion video technology. © 1992-2005 On2 Technologies, Inc. All Rights Reserved. http://www.on2.com.This product contains either BSAFE and/or TIPEM software by RSA Security, Inc.Sorenson Spark™ video compression and decompression technology licensed from Sorenson Media, Inc.Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA.Notice to U.S. Government End Users: The Software and Documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of“Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202,as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software andCommercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rightsas are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States.Adobe agrees to comply with all applicable equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402of the Vietnam Era Veterans Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and theregulations at 41 CFR Parts 60-1 through 60-60, 60-250, and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall beincorporated by reference.
  3. 3. iiiSon güncelleme 30/3/2011İçindekilerBölüm 1: GirişÇalışma zamanı kodunu çalıştırmanın temelleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1Algılanan performans ile gerçek performansın karşılaştırılması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2En iyileştirmelerinizin hedefini belirleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Bölüm 2: Belleği saklamaGörüntüleme nesneleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4İlkel türler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Nesneleri yeniden kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Belleği boşaltmak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Bitmapleri kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Filtreleri ve dinamik bitmapi kaldırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Doğrudan mipmap oluşturma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193B efektlerini kullanma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Metin nesneleri ve bellek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Olay modeli ile geri aramaların karşılaştırması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Bölüm 3: CPU kullanımını en aza indirmeCPU kullanımı için Flash Player 10.1 geliştirmeleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Uyku modu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Nesneleri dondurma ve çözme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Olayları etkinleştirme ve devre dışı bırakma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Fare etkileşimleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Zamanlayıcılarla ENTER_FRAME olaylarının karşılaştırılması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Hareket arası oluşturma sendromu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Bölüm 4: ActionScript 3.0 performansıVector sınıfının Array sınıfıyla karşılaştırılması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Çizim APIsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35Olayı dıştan içe ve içten dışa tetikleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Piksellerle çalışma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Normal ifadeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Çeşitli en iyileştirmeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Bölüm 5: Performans oluşturmaYeniden çizilen bölgeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Sahne alanı dışı içerik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Film kalitesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Alfa karıştırma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Uygulama kare hızı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51Bitmapleri önbelleğe alma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Bitmapleri elle önbelleğe alma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Metin nesnelerinin oluşturulması . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
  4. 4. ivFLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEİçindekilerSon güncelleme 30/3/2011Eş zamanlı olmayan işlemler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Saydam pencereler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Vektör şekli düzleştirme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Bölüm 6: Ağ etkileşimini en iyileştirmeAğ etkileşimi için geliştirmeler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Harici içerik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78Girdi çıktı hataları . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Flash Remoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Gereksiz ağ işlemleri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Bölüm 7: Medya ile çalışmaVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85StageVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Ses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Bölüm 8: SQL veritabanı performansıVeritabanı performansı için uygulama tasarımı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Veritabanı dosyası en iyileştirmesi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Gereksiz veritabanı çalışma zamanı işleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Etkili SQL sözdizimi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91SQL ifadesinin performansı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Bölüm 9: Kıyaslama ve konuşlandırmaKıyaslama . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Dağıtma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
  5. 5. 1Son güncelleme 30/3/2011Bölüm 1: GirişAdobe® AIR® ve Adobe® Flash® Player uygulamaları, masaüstleri, mobil aygıtlar, tabletler ve televizyon aygıtları gibibirçok platformda çalışır. Bu belge, bu uygulamaları dağıtan geliştiriciler için en iyi çalışma biçimlerini ana hatlarıylakod örnekleri ve kullanım durumları üzerinden anlatır. Konular şunlardır:• Belleği saklama• CPU kullanımını en aza indirme• ActionScript 3.0 performansını geliştirme• Oluşturma hızını artırma• Ağ etkileşimini en iyileştirme• Ses ve videoyla çalışma• SQL veritabanı performansını en iyileştirme• Uygulamaları kıyaslama ve konuşlandırmaBu en iyileştirmelerin çoğu, hem AIR çalışma zamanında hem de Flash Player çalışma zamanında tüm aygıtlardakiuygulamalar için geçerlidir. Belirli aygıtlar için eklemeler ve istisnalar da ele alınmaktadır.Bu en iyileştirmelerin bazıları, Flash Player 10.1 ve AIR 2.5te sunulan yeteneklere odaklanır. Ancak bu eniyileştirmelerin çoğu, önceki AIR ve Flash Player sürümleri için de geçerlidir.Çalışma zamanı kodunu çalıştırmanın temelleriUygulama performansının nasıl iyileştirileceğini anlamanın bir püf noktası da Flash Platform çalışma zamanının kodunasıl çalıştırdığını anlamaktır. Çalışma zamanı, karelerin her birinde gerçekleşen belirli hareketlerle döngü içindeçalışır. Bu durumda, bir kare, uygulama için belirtilen kare hızının belirlediği basit bir zaman bloğudur. Karelerin herbirine paylaştırılan süre doğrudan kare hızına karşılık gelir. Örneğin, saniyede 30 karelik bir kare hızı belirlerseniz,çalışma zamanı, her karenin bir saniyenin 30’da biri kadar sürmesini sağlamaya çalışır.Uygulamanızın ilk kare hızını geliştirme zamanında belirlersiniz. Kare hızını Adobe® Flash® Builder™ veya FlashProfessionaldaki ayarları kullanarak ayarlayabilirsiniz. Birinci kare hızını kodda da belirtebilirsiniz. YalnızcaActionScript olan bir uygulamada, kare hızını kök belge sınıfınıza [SWF(frameRate="24")] meta veri etiketiniuygulayarak ayarlayın. MXML’de, Application veya WindowedApplication etiketindeki frameRate niteliğiniayarlayın.Her kare döngüsü üç bölüme ayrılmış iki aşamadan oluşur: olaylar, enterFrame olayı ve oluşturma.Birinci aşama iki bölüm içerir (olaylar ve enterFrame olayı), ikisi de büyük olasılıkla kodunuzun çağrılmasıylasonuçlanır. Birinci aşamanın ilk bölümünde, çalışma zamanı olayları gelir ve gönderilir. Bu olaylar, bir ağ üzerindenyapılan veri yüklemeden gelen bir yanıt gibi senkronize olmayan işlemlerin tamamlanmasını veya ilerlemesini temsiledebilir. Ayrıca, bu olaylar kullanıcı girdisinden gelen olayları da içerir. Çalışma zamanı, olaylar gönderilirkenkodunuzu, kaydettirdiğiniz dinleyicilerde çalıştırır. Herhangi bir olay gerçekleşmezse, çalışma zamanı bu çalıştırmaaşamasını herhangi bir işlem gerçekleştirmeden tamamlamayı bekler. Çalışma zamanı, bir etkinliğin olmamasındandolayı, kare hızını asla hızlandırmaz. Olaylar çalıştırma döngüsünün diğer bölümleri sırasında gerçekleşirse, çalışmazamanı bu olayları sıraya dizer ve bir sonraki karede gönderir.
  6. 6. 2FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEGirişSon güncelleme 30/3/2011Birinci karenin ikinci bölümü enterFrame olayıdır. Bu olay, her karede bir defa gönderildiği için diğerlerindenfarklıdır.Tüm olaylar gönderildiğinde, kare döngüsünün oluşturma aşaması başlar. Bu noktada, çalışma zamanı ekrandagörünür olan tüm öğelerin durumunu hesaplar ve bu öğeleri ekranda çizer. Ardından bu süreç, bir parkurunetrafından koşan bir koşucu gibi kendini tekrar eder.Not: Bir updateAfterEvent özelliğini içeren olaylar için, görüntü oluşturma oluşturma aşamasının başlamasınıbeklemeden zorla başlatılabilir. Ancak, sıklıkla performans sorunlarına neden oluyorsa, updateAfterEvent öğesinikullanmaktan kaçının.Kare döngüsündeki iki aşamanın eşit miktarda süre harcadığını düşünmek en kolay yoldur. Bu durumda, karedöngülerinin her birinin yarısı için, olay işleyicileri ve uygulama kodu çalışır ve diğer yarısı için oluşturma gerçekleşir.Ancak, gerçekte meydana gelen durum genellikle farklıdır. Bazen uygulama kodu, kendisine ayrılan süreyi uzatarak veoluşturma için ayrılan süreyi kısaltarak karedeki kullanılabilir sürenin yarısından fazlasını alır. Özellikle de filtreler vekarıştırma modları gibi karmaşık görsel içeriğin olduğu başka durumlarda, oluşturma işlemi, kare hızının yarısındanfazlasını gerektirir. Aşamaların kullandığı gerçek süre esnek olduğundan, kare döngüsü genellikle “elastik parkur”olarak bilinir.Kare döngüsü işlemlerinin bileşimi (kod çalıştırma ve oluşturma) fazla uzun sürerse, çalışma zamanı kare hızınıkoruyamaz. Kare, kendisine ayrılan süreden daha fazlasını alarak genişler, böylece bir sonraki kare tetiklenmeden öncebir gecikme olur. Örneğin, bir kare döngüsü saniyenin otuzda birinden daha uzun süre alıyorsa, çalışma zamanı ekranı30 kare/sn hızında güncelleştiremez. Kare hızı yavaşladığında, kullanıcının deneyimi kötüleşir. En iyi durumda bileanimasyon kesik olur. Daha kötü durumlarda, uygulama kilitlenir ve boş pencere görüntülenir.Flash Platform çalışma zamanı kodunu çalıştırmayla ve oluşturma modeliyle ilgili daha fazla ayrıntı için, aşağıdakikaynakları inceleyin:• Flash Player Mental Model - The Elastic Racetrack (Flash Player Zihin Modeli - Elastik Parkur) (makale Ted Patricktarafından yazılmıştır)• Asynchronous ActionScript Execution (ActionScript’i Senkronize Olmayan Bir Şekilde Çalıştırma) (makale TrevorMcCauley tarafından yazılmıştır)• Adobe AIRyi kod yürütme, bellek ve oluşturma için en iyi hale getirme:http://www.adobe.com/go/learn_fp_air_perf_tv_tr (Sean Christmannın MAX konferansındaki sunumununvideosu)Algılanan performans ile gerçek performansınkarşılaştırılmasıUygulamanızın iyi performans gösterip göstermediği konusunda en son kararı verecek kişiler, uygulamanınkullanıcılarıdır. Geliştiriciler, uygulamanın performansını belirli işlemlerin çalışmak için ne kadar süre gerektirdiğiveya nesnelerin kaç tane örneğinin oluşturulduğuna göre ölçebilir. Ancak, bu ölçümler son kullanıcılar için önemlideğildir. Bazen kullanıcılar performansı değişik kriterlere göre ölçerler. Örneğin, uygulama hızlı ve sorunsuz birşekilde çalışıp girdilere hızlı bir şekilde yanıt veriyor mu? Sistem performansı üzerinde negatif bir etkisi var mı?Algılanan performansla ilgili sınama yapmak için kendinize aşağıdaki soruları sorun:• Animasyonlar düzgün mü yoksa kesik mi?• Video içeriği düzgün mü yoksa kesik mi görünüyor?• Ses klipleri devamlı oynatılıyor mu, yoksa duraklatılıp devam mı ediyor?
  7. 7. 3FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEGirişSon güncelleme 30/3/2011• Uzun işlemler sırasında pencere titriyor mu veya boş görünüyor mu?• Yazmaya başladığınızda, metin girişi yazma hızıma yetişiyor mu yoksa gecikiyor mu?• Bir öğeyi tıklattığınızda hemen işlem gerçekleşiyor mu, yoksa gecikme mi var?• Uygulama çalışırken CPU fanı daha fazla gürültü çıkarıyor mu?• Uygulama bir dizüstü bilgisayarda veya mobil aygıtta çalıştırılırken, pil gücü hızla tükeniyor mu?• Uygulama çalışırken diğer uygulamalar yavaş yanıt veriyor mu?Algılanan performans ve gerçek performansın arasındaki farklar önemlidir. En iyi algılanan performansıgerçekleştirmenin yolu her zaman mutlak en hızlı performansı sağlamakla aynı yol değildir. Uygulamanızın, çalışmazamanının sık sık ekranı güncelleme ve kullanıcı girdisi alma işlemlerini gerçekleştiremeyeceği kadar kodçalıştırmadığından emin olun. Bazı durumlarda bu dengeyi sağlamak için, bir program görevi parçalara ayrılabilir,böylece çalışma zamanı, parçaların arasında ekranı günceller. (Daha özel konularda yardım almak için bkz.“Performans oluşturma” sayfa 46.)Burada açıklanan ipuçları ve teknikler hem asıl kod çalıştırma performansını hem de kullanıcıların performansıalgılayış biçimini iyileştirmeyi hedefler.En iyileştirmelerinizin hedefini belirlemeBazı performans geliştirmeleri kullanıcılar için fark edilebilir bir geliştirme oluşturmaz. Performans eniyileştirmelerini sizin belirli uygulamanızda sorun çıkaran alanlar üzerinde yoğunlaştırmanız önemlidir. Bazıperformans en iyileştirmeleri genel olarak faydalı uygulamalardır ve her zaman takip edilebilir. Diğer eniyileştirmelerin kullanışlı olup olmadığı uygulamanızın gereksinimlerine ve öngörülen kullanıcı tabanına bağlıdır.Örneğin, herhangi bir animasyon, video veya grafik filtresi ve efekt kullanmazsanız uygulamalar her zaman daha iyiperformans gösterir. Ancak, uygulama oluşturmak için Flash Platform kullanmanın nedenlerinden biri de zengin veetkileyici uygulamalara olanak veren medya ve grafik özellikleridir. Uygulamada istediğiniz zenginlik düzeyininuygulamanın çalıştığı makine ve aygıtların performans özellikleriyle uygun bir şekilde eşleşip eşleşmediğini düşünün.Bu konuda genel olarak verilebilecek iyi bir öneri “en iyileştirme işlemini erken yapmaktan olabildiğince kaçınmak”tır.Bazı performans en iyileştirmeleri, kodun daha zor okunacak veya daha az esnek bir şekilde yazılmasını gerektirir.Böyle kodlar, en iyileştirildiğinde, daha zor korunur. Bu en iyileştirmeler için, genelde kodu en iyileştirmeden öncebekleyip kodun belirli bir bölümünün başarısız performans gösterip göstermediğini belirlemek daha faydalıdır.Bazen, performansı iyileştirmek için bir denge kurmak gerekir. İdeal olarak, bir uygulama tarafından kullanılan belleğidüşürmek, o uygulamanın bir görevi gerçekleştirme hızını arttırır. Ancak, ideal olan iyileştirme her zaman mümkündeğildir. Örneğin, bir uygulama işlem sırasında kilitleniyorsa, çözüm genellikle işi birden fazla kare üzerindençalıştırılacak şekilde bölmektir. İş ayrıldığından, genel olarak işlemin gerçekleşme süresinin uzaması mümkündür.Ancak, uygulama girdiye yanıt vermeye devam eder ve donmazsa kullanıcı bu ek zamanı fark etmeyebilir.Neyin en iyileştirileceği ve en iyileştirmelerin faydalı olup olmadığı konusunda fikir edinmeye ilişkin püfnoktalarından biri performans testleri yapmaktır. Performansın test edilmesiyle ilgili çeşitli teknikler ve ipuçları“Kıyaslama ve konuşlandırma” sayfa 93 bölümünde açıklanmaktadır.Uygulamanın en iyileştirme için iyi birer aday olan parçalarının belirlenmesi hakkında daha fazla bilgi için aşağıdakikaynakları inceleyin:• AIR için performans ayarlama uygulamaları: http://www.adobe.com/go/learn_fp_goldman_tv_tr (OliverGoldmanın MAX konferansındaki sunumunun videosu)• Performans ayarlayan Adobe AIR uygulamaları: http://www.adobe.com/go/learn_fp_air_perf_devnet_tr (OliverGoldmanın sunuma dayalı Adobe Developer Bağlantısı makalesi)
  8. 8. 4Son güncelleme 30/3/2011Bölüm 2: Belleği saklamaBelleği saklamak, masaüstü uygulamalarında bile uygulama gelişimi açısından her zaman önemlidir. Ancak, mobilcihazlarda bellek tüketimi daha önemlidir ve uygulamanızın kullandığı bellek miktarını sınırlamakta fayda vardır.Görüntüleme nesneleriUygun bir görüntüleme nesnesi seçin.ActionScript 3.0 büyük bir görüntüleme nesneleri kümesi içerir. Bellek kullanımını kısıtlamaya ilişkin en basit eniyileştirme ipuçlarından biri uygun bir görüntüleme nesnesi türü kullanmaktır. Etkileşimli olmayan basit şekiller için,Shape nesneleri kullanın. Bir zaman çizelgesi gerektirmeyen etkileşimli nesneler için, Sprite nesneleri kullanın. Birzaman çizelgesi kullanan animasyonlar için, MovieClip nesneleri kullanın. Her zaman uygulamanız için en etkili nesnetürünü seçin.Aşağıdaki kod farklı görüntüleme nesneleri için bellek kullanımını gösterir:trace(getSize(new Shape()));// output: 236trace(getSize(new Sprite()));// output: 412trace(getSize(new MovieClip()));// output: 440getSize() yöntemi bir nesnenin bellekte kaç bayt kullandığını gösterir. MovieClip nesnesinin özelliklerine ihtiyaçyoksa basit Shape nesneleri yerine çoklu MovieClip nesnelerin kullanılması durumunda belleğin boşa kullanıldığınıgörebilirsiniz.İlkel türlerKodu kıyaslamak ve görev için en etkili nesneyi seçmek için getSize() yöntemini kullanın.String haricindeki tüm ilkel türler bellekte 4 - 8 bayt kullanır. Belleği ilkel bir tür için herhangi bir tür kullanarak eniyileştirmenin bir yolu yoktur.
  9. 9. 5FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011// Primitive typesvar a:Number;trace(getSize(a));// output: 8var b:int;trace(getSize(b));// output: 4var c:uint;trace(getSize(c));// output: 4var d:Boolean;trace(getSize(d));// output: 4var e:String;trace(getSize(e));// output: 464 bitlik bir değeri temsil eden bir Sayıya bir değer atanmadıysa, o sayıya ActionScript Virtual Machine (AVM)tarafından 8 bayt ayrılır. Diğer ilkel türlerin tümü 4 baytlık bölümler halinde saklanır.// Primitive typesvar a:Number = 8;trace(getSize(a));// output: 4a = Number.MAX_VALUE;trace(getSize(a));// output: 8Davranış String türü için farklıdır. Ayrılan saklama miktarı Stringin uzunluğuna bağlıdır.var name:String;trace(getSize(name));// output: 4name = "";trace(getSize(name));// output: 24name = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsumhas been the industrys standard dummy text ever since the 1500s, when an unknown printer tooka galley of type and scrambled it to make a type specimen book. It has survived not only fivecenturies, but also the leap into electronic typesetting, remaining essentially unchanged. Itwas popularized in the 1960s with the release of Letraset sheets containing Lorem Ipsumpassages, and more recently with desktop publishing software like Aldus PageMaker includingversions of Lorem Ipsum.";trace(getSize(name));// output: 1172Kodu kıyaslamak ve görev için en etkili nesneyi seçmek için getSize() yöntemini kullanın.
  10. 10. 6FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Nesneleri yeniden kullanmaMümkünse, nesneleri yeniden oluşturmak yerine yeniden kullanın.Belleği en iyileştirmenin başka bir basit yolu nesneleri yeniden kullanmak ve mümkün olduğunda onları yenidenoluşturmaktan kaçınmaktır. Örneğin, bir döngüde, aşağıdaki kodu kullanmayın:const MAX_NUM:int = 18;const COLOR:uint = 0xCCCCCC;var area:Rectangle;for (var:int = 0; i < MAX_NUM; i++){// Do not use the following codearea = new Rectangle(i,0,1,10);myBitmapData.fillRect(area,COLOR);}Her yinelemede yeni bir nesne yaratıldığından her döngü yinelemesinde Rectangle nesnesinin yeniden oluşturulmasıdaha fazla bellek kullanır ve daha yavaştır. Aşağıdaki yaklaşımı kullanın:const MAX_NUM:int = 18;const COLOR:uint = 0xCCCCCC;// Create the rectangle outside the loopvar area:Rectangle = new Rectangle(0,0,1,10);for (var:int = 0; i < MAX_NUM; i++){area.x = i;myBitmapData.fillRect(area,COLOR);}Önceki örnek daha ufak bir bellek etkisine sahip bir nesne kullandı. Bir sonraki örnek bir BitmapData nesnesikullanarak daha büyük bellek tasarrufunu gösterir. Aşağıda bir döşeme efekti oluşturan kod bellek harcar:var myImage:BitmapData;var myContainer:Bitmap;const MAX_NUM:int = 300;for (var i:int = 0; i< MAX_NUM; i++){// Create a 20 x 20 pixel bitmap, non-transparentmyImage = new BitmapData(20,20,false,0xF0D062);// Create a container for each BitmapData instancemyContainer = new Bitmap(myImage);// Add it to the display listaddChild(myContainer);// Place each containermyContainer.x = (myContainer.width + 8) * Math.round(i % 20);myContainer.y = (myContainer.height + 8) * int(i / 20);}
  11. 11. 7FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Not: Pozitif değerler kullanırken, yuvarlanan değerin int öğesine dağıtılması Math.floor() yöntemininkullanılmasından çok daha hızlıdır.Aşağıdaki resim bitmap döşemenin sonucunu gösterir:Bitmap döşemenin sonucuEn iyileştirilmiş bir sürüm birden fazla Bitmap örneği tarafından başvurulan ve aynı sonucu üreten tek bir BitmapDataörneği oluşturur.// Create a single 20 x 20 pixel bitmap, non-transparentvar myImage:BitmapData = new BitmapData(20,20,false,0xF0D062);var myContainer:Bitmap;const MAX_NUM:int = 300;for (var i:int = 0; i< MAX_NUM; i++){// Create a container referencing the BitmapData instancemyContainer = new Bitmap(myImage);// Add it to the display listaddChild(myContainer);// Place each containermyContainer.x = (myContainer.width + 8) * Math.round(i % 20);myContainer.y = (myContainer.height + 8) * int(i / 20);}Bu yaklaşım yaklaşık 700 KBlık bellek tasarrufu sağlar, bu da geleneksel bir mobil cihaz için önemli bir tasarruftur.Her bitmap kabı Bitmap özelliklerini kullanarak orijinal BitmapData örneğini değiştirmeden işlenebilir:
  12. 12. 8FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011// Create a single 20 x 20 pixel bitmap, non-transparentvar myImage:BitmapData = new BitmapData(20,20,false,0xF0D062);var myContainer:Bitmap;const MAX_NUM:int = 300;for (var i:int = 0; i< MAX_NUM; i++){// Create a container referencing the BitmapData instancemyContainer = new Bitmap(myImage);// Add it to the DisplayListaddChild(myContainer);// Place each containermyContainer.x = (myContainer.width + 8) * Math.round(i % 20);myContainer.y = (myContainer.height + 8) * int(i / 20);// Set a specific rotation, alpha, and depthmyContainer.rotation = Math.random()*360;myContainer.alpha = Math.random();myContainer.scaleX = myContainer.scaleY = Math.random();}Aşağıdaki resim bitmap dönüştürmelerinin sonucunu gösterir:Bitmap dönüştürmelerinin sonucuDaha fazla Yardım konusu“Bitmapleri önbelleğe alma” sayfa 52
  13. 13. 9FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Nesne kuyruğuMümkünse, nesne kuyruğu kullanın.Başka bir önemli en iyileştirmeye nesne kuyruğu adı verilir, nesne kuyruğu zaman içinde nesnelerin yenidenkullanımını içerir. Uygulamanızın başlatılması sırasında tanımlı bir sayıda nesne oluşturup onları bir Array veyaVector nesnesi gibi bir kuyruk içerisinde saklayabilirsiniz. Bir nesne ile gerçekleştirdiğiniz işlem tamamlandığında,onu işlemci kaynaklarını tüketmemesi için devre dışı bırakabilirsiniz ve karşılıklı başvuruları kaldırırsınız. Ancakbaşvuruların null değerine ayarlanması bu öğeyi çöp toplama için uygun hale getireceğinden bu işlemigerçekleştiremezsiniz. Basitçe nesneyi kuyruğa geri koyarsınız ve yeni bir nesneye ihtiyaç duyduğunuzda geri alırsınız.Nesnelerin tekrar kullanılması, nesneleri örneklendirme ihtiyacını azaltır ve bu durum fazla çaba gerektirebilir. Buayrıca çöp toplayıcının uygulamanızı yavaşlatarak çalışma ihtimalini de düşürür. Aşağıdaki kod, nesne kuyruğutekniğini gösterir:package{import flash.display.Sprite;public final class SpritePool{private static var MAX_VALUE:uint;private static var GROWTH_VALUE:uint;private static var counter:uint;private static var pool:Vector.<Sprite>;private static var currentSprite:Sprite;public static function initialize( maxPoolSize:uint, growthValue:uint ):void{MAX_VALUE = maxPoolSize;GROWTH_VALUE = growthValue;counter = maxPoolSize;var i:uint = maxPoolSize;pool = new Vector.<Sprite>(MAX_VALUE);while( --i > -1 )pool[i] = new Sprite();}
  14. 14. 10FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011public static function getSprite():Sprite{if ( counter > 0 )return currentSprite = pool[--counter];var i:uint = GROWTH_VALUE;while( --i > -1 )pool.unshift ( new Sprite() );counter = GROWTH_VALUE;return getSprite();}public static function disposeSprite(disposedSprite:Sprite):void{pool[counter++] = disposedSprite;}}}SpritePool sınıfı uygulamanın başlangıcında yeni nesnelerden oluşan bir kuyruk oluşturur. getSprite() yöntemi, bunesnelerden örnekler döndürür ve disposeSprite() yöntemi onları bırakır. Kod, kuyruk tamamen kullanıldığındaonun büyümesine olanak verir. Ayrıca, kuyruk yorulduğunda yeni nesnelerin ayrılmayacağı sabit boyutlu bir kuyrukoluşturmak da mümkündür. Mümkünse, döngüler halinde yeni nesneler oluşturmaktan kaçının. Daha fazla bilgi için,bkz. “Belleği boşaltmak” sayfa 11. Aşağıdaki kod yeni örnekler almak için SpritePool sınıfını kullanır:const MAX_SPRITES:uint = 100;const GROWTH_VALUE:uint = MAX_SPRITES >> 1;const MAX_NUM:uint = 10;SpritePool.initialize ( MAX_SPRITES, GROWTH_VALUE );var currentSprite:Sprite;var container:Sprite = SpritePool.getSprite();addChild ( container );for ( var i:int = 0; i< MAX_NUM; i++ ){for ( var j:int = 0; j< MAX_NUM; j++ ){currentSprite = SpritePool.getSprite();currentSprite.graphics.beginFill ( 0x990000 );currentSprite.graphics.drawCircle ( 10, 10, 10 );currentSprite.x = j * (currentSprite.width + 5);currentSprite.y = i * (currentSprite.width + 5);container.addChild ( currentSprite );}}Aşağıdaki kod fare tıklatıldığında tüm görüntüleme nesnelerini görüntüleme nesnesinden kaldırır ve daha sonraonları başka bir görev için yeniden kullanır.
  15. 15. 11FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011stage.addEventListener ( MouseEvent.CLICK, removeDots );function removeDots ( e:MouseEvent ):void{while (container.numChildren > 0 )SpritePool.disposeSprite (container.removeChildAt(0) as Sprite );}Not: Kuyruk vektörü her zaman Sprite nesnelerine başvurur. Nesneyi bellekten tamamen kaldırmak isterseniz, sizeSpritePool sınıfında, kalan tüm başvuruları kaldıracak bir dispose() yöntemi gerekir.Belleği boşaltmakÇöp toplamanın tetiklenmesini sağlamak için nesnelere olan tüm başvuruları silin.Flash Player’ın yayınlama sürümünde çöp toplayıcıyı doğrudan başlatamazsınız. Bir nesnenin çöp olaraktoplandığından emin olmak için, nesneye yapılan tüm başvuruları silin. ActionScript 1.0 ve 2.0’da kullanılan eskidelete operatörünün ActionScript 3.0’da farklı davrandığını unutmayın. Operatör yalnızca dinamik nesnelerindinamik özelliklerini silmek için kullanılabilir.Not: Adobe® AIR® uygulamasında ve Flash Player’ın hata ayıklayıcı sürümünde çöp toplayıcısını doğrudançağırabilirsiniz.Örneğin, aşağıdaki kod bir Sprite başvurusunu null değerine ayarlar:var mySprite:Sprite = new Sprite();// Set the reference to null, so that the garbage collector removes// it from memorymySprite = null;Şunu unutmayın ki, bir nesnenin null değerine ayarlanması bellekten kaldırılacağı anlamına gelmez. Bazenkullanılabilir bellek yeterince düşük sayılmıyorsa çöp toplayıcı çalışmaz. Çöp toplama tahmin edilemez. Nesne silmeyerine bellek ayırma işlemi çöp toplamayı tetikler. Çöp toplayıcı çalıştığında, henüz toplanmamış nesne grafikleribulur. Grafiklerde birbirine başvuran nesneleri bularak etkin olmayan ancak uygulamanın artık kullanmadığınesneleri algılar. Bu şekilde algılanan etkin olmayan nesneler silinir.Büyük uygulamalarda, bu işlem yoğun CPU kullanımına neden olabilir, performansı etkileyebilir ve uygulamada farkedilir bir yavaşlama meydana getirebilir. Mümkün olduğunca nesneleri yeniden kullanarak çöp toplamayı kısıtlamayıdeneyin. Ayrıca, mümkün olduğunda, başvuruları null olarak ayarlayın, böylece çöp toplayıcı, nesneleri bulmak içindaha az işleme zamanı harcar. Çöp toplama işlemini garanti sağlayan bir işlem olarak göz önünde bulundurun vemümkünse her zaman nesne ömürlerini açık bir şekilde yönetin.Not: Bir görüntüleme nesnesine yapılan başvurunun null olarak ayarlanması, nesnenin donduğunu garantilemez.Nesne, çöp olarak toplanana kadar CPU döngülerini kullanmaya devam eder. Başvurusunu null olarak ayarlamadanönce nesnenizi düzgün şekilde devre dışı bıraktığınızdan emin olun.Çöp toplayıcı Adobe AIR’de ve Flash Player’ın hata ayıklayıcı sürümünde mevcut olan System.gc() yöntemikullanılarak başlatılabilir. Adobe® Flash® Builder™ ile paketlenen profil oluşturucu, çöp toplayıcıyı el ile başlatmanızaolanak tanır. Çöp toplayıcıyı çalıştırmak uygulamanızın nasıl yanıt verdiğini ve nesnelerin bellekten doğru bir şekildesilinip silinmediğini görmenize olanak verir.Not: Bir nesne bir olay dinleyicisi olarak kullanılmışsa, başka bir nesne ona başvurabilir. Bu durumda, başvuruları nullolarak ayarlamadan önce removeEventListener() yöntemini kullanan olay dinleyicilerini kaldırın.
  16. 16. 12FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Neyse ki, bitmapler tarafından kullanılan bellek miktarı hızlı bir şekilde azaltılabilir. Örneğin, BitmapData sınıfı birdispose() yöntemi içerir. Bir sonraki örnek 1.8 MBlık bir BitmapData örneği oluşturur. Kullanımda olan geçerlibellek 1,8 MBa çıkar ve System.totalMemory özelliği daha küçük bir değer döndürür:trace(System.totalMemory / 1024);// output: 43100// Create a BitmapData instancevar image:BitmapData = new BitmapData(800, 600);trace(System.totalMemory / 1024);// output: 44964Daha sonra, BitmapData bellekten elle kaldırılır (atılır) ve bellek kullanımı bir defa daha kontrol edilir:trace(System.totalMemory / 1024);// output: 43100// Create a BitmapData instancevar image:BitmapData = new BitmapData(800, 600);trace(System.totalMemory / 1024);// output: 44964image.dispose();image = null;trace(System.totalMemory / 1024);// output: 43084dispose() yöntemi pikselleri bellekten kaldırsa da, başvuru yine de onu tamamen bırakmak için null değerineayarlanmalıdır. Belleğin hemen boşaltılması için artık bir BitmapData nesnesine ihtiyaç duymadığınızda her zamandispose() yöntemini çağırın ve başvuruyu null değerine ayarlayın.Not: Flash Player 10.1 ve AIR 1.5.2, System sınıfında disposeXML() adlı yeni bir yöntem sunar. Bu yöntem XMLağacını bir parametre olarak ileterek bir XML nesnesini anında çöp toplamaya uygun hale getirir.Daha fazla Yardım konusu“Nesneleri dondurma ve çözme” sayfa 26Bitmapleri kullanmaBitmapler yerine vektörlerin kullanılması bellek kazanmanın iyi bir yoludur. Ancak, özellikle yüksek sayıda vektörkullanımı, işlemci ve GPU kaynağı ihtiyacını önemli ölçüde artırır. Çalışma zamanı ekranda piksel çizmek için vektöriçeriği oluşturmaya kıyasla daha az işleme kaynağı gerektireceğinden, bitmap kullanmak, oluşturmayı en iyileştirmekiçin iyi bir yoldur.Daha fazla Yardım konusu“Bitmapleri elle önbelleğe alma” sayfa 60
  17. 17. 13FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Bitmap altörneklemeBelleği daha etkili bir şekilde kullanmak için, Flash Player bir 16-bit ekran algıladığında 32-bit opak görüntüler 16-bitgörüntülere indirgenir. Bu altörnekleme, bellek kaynaklarının yarısını tüketir, ve görüntüler daha hızlı oluşturulur. Buözellik yalnızca Windows Mobile için Flash Player 10.1de mevcuttur.Not: Flash Player 10.1den önce bellekte oluşturulan tüm pikseller 32 bitlik (4 bayt) bölümler halinde saklanıyordu. 300x 300 piksellik basit bir logo 350 KBlık bellek harcıyordu (300*300*4/1024). Bu yeni davranışla, aynı opak logosuyalnızca 175 KB harcar. Logo saydamsa, 16 bit’e aşağı örneklenmez ve bellekte aynı boyutta yer kaplar. Bu özellikyalnızca gömülü bitmapler veya çalışma zamanında yüklenmiş görüntüler (PNG, GIF, JPG) için geçerlidir.Mobil cihazlarda, 16 bit ile oluşturulan bir görüntüyle 32 bit ile oluşturulan aynı görüntü arasındaki farkı anlamak zorolabilir. Yalnızca birkaç renk içeren basit bir görüntü için, algılanabilir bir fark yoktur. Daha karmaşık bir görüntü içinbile farkları algılamak zordur. Ancak, resmi yakınlaştırırken az miktarda renk bozulması olabilir ve bir 32 bit degradegörüntü 16 bit olanından daha düzgün görünebilir.Tekli BitmapData başvurusuÖrnekleri mümkün olduğunca tekrar kullanarak BitmapData sınıfının kullanımını en iyileştirmek önemlidir. FlashPlayer 10.1 ve AIR 2.5, tüm platformlar için tekli BitmapData başvurusu adında yeni bir özellik sunar. Gömülügörüntüden BitmapData örnekleri oluştururken, bütün BitmapData örnekleri için tek bir bitmap sürümü kullanılır.Bir bitmap daha sonra değiştirilirse, ona bellekte kendi benzersiz bitmap’i verilir. Gömülü görüntü, kütüphanedenveya bir [Embed] etiketinden gelebilir.Not: Ayrıca, Flash Player 10.1 ve AIR 2.5, bitmapleri otomatik olarak yeniden kullandığından mevcut içerik de buözellikten faydalanır.Gömülü bir görüntüyü örneklediğiniz zaman bellekte ilişkili bir bitmap oluşturulur. Flash Player 10.1 ve AIR 2.5tenönce, aşağıdaki şemada gösterildiği gibi bellekte her örneğe ayrı bir bitmap veriliyordu:Flash Player 10.1 ve AIR 2.5 öncesinde bellekteki bitmaplerFlash Player 10.1 ve AIR 2.5te, aynı görüntünün birden fazla örneği oluşturulduğunda, tüm BitmapData örnekleri içinbitmapin tek bir sürümü kullanılır. Aşağıdaki şema bu kavramı gösterir:Bellekteki GörüntülenenLogo ÖrneğiLogo ÖrneğiBitmap KaynağıBitmap Kaynağı
  18. 18. 14FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Flash Player 10.1 ve AIR 2.5te bellekteki bitmaplerBu yaklaşım bir uygulama tarafından birçok bitmap ile kullanılan bellek miktarını önemli ölçüde düşürür. Aşağıdakikod bir Star sembolünün birden fazla örneğini oluşturur:const MAX_NUM:int = 18;var star:BitmapData;var bitmap:Bitmap;for (var i:int = 0; i<MAX_NUM; i++){for (var j:int = 0; j<MAX_NUM; j++){star = new Star(0,0);bitmap = new Bitmap(star);bitmap.x = j * star.width;bitmap.y = i * star.height;addChild(bitmap)}}Aşağıdaki resim kodun sonucunu gösterir:Bellekteki GörüntülenenLogo ÖrneğiLogo ÖrneğiBitmap Kaynağı
  19. 19. 15FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Birden fazla sembol örneği oluşturacak kod sonucuÖrneğin, Flash Player 10 ile yukarıdaki animasyon 1008 KB bellek kullanır. Flash Player 10.1 ile, masaüstü ve mobilaygıttaki animasyon yalnızca 4 KB kullanır.Aşağıdaki kod bir BitmapData örneğini değiştirir:const MAX_NUM:int = 18;var star:BitmapData;var bitmap:Bitmap;for (var i:int = 0; i<MAX_NUM; i++){for (var j:int = 0; j<MAX_NUM; j++){star = new Star(0,0);bitmap = new Bitmap(star);bitmap.x = j * star.width;bitmap.y = i * star.height;addChild(bitmap)}}var ref:Bitmap = getChildAt(0) as Bitmap;ref.bitmapData.pixelDissolve(ref.bitmapData, ref.bitmapData.rect, newPoint(0,0),Math.random()*200,Math.random()*200, 0x990000);Aşağıdaki görüntü bir Star örneğini değiştirmenin sonucunu gösterir:
  20. 20. 16FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Bir örneği değiştirmenin sonucuDahili olarak, piksel değiştirmeleri işlemek için çalışma zamanı otomatik şekilde bellekte bir bitmap atar ve oluşturur.BitmapData sınıfının bir yöntemi çağrıldığında, piksel değiştirilmelerine yol açar, bellekte yeni bir örnek oluşturulurve başka herhangi bir örnek güncellenmez. Aşağıdaki resim bu kavramı gösterir:Bir bitmapi değiştirmenin bellekteki sonucuTek bir yıldız değiştirilirse, bellekte yeni bir kopya oluşturulur. Sonuçta elde edilen animasyon, Flash Player 10.1 veAIR 2.5te bellekten yaklaşık 8 KB kullanır.Bellekteki GörüntülenenLogo ÖrneğiLogo ÖrneğiLogo ÖrneğisetPixel()Bitmap KaynağıBitmap Kaynağı
  21. 21. 17FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Önceki örnekte, her bitmap ayrı ayrı dönüştürme için kullanılabilir. Yalnızca döşeme efekti oluşturmak içinbeginBitmapFill() yöntemi en uygun yöntemdir:var container:Sprite = new Sprite();var source:BitmapData = new Star(0,0);// Fill the surface with the source BitmapDatacontainer.graphics.beginBitmapFill(source);container.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);addChild(container);Bu yaklaşım yalnızca tek bir BitmapData örneğinin oluşturulmasıyla aynı sonucu üretebilir. Yıldızları sürekli olarakdöndürmek için her Yıldız örneğine erişmek yerine her karede döndürülen bir Matrix nesnesi kullanın. Bu Matrixnesnesini beginBitmapFill() yöntemine iletin:var container:Sprite = new Sprite();container.addEventListener(Event.ENTER_FRAME, rotate);var source:BitmapData = new Star(0,0);var matrix:Matrix = new Matrix();addChild(container);var angle:Number = .01;function rotate(e:Event):void{// Rotate the starsmatrix.rotate(angle);// Clear the contentcontainer.graphics.clear();// Fill the surface with the source BitmapDatacontainer.graphics.beginBitmapFill(source,matrix,true,true);container.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);}Bu tekniği kullanırken, efekti oluşturmak için herhangi bir ActionScript döngüsüne gerek yoktur. Çalışma zamanı herşeyi dahili olarak gerçekleştirir. Aşağıdaki resim yıldızları dönüştürmenin sonucunu gösterir:
  22. 22. 18FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Döndürülen yıldızların sonucuBu yaklaşımla, orijinal kaynak BitmapData nesnesinin güncellenmesi otomatik olarak onun sahne alanındakiherhangi başka bir yerdeki kullanımını günceller, bu da etkili bir teknik olabilir. Ancak, bu yaklaşım her yıldızın öncekiörnekteki gibi teker teker ölçeklendirilmesine olanak tanımaz.Not: Aynı görüntünün birden fazla örneğini kullanırken, çizim bir sınıfın bellekteki orijinal bitmap ile ilişkili olupolmadığına bağlıdır. Bitmap ile ilişkili bir sınıf yoksa, görüntüler bitmap dolguları ile Shape nesneleri olarak çizilir.Filtreleri ve dinamik bitmapi kaldırmaPixel Bender üzerinden işlenen filtreler dahil olmak üzere filtre kullanımından kaçının.Piksel Bükme ile mobil aygıtlarda işlenen filtreler de dahil olmak üzere, filtreler gibi etkilerin kullanımını en azaindirmeye çalışın. Bir görüntüleme nesnesine bir filtre uygulandığında, çalışma zamanı bellekte iki bitmap oluşturur.Bu bitmaplerin her biri görüntüleme nesnesinin boyutundadır. Birincisi, görüntüleme nesnesinin rasterleştirilmiş birversiyonu olarak oluşturulur ve sonrasında uygulanan filtre ile ikinci bir bitmap üretmek için kullanılır.
  23. 23. 19FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Filtre uygulandığında bellekte bulunan iki bitmapBir filtrenin özelliklerinden birini değiştirirken, ortaya çıkacak bitmapin oluşturulması için bitmaplerin ikisi debellekte güncellenir. Bu işlem biraz CPU işleme gerektirir ve iki bitmap önemli bir miktar bellek kullanabilir.Flash Player 10.1 ve AIR 2.5, tüm platformlarda yeni bir filtreleme davranışı sunar. Filtre 30 saniye içindedeğiştirilmezse veya gizli veya ekran dışı ise, filtrelenmemiş bitmap tarafından kullanılan bellek boşaltılır.Bu özellik tüm platformlarda bir filtre tarafından kullanılan belleğin yarısından tasarruf sağlar. Örneğin, birbulanıklaştırma filtresi uygulanan bir metin nesnesi düşünün. Bu durumda metin basit dekorasyon için kullanılır vedeğiştirilmez. 30 saniye sonra, bellekteki filtrelenmemiş bitmap boşaltılır. Metin 30 saniye boyunca gizli veya ekran dışıkalırsa aynı sonuç gerçekleşir. Filtre özelliklerinden biri değiştirilirse, bellekteki filtrelenmemiş bitmap yenidenoluşturulur. Bu özelliğe dinamik bitmap kaldırılması denir. Bu en iyileştirmelerde bile filtrelere dikkat edin; çünküfiltreler değiştirilirken yine de çok büyük miktarda işlemci veya GPU işlemesi gerektirir.Mümkün olduğunda filtreleri taklit etmek için Adobe® Photoshop® gibi bir geliştirme aracı üzerinden oluşturulmuşbitmaplerin kullanılması iyi bir uygulamadır. ActionScript’te çalışma zamanında oluşturulmuş dinamik bitmaplerikullanmaktan kaçının. Harici olarak geliştirilmiş bitmaplerin kullanılması, özellikle filtre özellikleri zaman içindedeğişmediğinde, çalışma zamanının işlemci veya GPU yükünü azaltmasına yardımcı olur. Mümkünse bir bitmapüzerinde ihtiyaç duyduğunuz tüm efektleri geliştirme aracında oluşturun. Bitmap’i çalışma zamanında üzerinde hiçbirişlem yapmadan görüntüleyebilirsiniz, bu işlem çok daha hızlı olabilir.Doğrudan mipmap oluşturmaGerekirse, büyük görüntüleri ölçeklendirirken mipmap oluşturma özelliğini kullanın.Flash Player 10.1 ve AIR 2.5te mevcut olan başka yeni bir özellik mipmap oluşturmayla ilgilidir. Flash Player 9 ve AIR1.0, ölçeği küçültülmüş bitmaplerin kalite ve performansını iyileştiren bir mipmap oluşturma özelliği sunmuştu.Bellekteki GörüntülenenSonuçFiltrelenmemiş bitmap versiyonuFiltrelenmiş bitmap versiyonu
  24. 24. 20FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Not: Mipmap oluşturma özelliği yalnızca dinamik olarak yüklenmiş görüntüler veya gömülü bitmapler için geçerlidir.Mipmap oluşturma filtrelenen veya önbelleğe alınan görüntüleme nesnelerine uygulanmaz. Mipmap oluşturma yalnızcabitmap çift sayı olan bir genişlik ve yüksekliğe sahipse işlenebilir. Tek sayı olan bir genişlik veya yüksekliklekarşılaşıldığında, mipmap oluşturma durur. Örneğin, 250 x 250 boyutunda bir görüntüye 125 x 125 olacak şekildemipmap oluşturma uygulanabilir ancak daha fazlası uygulanamaz. Bu durumda, boyutların en az bir tanesi tek sayıdır.İkinin üsleri olan boyutlara sahip bitmapler en iyi sonuçları verir, örneğin: 256 x 256, 512 x 512, 1024 x 1024, vb.Örneğin, 1024 x 1024 boyutunda bir görüntünün yüklü olduğunu ve bir geliştiricinin görüntüyü galeride bir minikresim oluşturmak için ölçeklemek istediğini düşünün. Mipmap oluşturma özelliği, bitmapin orta seviye altörneklemeversiyonları kullanılarak ölçeklendirildiğinde görüntüyü düzgün bir şekilde oluşturur. Çalışma zamanının öncekisürümleri bellekte bitmapin orta seviye altörneklenmiş sürümlerini oluşturuyordu. 1024 x 1024 boyutlarında birgörüntü 64 x 64 şeklinde yüklenip görüntülendiğinde, çalışma zamanının eski sürümleri yarı boyutlu bitmaplerin herbirini oluştururdu. Örneğin, bu durumda 512 x 512, 256 x 256, 128 x 128 ve 64 x 64 bitmapler oluşturulurdu.Şimdi, Flash Player 10.1 ve AIR 2.5 istenen hedef boyuta doğrudan orijinal kaynaktan mipmap oluşturmayıdestekliyor. Önceki örnekte, yalnızca 4 MB (1024 x 1024) orijinal bitmap ve 16 KB (64 x 64) mipmapi oluşturulmuşbitmap oluşturuluyordu.Mipmap oluşturma mantığı ayrıca dinamik bitmap kaldırma özelliğiyle de çalışır. Yalnızca 64 x 64 bitmapkullanılıyorsa, 4 MB orijinal bitmap bellekten boşaltılır. Mipmapin yeniden oluşturulması gerekiyorsa, orijinal bitmapyeniden yüklenir. Ayrıca, çeşitli boyutlarda başka mipmapi oluşturulmuş bitmapler gerekiyorsa, bitmapinoluşturulması için bitmaplerin mipmap zinciri kullanılır. Örneğin, bir 1:8 bitmap oluşturulması gerekiyorsa,hangisinin belleğe ilk yüklendiğini belirlemek amacıyla 1:4 ve 1:2 ve 1:1 bitmapler incelenir. Başka versiyonlarbulunmazsa, kaynaktan 1:1 orijinal bitmap yüklenir ve kullanılır.JPEG açıcısı kendi biçiminde mipmap oluşturma işlemini gerçekleştirebilir. Bu doğrudan mipmap oluşturma işlemi,büyük bir bitmap’in sıkıştırılmamış görüntünün tamamı yüklenmeden doğrudan bir mipmap biçimi şeklindeaçılmasına olanak tanır. Mipmapin oluşturulması önemli ölçüde daha hızlıdır; büyük bitmapler tarafından kullanılanbellek ayrılmaz ve sonra boşaltılır. JPEG görüntü kalitesi genel mipmap oluşturma tekniğine yakındır.Not: Mipmap oluşturma işlevini gereğinden fazla kullanmayın. Bu işlev, küçük boyuta ölçeklenmiş bitmaplerinkalitesini arttırsa da bant genişliğini, belleği ve hızı etkiler. Bazı durumlarda bitmap’in harici bir araçta öncedenölçeklendirilmiş biçimini uygulamanıza içe aktarıp kullanmak daha iyi bir seçenektir. Amacınız küçülterekölçeklendirmekse büyük boyutlu bitmaplerle işleme başlamayın.3B efektlerini kullanma3B efektlerini el ile oluşturmayı göz önünde bulundurun.Flash Player 10 ve AIR 1.5, görüntüleme nesnelerine perspektif dönüştürme uygulamanıza olanak veren bir 3B motorusundu. Bu dönüştürmeleri rotationX ve rotationY özelliklerini veya Graphics sınıfının drawTriangles()yöntemini kullanarak uygulayabilirsiniz. Ayrıca z özelliğiyle derinlik uygulayabilirsiniz.. Her perspektifidönüştürülmüş görüntüleme nesnesinin bir bitmap olarak rasterleştirildiğini ve bundan dolayı daha fazla bellekgerektirdiğini aklınızda tutun.Aşağıdaki şekil perspektif dönüştürme kullanılırken rasterleştirme tarafından üretilen kenar yumuşatmayı gösterir:
  25. 25. 21FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Perspektif dönüştürme sonucu ortaya çıkan kenar yumuşatmaKenar yumuşatma, vektör içeriğinin bitmap olarak dinamik bir şekilde rasterleştirilmesinin sonucudur. Bu kenaryumuşatma, AIR ve Flash Playerın masaüstü sürümünde ve mobil için AIR 2.0.1 ve AIR 2.5te 3B efektlerkullandığınızda gerçekleşir. Ancak mobil aygıtlar için Flash Playera kenar yumuşatma uygulanmaz.3B efektinizi yerel APIye dayanmadan elle oluşturabiliyorsanız, bu da bellek kullanımını azaltabilir. Ancak FlashPlayer 10 ve AIR 1.5te tanıtılan yeni 3B özellikleri doku eşlemeyi drawTriangles() gibi yöntemler sayesinde çokdaha kolay bir hale getirir.Bir geliştirici olarak, oluşturmak istediğiniz 3B efektin yerel API tarafından işlendiğinde mi yoksa elle mi daha iyiperformans sağladığına karar verin. Bellek kullanımının yanı sıra ActionScript çalıştırma ve oluşturma performansınıda dikkate alın.renderMode uygulama özelliğini GPU olarak ayarladığınız AIR 2.0.1 ve AIR 2.5 mobil uygulamalarda GPU, 3Bdönüştürmeleri yapar. Ancak renderModeCPU olursa, 3B dönüştürmeleri GPU değil, CPU gerçekleştirir. Flash Player10.1 uygulamalarında CPU, 3B dönüştürmeleri gerçekleştirir.CPU 3B dönüştürmeler yaptığında, bir görüntüleme nesnesine herhangi bir 3B dönüştürmenin uygulanmasınınbellekte iki bitmap gerektireceğini dikkate alın. Bir bitmap kaynak bitmap için ve ikinci bir bitmap de perspektifidönüştürülmüş sürüm içindir. Bu şekilde 3B dönüştürmeleri filtrelere benzer bir yöntemle çalışır. Sonuç olarak, CPU3B dönüştürmeler yaptığında, 3B özelleri tutumlu şekilde kullanın.Metin nesneleri ve bellekSalt okunur bir metin için Adobe® Flash® Metin Motorunu kullanın; giriş metni için TextField nesneleri kullanın.Flash Player 10 ve AIR 1.5, sistem belleğinden tasarruf sağlayan güçlü bir yeni metin motoru olan Adobe Flash MetinMotorunu (FTE) sunmuştu. Ancak, FTE üzerine flash.text.engine paketinde sağlanan ek bir ActionScript 3.0 katmanıgerektiren düşük düzeyli bir APIdir.
  26. 26. 22FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEBelleği saklamaSon güncelleme 30/3/2011Salt okunur metinler için, düşük bellek kullanımı ve daha iyi oluşturma sunan Flash Metin Motoru kullanılması eniyisidir. Giriş metni için, girdi işleme ve kelime sarma gibi genel davranışlar oluşturmak için daha az ActionScriptgerektiğinden, TextField nesnelerini kullanmak daha iyi bir seçimdir.Daha fazla Yardım konusu“Metin nesnelerinin oluşturulması” sayfa 66Olay modeli ile geri aramaların karşılaştırmasıOlay modeli yerine basit geri aramalar kullanmayı düşünün.ActionScript 3.0 olay modeli nesne gönderme kavramına dayanır. Olay modeli nesne yönelimlidir ve kodun yenidenkullanımı için en iyileştirilmiştir. dispatchEvent() yöntemi dinleyici listesi üzerinden döngüde ilerler ve kayıtlı hernesnede olay işleyicisini çağırır. Ancak olay modelinin dezavantajlarından biri uygulamanızı kullandığınız süreboyunca çok sayıda nesne oluşturacak olmanızdır.Zaman çizelgesinden animasyon dizisinin sonunu gösteren bir olay göndermeniz gerektiğini düşünün. Bildirimintamamlanması için, aşağıdaki örnekte gösterildiği gibi zaman çizelgesindeki belirli bir kareden olay gönderebilirsiniz:dispatchEvent( new Event ( Event.COMPLETE ) );Document sınıfı bu olayı aşağıdaki kod satırıyla dinleyebilir:addEventListener( Event.COMPLETE, onAnimationComplete );Bu yaklaşım doğru olsa da, yerel olay modelinin kullanılması daha yavaş olabilir ve klasik bir geri çağırma işlevikullanmak işlemine göre daha fazla bellek kullanabilir. Olay nesneleri bellekte oluşturulmalı ve ayrılmalıdır; bu daperformansta düşüşe neden olur. Örneğin Event.ENTER_FRAME olayını dinlerken olay işleyicisi için her karede yenibir event nesnesi oluşturulur. Özellikle görüntüleme nesneleri için, görüntüleme listesi karmaşıksa zor olabilen olayıdıştan içe ve içten dışa tetikleme aşamaları nedeniyle performans yavaş olabilir.
  27. 27. 23Son güncelleme 30/3/2011Bölüm 3: CPU kullanımını en aza indirmeEn iyileştirme için başka önemli bir odak alanı CPU kullanımıdır. İşlemci işlemesinin en iyileştirilmesi, performansıve bunun bir sonucu olarak da mobil aygıtların pil ömrünü arttırır.CPU kullanımı için Flash Player 10.1 geliştirmeleriFlash Player 10.1 CPU işlemeden tasarruf etmeyi sağlayan iki yeni özellik sunar. Özellikler arasında, ekran dışınagittiğinde SWF içeriğinin duraklatılması ve devam ettirilmesi ve bir sayfadaki Flash Player örnekleri sayısınınsınırlandırılması yer alır.Duraklatma ve devam etmeNot: Duraklatma ve devam etme özellikleri Adobe® AIR® uygulamaları için geçerli değildir.İşlemci ve pil kullanımını en iyileştirmek için Flash Player 10.1, mobil platformlarda (ve dizüstü bilgisayarlarda) devredışı örneklerle ilgili yeni bir özellik sunar. Bu özellik ekrandaki içerik açılıp kapatıldığında SWF dosyasını duraklatıpdevam ettirerek işlemci kullanımını kısıtlamanıza izin verir. Bu özellikle, Flash Player içeriğin oynatılması devamettirildiğinde yeniden oluşturulabilecek herhangi bir nesneyi kaldırarak mümkün olduğu kadar belleği serbest bırakır.İçeriğin tümü ekran dışı olduğunda içerik ekran dışı sayılır.İki senaryo SWF içeriğinin ekran dışı olmasına sebep olur.• Kullanıcı sayfayı kaydırır ve SWF içeriğinin ekran dışına taşınmasına sebep olur.Bu durumda, herhangi bir ses veya video yürütülüyorsa, içerik yürütülmeye devam eder ancak görüntü oluşturmadurur. Herhangi bir ses veya video yürütülmüyorsa, oynatmanın veya ActionScript yürütülmesininduraklatılmadığından emin olmak için hasPriority HTML parametresini true olarak ayarlayın. Ancak, içerikekranın dışındayken veya gizliyken hasPriority HTML parametresinin değerine bakılmaksızın SWF içeriğioluşturma işleminin duraklatıldığını unutmayın.• Tarayıcıda bir sekme açılır, bu da SWF içeriğinin arka plana taşınmasına sebep olur.Bu durumda, hasPriority HTML etiketinin değerine bakılmaksızın, SWF içeriği 2 kare/sn hızına düşürülür. Sesve video yürütülmesi durdurulur ve SWF içeriği görünür hale gelmedikçe içerik oluşturma işlemine devamedilmez.Örnek yönetimiNot: Örnek yönetimi özelliği, Adobe® AIR® uygulamaları için geçerli değildir.Ekranın dışındaki SWF dosyalarının yüklenmesini ertelemek için hasPriority HTML parametresini kullanın.Flash Player 10.1 hasPriority adlı yeni bir HTML parametresi sunar:<param name="hasPriority" value="true" />
  28. 28. 24FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011Bu özellik bir sayfada başlatılmış olan Flash Player örneklerinin sayısını kısıtlar. Örneklerin sayısını kısıtlamak işlemcive pil kaynaklarını korumaya yardım eder. Amaç bir sayfadaki diğer içeriğe içerik önceliği vererek SWF içeriğine belirlibir öncelik atamaktır. Basit bir örnek düşünün: kullanıcı bir web sitesini taramaktadır ve dizin sayfası üç farklı SWFdosyası barındırır. Bunlardan biri görünürdür, başka biri ekran üzerinde kısmen görünürdür ve sonuncusu ekrandışıdır ve kaydırmayı gerektirir. İlk iki animasyon normal şekilde başlatılır ancak sonuncusu görünür olana kadarertelenir. hasPriority parametresi mevcut olmadığında veya false değerine ayarlandığında bu senaryo varsayılandavranıştır. Bir SWF dosyasının ekran dışı olsa da başlatılmasını sağlamak için, hasPriority parametresini truedeğerine ayarlayın. Ancak, hasPriority parametresinin değerinden bağımsız olarak, kullanıcıya görünmeyen birSWF dosyasının oluşturulması her zaman duraklatılır.Not: Kullanılabilir işlemci kaynakları azalırsa, Flash Player örnekleri hasPriority parametresi true değerine ayarlıolsa da artık otomatik başlatılmaz. Sayfa yüklendikten sonra JavaScript üzerinden yeni örnekler oluşturulursa, oörnekler hasPriority bayrağını yoksayar. Webmaster, hasPriority bayrağını dahil etmeyi başaramazsa, herhangibir 1x1 piksel veya 0x0 piksel içerik SWF dosyalarının ertelenmesini önleyerek başlatılır. Ancak SWF dosyaları halentıklatıldığında başlatılabilir. Bu davranışa “oynatmak için tıklat” adı verilir.Aşağıdaki şema hasPriority parametresini değişik değerlere ayarlamanın etkilerini gösterir:hasPriority parametresi için farklı değerlerin etkilerikullanıcının aygıtında görünür olan alanSWFhasPriority false olarakayarlanmış veyamevcut değilSWF filmi başlatıldıSWF filmi başlatılmadıSWFhasPriority false olarakayarlanmış veyamevcut değilSWFhasPriority falseolarak ayarlanmışveya mevcut değil
  29. 29. 25FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011hasPriority parametresi için farklı değerlerin etkileriUyku moduFlash Player 10.1 ve AIR 2.5, mobil aygıtlarda CPU işleme ve bunun sonucu olarak da pil ömrü tasarrufuna yardımcıolan yeni bir özellik sunar. Bu özellik bir çok mobil aygıtta bulunan arka ışık özelliğini kapsar. Örneğin, mobiluygulama kullanan bir kullanıcı rahatsız edilirse ve aygıtı kullanmayı bırakırsa, çalışma zamanı arka ışığın ne zamanuyku moduna girdiğini algılar. Daha sonra kare hızını saniyede 4 kareye (fps) düşürür ve oluşturmayı duraklatır. AIRuygulamaları için ayrıca uygulama arka plana geçtiğinde uyku modu başlar.ActionScript kodu Stage.frameRate özelliğini 4 fpsye ayarlamaya benzer olarak uyku modunda çalışmaya devameder. Ancak oluşturma adımı atlanır, böylece kullanıcı oynatıcının 4 fpsde çalıştığını göremez. Sıfır yerine 4 fpslik birkare hızı seçildi, çünkü bu tüm bağlantıların açık kalmasına olanak verir (NetStream, Socket ve NetConnection). Sıfırageçmek tüm açık bağlantıları keser. Çoğu aygıt üreticisi yenileme hızı olarak 250 mslik (4 fps) kare hızınıkullandığından bu yenileme hızı seçildi. Bu değerin kullanılması, çalışma zamanının kare hızını aygıtın kendisiyle aynıhızda tutar.Not: Çalışma zamanı uyku modundayken Stage.frameRate özelliği 4 kare/saniye yerine orijinal SWF dosyasının karehızını döndürür.Arka aşık açık moda geri girdiğinde, oluşturmaya devam edilir. Kare hızı orijinal değerine döner. Bir kullanıcınınmüzik oynattığı bir medya oynatıcı uygulaması düşünün. Ekran uyku moduna girerse, çalışma zamanı oynatılmaktaolan içerik türünü temel alarak yanıt verir. Karşılık gelen çalışma zamanı davranışına sahip durumların listesi:• Arka ışık uyku moduna girer ve A/V olmayan içerik oynatılır: Oluşturma duraklatılır ve kare hızı 4 fpsye ayarlanır.• Arka ışık uyku moduna girer ve A/V içeriği oynatılır: çalışma zamanı kullanıcı deneyimini sürdürerek arka ışığı herzaman açık olmaya zorlar.kullanıcının aygıtında görünür olan alanSWFhasPriority false olarakayarlanmış veyamevcut değilSWFhasPriority trueolarak ayarlanmışSWF filmi başlatıldıSWF filmi başlatılmadıSWFhasPriority falseolarak ayarlanmışveya mevcut değil
  30. 30. 26FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011• Arka ışık uyku modundan açık moda geçer: çalışma zamanı kare hızını orijinal SWF dosyası kare hızı ayarına getirirve oluşturmayı devam ettirir.• A/V içeriği oynatılırken Flash Player duraklatılır: Flash Player A/V artık oynatılmadığından arka ışık durumunuvarsayılan sistem davranışına sıfırlar.• A/V içeriği oynatılırken mobil aygıt bir telefon çağrısı alır: Oluşturma duraklatılır ve kare hızı 4 fpsye ayarlanır.• Mobil bir aygıtta arka ışık uyku modu devre dışı bırakılır: çalışma zamanı normal davranır.Arka ışık uyku moduna girdiğinde, oluşturma duraklar ve kare hızı yavaşlar. Bu özellik CPU işlemeden tasarruf ederancak bir oyun uygulamasındaki gibi gerçek bir duraklatma oluşturması beklenemez.Not: Çalışma zamanı uyku moduna girip çıkarken hiçbir ActionScript olayı gönderilmez.Nesneleri dondurma ve çözmeREMOVED_FROM_STAGE ve ADDED_TO_STAGE olaylarını kullanarak nesneleri uygun biçimde dondurun ve çözün.Kodunuzu en iyileştirmek için, nesnelerinizi her zaman dondurun ve çözün. Dondurma ve çözme bütün nesneler içinönemli olsa da, özellikle görüntüleme nesneleri için önemlidir. Görüntüleme nesneleri artık görüntüleme listesindeolmasa da ve çöp toplamayı bekliyor olsa da, yoğun CPU kullanımı gerektirecek kod kullanıyor olabilirler. Örneğin,hala Event.ENTER_FRAME öğesini kullanıyor olabilirler. Sonuç olarak nesneleri Event.REMOVED_FROM_STAGE veEvent.ADDED_TO_STAGE olaylarıyla doğru uygun biçimde dondurmak ve çözmek çok önemlidir. Aşağıdaki örnekteklavye ile etkileşen sahne alanında oynatılan bir film klibi gösterilmektedir:// Listen to keyboard eventsstage.addEventListener(KeyboardEvent.KEY_DOWN, keyIsDown);stage.addEventListener(KeyboardEvent.KEY_UP, keyIsUp);// Create object to store key statesvar keys:Dictionary = new Dictionary(true);function keyIsDown(e:KeyboardEvent):void{// Remember that the key was pressedkeys[e.keyCode] = true;if (e.keyCode==Keyboard.LEFT || e.keyCode==Keyboard.RIGHT){runningBoy.play();}}function keyIsUp(e:KeyboardEvent):void{// Remember that the key was releasedkeys[e.keyCode] = false;for each (var value:Boolean in keys)if ( value ) return;runningBoy.stop();
  31. 31. 27FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011}runningBoy.addEventListener(Event.ENTER_FRAME, handleMovement);runningBoy.stop();var currentState:Number = runningBoy.scaleX;var speed:Number = 15;function handleMovement(e:Event):void{if (keys[Keyboard.RIGHT]){e.currentTarget.x += speed;e.currentTarget.scaleX = currentState;} else if (keys[Keyboard.LEFT]){e.currentTarget.x -= speed;e.currentTarget.scaleX = -currentState;}}Klavye ile etkileşen film klibiKaldır düğmesi tıklatıldığında, film klibi görüntüleme listesinden kaldırılır:
  32. 32. 28FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011// Show or remove running boyshowBtn.addEventListener (MouseEvent.CLICK,showIt);removeBtn.addEventListener (MouseEvent.CLICK,removeIt);function showIt (e:MouseEvent):void{addChild (runningBoy);}function removeIt(e:MouseEvent):void{if (contains(runningBoy)) removeChild(runningBoy);}Görüntüleme listesinden kaldırıldığında bile, film klibi Event.ENTER_FRAME olayını göndermeye devam eder. Filmklibi çalışmaya devam eder ancak oluşturulmaz. Bu durumu doğru şekilde ele almak için yoğun CPU kodununçalıştırılmasını önlemek için doğru olayları ve olay kaldırma dinleyicilerini dinleyin:// Listen to Event.ADDED_TO_STAGE and Event.REMOVED_FROM_STAGErunningBoy.addEventListener(Event.ADDED_TO_STAGE,activate);runningBoy.addEventListener(Event.REMOVED_FROM_STAGE,deactivate);function activate(e:Event):void{// Restart everythinge.currentTarget.addEventListener(Event.ENTER_FRAME,handleMovement);}function deactivate(e:Event):void{// Freeze the running boy - consumes fewer CPU resources when not showne.currentTarget.removeEventListener(Event.ENTER_FRAME,handleMovement);e.currentTarget.stop();}Göster düğmesine basıldığında film klibi tekrar başlatılır, Event.ENTER_FRAME olaylarını yeniden diner ve klavyedoğru biçimde film klibini kontrol eder.Not: Bir görüntüleme nesnesi görüntüleme listesinden kaldırılırsa, başvurusunun null değerine ayarlanması nesnenindondurulmasını sağlamaz. Çöp toplayıcı çalışmıyorsa, nesne artık görüntülenmese de bellek ve işlemci işlemesinikullanmaya devam eder. Nesnenin mümkün olduğunca az işlemci işlemesini kullanmasını sağlamak için, onugörüntüleme listesinden kaldırırken tamamen dondurduğunuzdan emin olun.Flash Player 10 ve AIR 1.5ten başlayarak aşağıdaki davranış da gerçekleşir. Oynatma kafası boş bir kareyle karşılaşırsa,herhangi bir dondurma davranışı uygulamamış olsanız da görüntüleme nesnesi otomatik olarak dondurulur.Dondurma kavramı ayrıca Loader sınıfıyla uzaktan içerik yüklenirken de önemlidir. Loader sınıfı Flash Player 9 veAIR 1.0 ile kullanılırken, içeriğin LoaderInfo nesnesi tarafından gönderilen Event.UNLOAD olayının dinlenmesiyoluyla el ile dondurulması gerekliydi. Her nesnenin el ile dondurulması gerekiyordu, bu da önem taşıyan bir görevdi.Flash Player 10 ve AIR 1.5, Loader sınıfında unloadAndStop() adlı önemli ve yeni bir yöntem sundu. Bu yöntem birSWF dosyasını kaldırmanıza, yüklü olan SWF dosyasındaki her nesneyi otomatik olarak dondurmanıza ve çöptoplayıcıyı çalışmaya zorlamanıza olanak tanır.Aşağıdaki kodda, daha fazla işleme ve el ile dondurma gerektiren unload() yöntemi kullanılarak SWF dosyasıyüklenmekte ve sonra boşaltılmaktadır.
  33. 33. 29FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011var loader:Loader = new Loader();loader.load ( new URLRequest ( "content.swf" ) );addChild ( loader );stage.addEventListener ( MouseEvent.CLICK, unloadSWF );function unloadSWF ( e:MouseEvent ):void{// Unload the SWF file with no automatic object deactivation// All deactivation must be processed manuallyloader.unload();}Dondurmayı yerel olarak işleyip çöp toplama işlemini çalışmaya zorlayan unloadAndStop() yöntemini kullanmak iyibir uygulamadır.var loader:Loader = new Loader();loader.load ( new URLRequest ( "content.swf" ) );addChild ( loader );stage.addEventListener ( MouseEvent.CLICK, unloadSWF );function unloadSWF ( e:MouseEvent ):void{// Unload the SWF file with automatic object deactivation// All deactivation is handled automaticallyloader.unloadAndStop();}unloadAndStop() yöntemi çağrıldığında aşağıdaki eylemler gerçekleşir:• Sesler durdurulur.• SWF dosyasının ana zaman çizelgesine kayıtlı olan dinleyiciler kaldırılır.• Zamanlayıcı nesneler durdurulur.• Donanım peripheral cihazlar (örneğin kamera ve mikrofon) bırakılır.• Film kliplerinin her biri durdurulur.• Event.ENTER_FRAME, Event.FRAME_CONSTRUCTED, Event.EXIT_FRAME, Event.ACTIVATE veEvent.DEACTIVATE öğelerinin gönderilmesi durdurulur.Olayları etkinleştirme ve devre dışı bırakmaArka plan etkinsizliğini algılamak ve uygulamanızı uygun şekilde en iyileştirmek için Event.ACTIVATE veEvent.DEACTIVATE olaylarını kullanın.
  34. 34. 30FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011İki olay (Event.ACTIVATE ve Event.DEACTIVATE), mümkün olan en az işlemci döngüsünü kullanması içinuygulamanıza hassas ayar yapmanıza yardımcı olabilir. Bu olaylar, çalışma zamanının ne zaman odak kazandığını veyakaybettiğini algılamanıza olanak sağlar. Sonuç olarak, bağlam değişikliklerine yanıt vermek için kod en iyileştirilebilir.Aşağıdaki kod her iki olayı dinler ve uygulama odağını kaybettiğinde kare hızını dinamik olarak sıfıra değiştirir.Örneğin, kullanıcı başka bir sekmeye geçtiğinde veya uygulamayı arka plana koyduğunda odak kaybedebilir:var originalFrameRate:uint = stage.frameRate;var standbyFrameRate:uint = 0;stage.addEventListener ( Event.ACTIVATE, onActivate );stage.addEventListener ( Event.ACTIVATE, onDeactivate );function onActivate ( e:Event ):void{// restore original frame ratestage.frameRate = originalFrameRate;}function onDeactivate ( e:Event ):void{// set frame rate to 0stage.frameRate = standbyFrameRate;}Uygulama yeniden odak kazandığında, kare hızı orijinal değerine sıfırlanır. Kare hızını dinamik olarak değiştirmekyerine, nesneleri dondurma ve çözme gibi diğer en iyileştirmeleri yapmayı da düşünebilirsiniz.Etkinleştirme ve devre dışı bırakma olayları, bazen mobil aygıtlarda ve Netbooklarda bulunan "Duraklat ve DevamEttir" özelliğine benzer bir mekanizma uygulamanıza olanak sağlar.Daha fazla Yardım konusu“Uygulama kare hızı” sayfa 51“Nesneleri dondurma ve çözme” sayfa 26Fare etkileşimleriFare etkileşimlerini mümkün olduğunca devre dışı bırakmayı göz önünde bulundurun.MovieClip veya Sprite nesnesi gibi etkileşimli bir nesne kullanırken, fare etkileşimlerini algılamak ve işlemek içinçalışma zamanı, yerel kod çalıştırır. Fare etkileşiminin algılanması, özellikle çok sayıda üst üste gelen etkileşimli nesneekranda gösterildiğinde yoğun işlemci kullanımı gerektirebilir. Bu işlemeden kaçınmak için kolay bir yöntem de, fareetkileşimi gerektirmeyen nesnelerdeki fare etkileşimlerini devre dışı bırakmaktır. Aşağıdaki kod mouseEnabled vemouseChildren özelliklerinin kullanımını gösterir:
  35. 35. 31FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011// Disable any mouse interaction with this InteractiveObjectmyInteractiveObject.mouseEnabled = false;const MAX_NUM:int = 10;// Create a container for the InteractiveObjectsvar container:Sprite = new Sprite();for ( var i:int = 0; i< MAX_NUM; i++ ){// Add InteractiveObject to the containercontainer.addChild( new Sprite() );}// Disable any mouse interaction on all the childrencontainer.mouseChildren = false;Mümkün olduğunca fare etkileşimini devre dışı bırakmayı göz önünde bulundurun. Bu, uygulamanızın daha azişlemci işlemesi kullanmasını sağlar ve bunun bir sonucu olarak da mobil aygıtlarda pil kullanımının azaltılmasınayardımcı olur.Zamanlayıcılarla ENTER_FRAME olaylarınınkarşılaştırılmasıİçeriğin hareketli olup olmamasına bağlı olarak zamanlayıcıları veya ENTER_FRAME olaylarını seçin.Hareketli olmayan ve uzun süre boyunca çalıştırılan içerik için Event.ENTER_FRAME olayları yerine zamanlayıcılartercih edilir.ActionScript 3.0’da belirli aralıklarla işlev çağırmanın iki yolu bulunur. İlk yaklaşım, etkileşimli nesneler(InteractiveObject) tarafından gönderilen Event.ENTER_FRAME olayını kullanma doğrultusundadır. İkinci yaklaşımise bir zamanlayıcı kullanmaktır. ActionScript geliştiricileri sık sık ENTER_FRAME olayı yaklaşımını kullanır.ENTER_FRAME olayı her karede gönderilir. Bunun bir sonucu olarak işlevin çağrıldığı aralık geçerli kare hızı ile ilgilidir.Kare hızına Stage.frameRate özelliği üzerinden erişilebilir. Ancak bazı durumlarda zamanlayıcının kullanılmasıENTER_FRAME olayın kullanılmasından daha iyi olabilir. Örneğin, animasyon kullanmıyorsanız ancak belirli aralıklarlakodunuzun çağrılmasını istiyorsanız zamanlayıcı kullanmak daha iyi bir seçenektir.Bir zamanlayıcı ENTER_FRAME olayıyla aynı davranışı gösterir, ancak bir olay kare hızından bağımsız olarakgönderilebilir. Bu davranış etkili bir en iyileştirme sunabilir. Örnek olarak bir video oynatıcısı uygulamasını düşünün.Bu durumda, yalnızca uygulama kontrolleri hareket ettiğinden yüksek kare hızına ihtiyacınız olmaz.Not: Video zaman çizelgesine gömülü olmadığından kare hızı videoyu etkilemez. Bunun yerine video aşamalı indirmeveya akış üzerinden dinamik olarak yüklenir.Bu örnekte kare hızı 10 kare/saniyelik düşük bir değere ayarlıdır. Zamanlayıcı, kontrolleri saniyede bir güncellemehızında günceller. Yüksek güncelleme hızı TimerEvent nesnesindeki updateAfterEvent() yöntemi ile sağlanır. Buyöntem ekranı gerektiğinde zamanlayıcı her olay gönderdiğinde güncellenmeye zorlar. Aşağıdaki kod bu fikrigöstermektedir:
  36. 36. 32FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011// Use a low frame rate for the applicationstage.frameRate = 10;// Choose one update per secondvar updateInterval:int = 1000;var myTimer:Timer = new Timer(updateInterval,0);myTimer.start();myTimer.addEventListener( TimerEvent.TIMER, updateControls );function updateControls( e:TimerEvent ):void{// Update controls here// Force the controls to be updated on screene.updateAfterEvent();}updateAfterEvent() yönteminin çağrılması kare hızını değiştirmez. Yalnızca çalışma zamanını, ekrandaki değişeniçeriği güncellemeye zorlar. Zaman çizelgesi halen 10 kare/saniyede çalışmaktadır. Düşük performanslı aygıtlarda veyaolay işleyici işlemlerinin ağır işleme gerektiren kodlar barındırması durumunda zamanlayıcıların ve ENTER_FRAMEolaylarının tam olarak doğru olmadığını unutmayın. SWF dosyasının kare hızında olduğu gibi, zamanlayıcınıngüncelleme kare hızı da bazı durumlarda değişiklik gösterebilir.Uygulamanızdaki Timer nesnelerinin ve kayıtlı enterFrame işleyicilerinin sayısını en aza indirin.Çalışma zamanı, görüntüleme listesindeki her görüntüleme nesnesine her karede bir enterFrame olayı gönderir.Birden fazla görüntüleme nesnesi olan enterFrame olayına ilişkin dinleyicileri kaydedebilseniz de, bu işlemingerçekleştirilmesi her kare için daha fazla kodun çalıştırması anlamına gelir. Bunun yerine, karelerin her biriniçalıştırmak için kullanılan kodun tamamını çalıştıran tek bir merkezi enterFrame işleyicisi kullanmayı göz önündebulundurun. Bu kodun merkezileştirilmesiyle, sıkça çalıştırılan kodun tamamının yönetilmesi daha kolaydır.Buna benzer olarak, Timer nesneleri kullanmanız durumunda, birden çok Timer nesnesinden olay oluşturma vegönderme konusunda ek bir yük ortaya çıkar. Farklı aralıklarda farklı işlemler tetiklemeniz gerekiyorsa, aşağıdaönerilen alternatifleri bulabilirsiniz:• Ne kadar sıklıkta gerçekleştiklerine dayanarak en az sayıda Timer nesnesi ve grup işlemi kullanın..Örneğin, sıkça gerçekleştirilen işlemler için, 100 milisaniyede bir tetiklenecek şekilde ayarlı tek bir Timer öğesikullanın. Daha az sıklıkta gerçekleşen veya arka plan işlemleri için her 2000 milisaniyede bir tetiklenen başka birTimer öğesi kullanın.• Tek bir Timer nesnesi kullanın ve işlemlerin Timer nesnesinin birden fazla delay özelliği aralığında tetiklenmesinisağlayın.Örneğin, 100 milisaniyede bir gerçekleşmesi gereken işlemleriniz ve 200 milisaniyede gerçekleşmesini istediğinizbaşka işlemler olduğunu varsayın. Bu durumda, 100 milisaniyelik bir delay değeri olan tek bir Timer nesnesikullanın. timer olay işleyicisine, diğer zamanlarda yalnızca 200 milisaniyede bir meydana gelecek işlemleriçalıştıran bir koşul ifadesi ekleyin. Aşağıdaki örnek bu tekniği göstermektedir:
  37. 37. 33FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMECPU kullanımını en aza indirmeSon güncelleme 30/3/2011var timer:Timer = new Timer(100);timer.addEventListener(TimerEvent.Timer, timerHandler);timer.start();var offCycle:Boolean = true;function timerHandler(event:TimerEvent):void{// Do things that happen every 100 msif (!offCycle){// Do things that happen every 200 ms}offCycle = !offCycle;}Timer nesnelerini kullanımda değilken durdurma.Bir Timer nesnesinin timer olay işleyicisi işlemleri yalnızca belirli koşullarda gerçekleştiriyorsa, koşulların hiçbiri trueolmadığında Timer öğesinin stop() yöntemini çağırın.enterFrame olayında veya Timer işleyicilerinde, ekranda yeniden çizim yapılmasına neden olan görüntülemenesnelerinin görünümünde yapılan değişiklik sayısını en aza indirin.Oluşturma aşaması, o kare süresince değişen sahne alanı bölümünü Her karede yeniden çizer. Yeniden çizme bölgesibüyükse veya küçük olmasına rağmen yüksek miktarda veya karmaşık görüntüleme nesneleri içeriyorsa, çalışmazamanının oluşturma için daha fazla süreye ihtiyacı vardır. İstenen yeniden çizme miktarını test etmek için, FlashPlayer’ın hata ayıklayıcı sürümü veya AIR’deki “yeniden çizilen bölgeleri göster” özelliğini kullanın.Tekrarlanan eylemler için performansı iyileştirme hakkında daha fazla bilgi için, aşağıdaki makaleyi inceleyin:• Writing well-behaved, efficient, AIR applications (Başarılı davranış gösteren, etkili AIR uygulamaları yazma)(Arno Gourdol tarafından yazılan makale ve örnek uygulama)Daha fazla Yardım konusu“Davranışları yalıtma” sayfa 63Hareket arası oluşturma sendromuİşlemci gücünden tasarruf etmek için, hareket arası oluşturma işlemini kısıtlayın. Bu durum, işlemci işlemesinden,bellekten ve pil ömründen de tasarruf sağlar.Masaüstünde Flash içeriği üreten tasarımcılar ve geliştiriciler, uygulamalarında çok sayıda hareket arası kullanmaeğilimindedir. Düşük performanslı mobil aygıtlar için içerik üretirken hareket aralarının kullanımını en aza indirmeyeçalışın. Bunların kullanımının kısıtlanması içeriğin düşük katlı aygıtlarda daha hızlı çalışmasına yardımcı olur.
  38. 38. 34Son güncelleme 30/3/2011Bölüm 4: ActionScript 3.0 performansıVector sınıfının Array sınıfıyla karşılaştırılmasıMümkünse Array sınıfı yerine Vector sınıfını kullanın.Vector sınıfı, Array sınıfından daha hızlı okuma ve yazma erişimine olanak verir.Basit bir kıyaslama Vector sınıfının Array sınıfına kıyasla sağladığı faydaları gösterir. Aşağıdaki kod Array sınıfı içinbir kıyaslamayı gösterir:var coordinates:Array = new Array();var started:Number = getTimer();for (var i:int = 0; i< 300000; i++){coordinates[i] = Math.random()*1024;}trace(getTimer() - started);// output: 107Aşağıdaki kod Vector sınıfı için bir kıyaslamayı gösterir:var coordinates:Vector.<Number> = new Vector.<Number>();var started:Number = getTimer();for (var i:int = 0; i< 300000; i++){coordinates[i] = Math.random()*1024;}trace(getTimer() - started);// output: 72Örnek, vektöre belirli bir uzunluk atayarak ve uzunluğunu sabit olarak ayarlayarak daha etkin hale getirilebilir:// Specify a fixed length and initialize its lengthvar coordinates:Vector.<Number> = new Vector.<Number>(300000, true);var started:Number = getTimer();for (var i:int = 0; i< 300000; i++){coordinates[i] = Math.random()*1024;}trace(getTimer() - started);// output: 48
  39. 39. 35FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEActionScript 3.0 performansıSon güncelleme 30/3/2011Vektörün boyutu önceden belirlenmezse, vektör alanı azaldıkça boyut artar. Vektör boyutu her arttığında yeni birbellek bloğu ayrılır. Geçerli vektör içeriği yeni bellek bloğuna kopyalanır. Bu fazladan bellek ayırma ve veri kopyalamaişlemi performansa zarar verir. Yukarıdaki kod vektörün ilk boyutunu belirleyerek performans için en iyi halegetirilmiştir. Ancak kod korunabilirlik açısından en iyi hale getirilmemiştir. Korunabilirliği arttırmak için yenidenkullanılmış değeri bir sabitte depolayın:// Store the reused value to maintain code easilyconst MAX_NUM:int = 300000;var coordinates:Vector.<Number> = new Vector.<Number>(MAX_NUM, true);var started:Number = getTimer();for (var i:int = 0; i< MAX_NUM; i++){coordinates[i] = Math.random()*1024;}trace(getTimer() - started);// output: 47Mümkün oldukça, daha hızlı çalıştıkları için Vector nesnesi APIlerini kullanmaya çalışın.Çizim APIsiDaha hızlı kod çalıştırma için çizim APIsini kullanın.Flash Player 10 ve AIR 1.5, daha iyi kod çalıştırma performansı edinmenize olanak vermek için yeni bir çizim APIsisağladı. Bu yeni API oluşturma performansında bir iyileşme sağlamaz ancak yazmak zorunda olduğunuz kod satırısayısını önemli ölçüde düşürebilir. Daha düşük sayıda kod satırı daha iyi ActionScript çalıştırma performansısağlayabilir.Yeni çizim APIsi aşağıdaki yöntemleri içerir:• drawPath()• drawGraphicsData()• drawTriangles()Not: Bu açıklama 3B ile ilgili olan drawTriangles() yöntemine odaklanmaz. Ancak, bu yöntem yerel doku eşlemeyiişlediği için ActionScript performansını iyileştirebilir.Aşağıdaki kod çizilmekte olan her çizgi için uygun olan yöntemi açıkça çağırır:var container:Shape = new Shape();container.graphics.beginFill(0x442299);var coords:Vector.<Number> = Vector.<Number>([132, 20, 46, 254, 244, 100, 20, 98, 218, 254]);container.graphics.moveTo ( coords[0], coords[1] );container.graphics.lineTo ( coords[2], coords[3] );container.graphics.lineTo ( coords[4], coords[5] );container.graphics.lineTo ( coords[6], coords[7] );container.graphics.lineTo ( coords[8], coords[9] );addChild( container );
  40. 40. 36FLASH PLATFORM IÇIN PERFORMANSI EN İYILEŞTIRMEActionScript 3.0 performansıSon güncelleme 30/3/2011Aşağıdaki kod daha az kod satırı çalıştırdığından dolayı önceki örnekten daha hızlı çalışır. Daha karmaşık bir yol,drawPath() yönteminin kullanımından sağlanacak daha iyi performans demektir:var container:Shape = new Shape();container.graphics.beginFill(0x442299);var commands:Vector.<int> = Vector.<int>([1,2,2,2,2]);var coords:Vector.<Number> = Vector.<Number>([132, 20, 46, 254, 244, 100, 20, 98, 218, 254]);container.graphics.drawPath(commands, coords);addChild( container );drawGraphicsData() yöntemi benzer performans iyileşmeleri sağlar.Olayı dıştan içe ve içten dışa tetiklemeOlay işleyicilerini en küçük hale getirmek için olayı dıştan içe ve içten dışa tetikleme işlevini kullanın.ActionScript 3.0’daki olay modeli, olayı dıştan içe ve içten dışa tetikleme kavramlarına giriş niteliğindedir. Bir olayıniçten dışa tetiklenmesinden faydalanmak ActionScript kod çalışma zamanını en iyileştirme konusunda size yardımcıolabilir. Performansı arttırmak için birden çok nesne yerine tek bir nesneye olay işleyicisi kaydedebilirsiniz.Örnek olarak, kullanıcının elmaları yok etmek için üzerlerini en hızlı şekilde tıklatmak zorunda olduğu bir oyunyarattığınızı düşünün. Oyun tıklatılan her elmayı ekrandan çıkarır ve kullanıcının puanını yükseltir. Her bir elmatarafından gönderilen MouseEvent.CLICK olayını dinlemek için aşağıdaki kodu yazmak isteyebilirsiniz:const MAX_NUM:int = 10;var sceneWidth:int = stage.stageWidth;var sceneHeight:int = stage.stageHeight;var currentApple:InteractiveObject;var currentAppleClicked:InteractiveObject;for ( var i:int = 0; i< MAX_NUM; i++ ){currentApple = new Apple();currentApple.x = Math.random()*sceneWidth;currentApple.y = Math.random()*sceneHeight;addChild ( currentApple );// Listen to the MouseEvent.CLICK eventcurrentApple.addEventListener ( MouseEvent.CLICK, onAppleClick );}function onAppleClick ( e:MouseEvent ):void{currentAppleClicked = e.currentTarget as InteractiveObject;currentAppleClicked.removeEventListener(MouseEvent.CLICK, onAppleClick );removeChild ( currentAppleClicked );}

×