Ir para conteúdo
Fórum Script Brasil
  • 0

Poder De Otimização De Códigos E Funções


[ GuTo ]

Pergunta

Olá pessoal,

Talvez alguns não gostem desta minha iniciativa, porém, como o intuito do fórum é ajudar o pessoal, e o meu desejo por programar e ajudar de uma forma diferente do comum voltaram, resolvi criar este tópico.

Aqui vou pegar funções encontradas aqui no fórum ou de outros (se for de outro, vou copia-la para o post juntamente), onde vou citar onde elas estão com um link, mostrar a minha versão delas, a diferença do tamanho em bytes/kbytes e mais algum comentário se necessário.

Terão características tais:

- códigos preferencialmente em letras minúsculas (lowercase semantic web smile.gif)

- organização de código

- declaração das variáveis a serem usadas

- redução do tamanho do código

- deixar o código semântico, ou seja, que tudo condiga com o que vai armazenar e processar

- fazer com que o script ganhe perfomance, ou seja, seja processado de maneira mais rápida

- em alguns códigos posso juntar trechos pequenos usando o ":" (dois pontos), como no php e js é usado o ";" (ponto-e-vírgula)

- não será feita nenhuma validação para conferir se foi passado algum parâmetro/argumento para funções. isto fica à parte da aplicação ou posso comentar logo depois, mas não será incluído na avaliação

- não está sendo contado as linhas de comentário no início dos códigos e funções. peço também que sejam deixados os créditos ao autor.

O intuito é mostrar o poder de saber-se usar o que se tem em mãos, dominar a linguagem, mostrar como vocês podem melhorar os códigos de vocês.

É um tópico onde pretendo ajudar iniciantes, intermediários e até avançados em programação geral.

Não tenho interesse em "aparecer" aqui ou menosprezar códigos de outros colegas desenvolvedores, apenas ajudar e mostrar uma alternativa para solução.

Lembrando que para se chegar a algum lugar, podemos usar caminhos diferentes.

Comentários são bem vindos, porém, alguma dúvida ou discussão, peço encarecidamente que fosse aberto um novo tópico, ok?

Só para podermos neste tópico termos um foco único.

Desde já agradeço a atenção e compreensão de todos.

Abraços!

Obs: caso tenha algum erro em alguma função, por favor avise-nos. Não queremos dar informações/soluções incorretas aqui. smile.gif

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Função antiga: http://scriptbrasil.com.br/forum/index.php...c=17305&st=105#

Tamanho antigo: 1500bytes (1,46kb) em 62 linhas como apresentado

Tamanho novo: 857bytes em 31 linhas

Redução de tamanho: 643bytes (42,86%)

<%
'autor: antonio augusto andré silveira
'email: gutoasp[at]gmail[dot]com
'data: 7 de março de 2006
'todos os direitos reservados ao autor sob lincença creative commons
'http://creativecommons.org/licenses/by-nc-sa/2.5/
function signo(data)
	dim d,m: d=day(data): m=month(data)
	if m=1 AND d>20 OR m=2 AND d<19 then
  signo="Aquário"
	elseif m=2 and d>18 OR m=3 and d<20 then
  signo="Peixes"
	elseif m=3 and d>19 OR m=4 and d<21 then
  signo="Áries"
	elseif m=4 and d>20 OR m=5 and d<21 then
  signo="Touro"
	elseif m=5 and d>20 OR m=6 and d<21 then
  signo="Gêmeos"
	elseif m=6 and d>20 OR m=7 and d<22 then
  signo="Câncer"
	elseif m=7 and d>21 OR m=8 and d<23 then
  signo="Leão"
	elseif m=8 and d>22 OR m=9 and d<23 then
  signo="Virgem"
	elseif m=9 and d>22 OR m=10 and d<23 then
  signo="Libra"
	elseif m=10 and d>22 OR m=11 and d<22 then
  signo="Escorpião"
	elseif m=11 and d>21 OR m=12 and d<22 then
  signo="Sagitário"	
	elseif m=12 and d>21 OR m=1 and d<22 then
  signo="Capricórnio"
	else signo="Não existe"
	end if
end function
%>

Comentários:

1 - Declarei as variáveis usadas dentro da função. Isto é importante para não termos conflitos com variáveis globais

2 - Na comparação com os dias, era usado o operador >= (maior OU igual) e também usado o operador <= (menos ou igual).

O que isso gera? Duas comparações, o que leva mais tempo.

Ex.:

se uma pessoa é menor de 18 anos de idade, não pode dirigir. (pc processa assim: idade<18 )

porque eu diria assim: "se uma pessoa é menor OU igual a 17 anos de idade, não pode dirigir."? (no código vai assim: pessoa<=17 ... mas é processado assim: idade<17 OR idade=17)

Percebem?

Imagina isso num loop de 1bilhão de registros

Suponhamos que cada comparação demore 1 segundo para ser processada.

Você demoraria 2x mais.

Ao invés de 1bilhão de segundos, demoraria 2bilhões de segundos para processar tudo.

É muito tempo perdido. Então facilitei tudo na função nesta questão.

3 - estavam sendo feitos duas condições (2 "if's") para identificar que signo era, através do dia e mês. Coloquei isso tudo de maneira simples dentro de uma condição ("if") apenas. (reparem no código antigo)

Espero que tenham gostado da primeira apresentação e se impresionado com a mudança.

Muitos poderam dizer que para uma função pequena, nem precisava essa "função" toda... mas imagina todos estes pequenos detalhes não sendo cuidados em sites gigantes?

O orkut deve ter uns bons códigos de asp.net por trás. O que ele deixa a desejar é no código html e css. Daria pra ser bem menor o tempo de processamento das páginas. A largura de banda (bandiwidth) poderia ser muito menor. Eles poderiam poupar gigas ou até terrabytes de transferência de dados por mês. Imagina, aquele site tem milhões de uusários. Imagina todos ou metade deles acessando o orkut ao mesmo tempo? blink.gif

Bem, não vou me extender aqui... Mas que fique claro que estes detalhes fazem muita diferença.

Até mais.

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Jony!

Espero que mais pessoas gostem.

Vamos para a segunda função? biggrin.gif

Função antiga: http://forum.wmonline.com.br/index.php?showtopic=120936#

Tamanho antigo: 541bytes em 19 linhas como apresentado

Tamanho novo: 278bytes em 7 linhas

Redução de tamanho: 263bytes (48,61%)

<%
'autor: antonio augusto andré silveira
'email: gutoasp[at]gmail[dot]com
'data: 20 de março de 2006
'todos os direitos reservados ao autor sob lincença creative commons
'http://creativecommons.org/licenses/by-nc-sa/2.5/
function idade(dB)
	if NOT isDate(dB) then idade="NaN": exit function
	dim dA, yA, yN: dA=date: yA=year(dA): yB=year(dB): idade=yA-yB
	if (month(dA)>month(dB)-1 AND day(dA)<day(dB)) OR month(dA)<month(dB) then idade=idade-1
end function
%>

Comentários:

Nesta função, fiz um tratamento só para verificar se a data de aniversário, argumento passado para a função (dateBirthday), é realmente um dado do subtipo Date.

Dependendo de sua aplicação, nem é necessário e você pode até apagar esta linha do código.

Foi aplicado apenas uma boa lógica de matemática nesta questão e o bom uso da linguagem. Nós devemos saber usar a ferramenta que temos em mãos.

Já vi muitas funções para calcular idade, mas todas enormes.

Reparem na mudança daquela para esta. Muito mais simples.

Percebam que na função antiga, os dados estavam sendo tratados como string, aí por isso foi usado o recurso da função íntrinseca Mid().

Já na minha, tratamos o argumento como uma data mesmo, assim então, otimizando código.

Até mais

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...