O tempo de inicialização do aplicativo Web é realmente tão importante?


11

Teve uma conversa com alguém sobre como adicionar algum código de inicialização na inicialização do aplicativo e ele reclamou disso, causando um aumento no tempo de inicialização. Ele não podia realmente indicar uma razão (pressentimento ou algo assim, não sei). Este não é um aplicativo de uso pesado e começa em cerca de um minuto, implementamos algumas vezes por ano.

Lembro-me de ler esses conselhos sobre questões sobre SO há algum tempo, pessoas aconselhando a inicialização na inicialização, em vez de acessar a página com o selo "se você puder pagar a penalidade".

Trabalhei com aplicativos da Web que começaram de 30 segundos a 4-5 minutos, mas uma vez on-line, eles foram incríveis.

Então o que estou perdendo? A menos que seja uma aplicação vital como ... não sei ... para o mercado financeiro, aplicações médicas, exploração espacial etc., é realmente importante o tempo de inicialização?

PS: Estou me referindo estritamente a aplicativos da Web, aplicativos de desktop provavelmente começarão muito rápido.


Existe um requisito não funcional definido para a inicialização do aplicativo ou isso é apenas uma discussão em desenvolvimento?
StuperUser

@StuperUser: sem necessidade, apenas uma discussão até agora.
JohnDoDo 11/11

Na verdade, existe um site de experiência do usuário em que isso seria melhor solicitado.
Cyclops

@ Cyclops: Na verdade, estou mais interessado nos motivos do lado do servidor, não do lado do usuário.
21711 John11Do 13:11

Respostas:


18

Pode ser um grande fator durante o desenvolvimento: se sua plataforma não suportar a alteração de código em um aplicativo em execução, o tempo de inicialização se tornará parte do seu ciclo de feedback e, aí, até 30 segundos são dolorosos e uma ameaça à produtividade.

Para o ambiente de produção, isso realmente não importa; um pouco de tempo de inatividade é aceitável e 5 minutos ainda não são muito, ou não é, e você precisa implementar algum tipo de alternância ao vivo.


Sim, eu pensei muito sobre o ciclo de desenvolvimento, mas não é como mudar uma vírgula, implantar, alterar um nome de variável, implantar etc. Eu implanto pessoalmente no desenvolvimento, no máximo, 10 vezes / dia. Uma inicialização de um minuto ou 1,2 não faz muita diferença.
JohnDoDo 11/11/11

7
@JohnDoDo: Quanto disso é realmente um fluxo de trabalho natural e quanto habitualmente evita uma implantação demorada? Um rápido ciclo de feedback pode ajudar enormemente a produtividade. Às vezes, é necessário fazer pequenas mudanças incrementais e ver o resultado imediatamente. Há 50 anos, as pessoas escreviam programas em papel, submetiam-nos a um operador e obtinham um resultado impresso no dia seguinte - às vezes apenas um erro do compilador. Isso não parece uma maneira terrivelmente ineficiente de trabalhar com você? Bem, para muitos programadores, suas 10 implantações por dia parecem exatamente assim.
Michael Borgwardt 11/11

1
Se possível, avalie a opção de executar um init "simulado" ou de ter as estruturas serializadas em disco com dados de teste para acelerar os tempos de inicialização durante o desenvolvimento.
Vinko Vrsalovic 11/11

Concordo com o Vinko, existe uma maneira de desativar as caras funções init () ao criar no modo Debug? Não se preocupe se o que você está inicializando lhe fornecerá resultados diferentes no Dev e na Produção.
AndyMcKenna

4

Acredito que esse seja o caso quando o famoso princípio dialético de Hegel de transição da quantidade para a qualidade realmente funciona.

Veja bem, o tempo sempre é importante. Concordo com as palavras de Michael Borgwardt sobre a importância da construção rápida durante o desenvolvimento / teste, mas insisto que (pode ser de alguma outra maneira) também é muito importante para a produção.

Cada desenvolvedor que implantou algum código incorreto na produção sabe que o hotfix fornecido em 5 minutos e em 1 minuto é muito, muito diferente.


2

A verdadeira questão é se o aplicativo funcionará sem a inicialização. Temos novos contratados que ficam obcecados com "desempenho", minha resposta é que não me importo com a rapidez com que você produz resultados errados. IMHO cortando cantos, alterando algoritmos porque "será mais rápido dessa maneira", e outras grandes idéias apenas introduzem bugs.

Se a inicialização for necessária, faça-o. Quanto tempo será desperdiçado quando os usuários finais obtiverem resultados errados, eventualmente descobrir que o aplicativo Web está errado, ligar e reclamar e você precisará voltar e depurar / corrigir / testar / reimplementar? Agora pergunte ao seu colega como foi economizado tempo. (e aposto que os núcleos dos servidores estão 99% ociosos)


2

Esta pergunta não pergunta sobre nenhuma plataforma em particular. Existem plataformas nas quais o tempo de inicialização é realmente muito importante.

Por exemplo, no Google App Engine; se sua página não estiver sendo acessada (ou melhor, estiver sendo acessada com menos frequência do que outro aplicativo no mesmo nó), ela será descarregada ocasionalmente.

Portanto, se você está nos 99% inferiores da frequência de acesso ao site, o tempo de inicialização é o tempo de acesso; seu aplicativo está sendo reiniciado em quase todos os acessos. se você estiver no top 1%, seu aplicativo está iniciando em muitos nós e, embora muitos acessos à página retornem de uma instância já iniciada, alguns ainda não o serão e, portanto, você terá tempos de acesso longos e intermitentes .

O mesmo ocorre em muitos outros ambientes de hospedagem. Vazamentos em bibliotecas de terceiros, ou mesmo em seu próprio código que simplesmente escaparam à descoberta, podem significar que a única maneira confiável de executar seu serviço da Web é fazê-lo recarregar a cada tantas solicitações (geralmente entre 100 e 10.000), e assim o tempo de inicialização é pago com frequência. O uso desse padrão é aceitável quando um aplicativo está com vazamento, mas é iniciado rapidamente; não é viável quando o aplicativo leva mais do que alguns segundos para iniciar.


1

Você está correndo o risco de seu aplicativo ser considerado abaixo do padrão ou, pior ainda, sua capacidade de desenvolvimento. Agora, esse aplicativo pode estar economizando tanto tempo para alguém e / ou fazer uma tarefa tão necessária que os usuários agradecidos podem olhar além da longa inicialização.

Pode levar mais tempo para programar de maneira a carregar o aplicativo com preguiça, mas apenas as partes interessadas podem determinar se vale a pena. Eu tive um relatório que foi executado em 55 segundos. e chegamos a 35. Ninguém percebeu. Embora eu tenha passado o dobro do tempo entre 35 e 18, todos perceberam e ficaram agradecidos e impressionados. Passar de 5 a 3 minutos para um aplicativo usado algumas vezes por ano não é grande coisa. Os usuários terão menos tempo para gastar no Facebook ou tomar café.

Percepção é a chave. Se a composição não estiver satisfeita com as equipes de desenvolvimento em geral e com este aplicativo especificamente, convém criar uma boa vontade e acelerar o processo.


Entretanto, o tempo de inicialização do aplicativo da Web não deve afetar os usuários normais. O outro desenvolvedor está irritado porque ele reinicia o aplicativo pessoalmente várias vezes ao dia como parte do desenvolvimento regular.
AndyMcKenna
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.