Salut,

> Je viens de lire l'article sur l'applicationDomain, un grand merci.
> Je sais que zwetan a déjà répondu à cette question au travers d'un  
> précédent post en expliquant qu'il utilise un swc, mais en dehors du  
> fait qu'il faille charger le swf, quel est l'intérêt du swc sachant  
> qu'il augmentera la taille du swf final ?
> Est-ce que l'intérêt se trouve dans le workflow ?
> En utilisant le même applicationDomain le swf s'utilise au final aussi  
> simplement que le swc, non ?
> Bon dev à tous
>

alors dans l'ordre

le code est d'abord compilé en ABC (ActionScript ByteCode)
puis selon la cible

1) il est compilé vers un SWF
    - ajout des headers propre au SWF
    - ajout des symboles graphics / movieclip / etc.

    et ce SWF devras etre completement chargé en mémoire poru aceder
au code

2) il est compilé vers un SWC

    un SWF c'est comme un SWF, mais avec une difference de structure,
c'est come un zip

    SWC
        |_ library.xml
        |_ library.swf

    et une grosse difference qui est que on est pas obligé d'inclure
ou de loader tout le SWC piur en n'utiliser
    qu'une petite partie

   tu peux tres bien avoir un SWC de 50Mo mais n'utiliser en fait que
5Ko de bytecode
   par rapport aux classes que tu veux utiliser dans ton SWF final


quelques ajouts, avec Flex 4, Adobe ajoutera le asdoc dans le SWC,
donc ils seront encore plus gros,
mais pareil ca ne veut pas dire que tout le SWC sera inclu dans le SWF
final, uniquement une partie ou tout le bytecode.


Au niveau du workflow

utiliser Flex Builder, Flash Develop, Eclipse+FDT,
c'est tres bien pour ecrire du code, mais c'est tres pourri pour faire
du design
donc un workflow parmis d'autres (mais qui est pas mal)
est d'utiliser

1) le Flash IDE
    tu definis tes symbols, tes anims etc.
    le stage reste vide, tout est dans la librairie

    et tu coches par symbol
    [x] exporter sur la 1ere frame
    [x] exporter pour actionscript

   en donnant un nom d'export

   si ton appli est dans com.monappli
   tu peux decider q ue le symbol mcBackground sera exporté en
com.monappli.ui.BackgroundUI

  au lieu d'exporte un SWF, dans les params d'exports tu coches en
plus
  [x] exporter un SWC

2) dans FB / FD / FDT etc.

    tu ajoutes les SWC généré plus haut dans tes libs

    et cela te permet de faire des choses comme par ex

    package com.monappli.ui
    {
        public class background extends BackgroundUI
        {
            //...
        }
    }

les assets du SWC se comportent comme des classes meme si tu les as
pas defini dans le code mais dans le FLA.


c'est UNE maniere de faire parmis d'autres, mais perso je la trouve
tres pratique
le FLA est ouver peut-etre 1 fois ou 2 pour regenerer le SWC

et le code depuis Flex Builder peut etre compilé des centaines de fois
tout en utilisant ces jolis assets fait dans Flash



alors le SWC, il faut le considéré presque comme un SWF, mais plus
comme un "reservoir"
de classes et symbols, que l'on peut utiliser ou non

et idealement on veut separer ces symbols et classes

en general j'ai
/libs
   |_ assets.swc //venant du FLA
   |_ nom_de_la_lib.swc //venant de code AS compilé avec compc


si j'ai une lib "toto" et que je dois travailler dessus en meme temps
que l'appli en cours,
cad que je dois modifier le code source constamment

j'aurais plutot

/lib
  |_ toto
        |_ FooBar.as
/libs
   |_ assets.swc

et des que la lib est stabilisee

/libs
   |_ assets.swc
   |_ toto.swc


et le ApplicationDomain n'a rien a voir avec tout ca :D

dans l'article posté précédemment je parle de chargement de modules
SWF externes

cad que ca, ca se passe au runtime, et ca donne plutot ce genre de
structure


       monappli.swf  50K
               |_ fonts.swf  20K
               |_ login.swf  80K

je pourrais tres bien tout compilé dans un gros SWF (de 150K),
mais voila c'est une application dit modulaire

cad que le SWF principal monappli.swf ne veut pas embeddé les fonts ou
une font,
il veut charger une des fonts dynamiquement

par ex:

if( lang == "en" )
{
    load( "en_arial.swf" ); //SWF de 50K
}
else if( lang == "jp" )
{
   load( "jp_arial.swf" ); // SWF de 2Mo
}


ou autre exemple, si la page HTML contient deja une session ID, on
retrouve les infos
de login de l'utilisateur et on le met "deja loggé", et on a pas
besoin de loader "login.swf"


les explications sur l'ApplicationDomain servent principalement a
gerer ce genre de choses

par ex une font dans un SWF externe, pour pouvoir faire un
Font.registerFont() il faut absoluement
faire un "import loading", si la class se retrouve definie en
isolation on ne pourra pas la reutiliser
dans toute l'appli

idem pour un module de login, comme login.swf, la l'approche est
differente,
ce SWF est chargé en complete "isolation" et il communique avec le SWF
principal
par le biais de shared events ou de local connection,
on n'isole pas completement mais on isole suffisamment
pour qu'il n'y ait pas de collision avec certaines classes

cela permet au SWF login.swf d'utiliser pureMVC as3corelibs etc.
sans que ces classes viennent polluer la memoire de monappli.swf :D

mais en gros les "modules" ca permet de deleguer le boulot de chaque
dev sur son propre module,
et que tout puisse marcher ensemble meme si les styles de coding
different.

enfin voila, j espere que je ne rends pas tout ca inbitable ;)

zwetan




--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "FCNG" de 
Google Groupes.
 Pour transmettre des messages à ce groupe, envoyez un e-mail à 
l'adresse [email protected]
 Pour résilier votre abonnement à ce groupe, envoyez un e-mail à 
l'adresse [email protected]
 Pour afficher d'autres options, visitez ce groupe à l'adresse 
http://groups.google.com/group/FCNG?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à