Jump to content


Photo

Código Deixando Site Mais Pesado


  • Faça o login para participar
3 replies to this topic

#1 mugambo

mugambo

    Turista

  • Usuários
  • 27 posts
  • Sexo:Masculino
  • Localidade:Curitiba

Posted 19/03/2009, 22:02

Dae!

Comecei há pouco tempo a usar mais actionscript para fazer as animações dos sites, a maioria com tween. Porém, reparei que o site ficou bem mais pesado dos que eu fazia anteriormente quase SEM programação para os movimentos, mesmo sem usar nenhuma imagem. O site é todinho vetorial.

Queria saber como fazer as animações com programação (Tween) sem que ele fique muito pesado, já que gosto dos Tweens pelos movimentos em si, e pela facilidade de alteração.

Não usei Classes.. será que isso resolveria?
PS: Se alguém tiver um tutorial de classes, seria legal. Não faço idéia de como usar.

Abraços!
"Guerras Santas são guerras para descobrir quem tem o amigo imaginário mais legal."

#2 Pedropauloalmeida

Pedropauloalmeida

    Fale ao motorista somente o indispensável

  • Usuários
  • 1376 posts
  • Sexo:Masculino
  • Localidade:Santo André SP

Posted 20/03/2009, 14:40

Existem aí duas coisas.

1. Conceitos elementares de programação(flash) e garbage colector.
Uma delas: a animação via código é muito mais leve do que a animação na timeline. Prova disso é que você pode fazer movimentações com centenas de objetos com código sem travar o player (coisa que via timeline isso já seria impossivel). Com o uso de AS 3 esse número vai fácil pra casa dos milhares.

Então das duas uma: ou você está usando a classe da forma errada (sem tratar erros ou sem encerrar algum looping, etc) ou há conflito de código no seu site que não envolve exatamente a animação. Pra isso você precisa conferir todos os eventos (principalmente aqueles do tipo 'onEnterFrame' ou 'setInterval' que ficam executando 'eternamente' e consumindo memória). Ah! Quando os projetos em flash começam a "crescer" uma coisa que você precisa tomar cuidado é com objetos, variáveis, eventos que ficam parados na memória pois ainda possuem um vínculo com outros objetos, impedindo que o garbage colector realize seu trabalho adequadamente. Exemplo: você tem um "preloader" que ficou lá no stage, com um looping onEnterFrame executando. Ele pode não estar mais visível, mas está na AVM, consumindo memória e processamento. Lembre-se de limpar todos os eventos associados a um movieClip antes de remove-lo, senão ele sai do stage, mas seus dados continuam na memória, pois o garbage colector só coleta aquilo que não tem mais referência de eventos associados a ele.

2. Programação Orientada a Objetos.
As famosas "classes" em flash são, na verdade, uma forma de olhar a programação. A programação orientada a objetos foi concebida para fazer com que o desenvolvimento de software fosse mais parecida com o mundo real. Sugiro que você procure conhecer os conceitos de programação orientada a objetos para então aplicar esses conceitos no flash. Depois de fazer isso, você vai mudar completamente a forma de olhar o flash e seus objetos. Vai deixar de produzir "scripts" e vai produzir código pra valer. Vai construir componentes, API´s e soluções robustas em flash. Cada movieClip seu vai ter a sua própria "classe" - que é a descrição em código de todas as propriedades, atividades, comportamentos e eventos daquele movieClip. De como ele vai se relacionar, se comunicar e interagir tanto com o usuário e com o resto do seu flash.

Se você quiser uma ajuda mais "específica" no seu código, poste um trecho, que, no que for possível e no alcance de meu pequeno conhecimento, tentarei te ajudar.

Abraços.

pp

#3 mugambo

mugambo

    Turista

  • Usuários
  • 27 posts
  • Sexo:Masculino
  • Localidade:Curitiba

Posted 20/03/2009, 16:59

Hmmmm!! Boas dicas!
Desculpe a minha ignorância, mas, o que seria o garbage colector? Eu precisaria mexer nisso ou é algo automático? hehe.. sem noção alguma!
E outra coisa.. como eu interruperia o processo de um onEnterFrame por exemplo? Pode ter sido isso mesmo.

Valeu demais aí pelas dicas!
"Guerras Santas são guerras para descobrir quem tem o amigo imaginário mais legal."

#4 Pedropauloalmeida

Pedropauloalmeida

    Fale ao motorista somente o indispensável

  • Usuários
  • 1376 posts
  • Sexo:Masculino
  • Localidade:Santo André SP

Posted 23/03/2009, 16:58

Mugambo.

Garbage Colector é um "robô" do flash player que, de tempos em tempos, vai fazendo uma "varredura" na memória do computador utilizada pelo flash player. É ele que identifica objetos que não estão mais sendo usados, variáveis inúteis, etc. Ele então limpa a memória, disponibilizando aquele espaço para novos dados.

Quando você mantém no seu código referências esquecidas a valores ou eventos "inúteis" o garbage colector não consegue executar sua tarefa adequadamente. Ele não elimina informações a não ser que ele julgue ser 100% seguro eliminá-las. Para isso, você precisa ter uma grande atenção aos eventos e propriedades de todos os seus objetos.

No caso de um looping onEnterFrame, você usa o operador "delete" que vai parar o processo. Um exemplo abaixo:

var soma:Number = new Number();
this.onEnterFrame = function():Void {
   soma += 1;
   // agora eu posso verificar se, a soma for igual a 100, ele executa uma função qualquer:
   if (soma == 100) {
	   // chamo a função:
	  funcaoQualquer();
	 // O que não posso esquecer, agora que já chamei a função, é parar o looping, senão ele continua a executar eternamente:
	 delete this.onEnterFrame;
   }
}

É isso.

Abraços.

pp




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq