Pergunta

Moose é um quadro objeto fantástico. O problema é que, tomados em conjunto com as suas dependências, é muito grande. Nossa profiling indica que na nossa plataforma, simplesmente carregando Moose terã uma segunda sobrecarga 5-6 em scripts de aplicativos CGI não persistentes. Isso simplesmente não é aceitável para estas aplicações one-off.

Por outro lado, quando estamos usando um sistema de processo persistente (como FCGI), essa sobrecarga de inicialização é eliminado (ou melhor, incorrido apenas uma vez), e está tudo bem. O problema que temos é que nós não podemos garantir que todo o nosso código será sempre executado em um processo persistente.

Nós investigamos usando mouse como um limitado recurso de drop-in-substituição para Moose , mas como se vê (conforme mencionado em esta resposta ) isso não é uma opção viável. Quaisquer bibliotecas que escrevemos para trabalhar com Moose vai deixar de trabalhar com mouse em formas sutis, mas importantes. E nós realmente não quer desembolsar todos os nossos módulos para que possamos apoiar tanto Moose em um ambiente persistente e mouse para CGI "vanilla".

Tendo em conta que, temos as seguintes opções:

  1. Fork nossa in-house módulos para trabalhar com qualquer Moose ou Mouse, conforme o caso. (Eca!)
  2. desenvolver Somente nossos módulos para FCGI / Moose . Não suportam "vanilla" CGI mais. Se tivermos de scripts de escrita que não são persistentes, eles não serão capazes de alavancar nossos módulos in-house.
  3. Não use qualquer Moose ou mouse , mas algum outro quadro objeto.

Qual é a melhor opção? Estamos inclinando-se para 2 agora, e vamos apenas chupa-lo se tivermos que obter algo executado como um CGI baunilha. Como cerca de outras estruturas? Existe alguma coisa mais leve que deveríamos estar olhando?

Foi útil?

Solução

A minha preferência seria a cair suporte CGI baunilha. FCGI hospedagem é realmente barato estes dias e não há nenhuma razão para cedermos ao CGI baunilha (IMO), porque ele só reforça a opinião de que Perl é lento. Mas se você não pode evitá-lo, então você pode usar algo como Objeto :: minúsculo . Mas se você precisa Roles, restrições meta-programação e todos os outros beleza que Moose fornece, você está fora de sorte a menos que você deixar cair CGI baunilha.

Outras dicas

Você poderia escrever um aplicativo de servidor back-end usando Moose, e em seguida, escrever muito pequenas, scripts CGI simples que consulta o back-end.

+-------+    +--------------+
| Small |===>|  Persistent  |
|  CGI  |<===| Moose Server |
+-------+  ^  +--------------+
           |
         Socket
       Connection

Este é mais ou menos o que FCGI faz, então ele pode fazer mais sentido para FCGI uso justo.

Por outro lado, pode haver benefícios reais em ter um servidor back-end não-cgi que pode ter interface abstrata QUALQUER acrescentada conforme necessário.

Por exemplo, se você usar sockets TCP (ou UDP), então você pode ter uma aplicação desktop nativa atingiu o mesmo back-end como seu CGI.

O que o melhor ajuste é no seu caso realmente depende da sua situação específica. Dependendo dos detalhes da situação, eu posso me ver de decidir usar essa abordagem ou qualquer uma das abordagens a delinear acima.

A minha sugestão é ir com a opção # 2 e, em seguida, nos ajudar a refatorar Moose para que CGI torna-se viável. Frew está actualmente a trabalhar no conjunto de testes Moose, a fim de permitir que o projeto MooseX :: Antlers o que deve reduzir a maior parte da sobrecarga que meios Moose é inutilizável para um ambiente CGI.

Matt Trout (MST), o homem atualmente atrás MooseX :: Antlers, manifestou o desejo de ser capaz de executar aplicativos em um ambiente CGI, se necessário. Eu sugiro vara com FCGI para agora e importuná-lo para o que você pode fazer para ajudar!

Jonathan Rockway escreveu sobre APP :: Peristent (que, curiosamente , não está na CPAN) há alguns meses. Eu nunca usei isso, mas baseado em sua acima ligada post, parece fornecer uma arquitetura cliente-servidor bastante transparente que você poderia envolver o processamento real de seu CGI em.

A idéia básica do App::Persistent , pperl , SpeedyCGI e provavelmente alguns outros é que o processo de compilação seu programa Perl para código de byte é feito apenas uma vez e algum tipo de cache é usado em invocações depois disso. Desde Moose é dito ter bastante uma penalidade de tempo de compilação, eu ia tentar essa abordagem em primeiro lugar.

Eu tenho usado com sucesso pperl para sorteio de MRTG gráficos em um sistema antigo por volta de 2001. o programa Perl foi executado para cada gráfico que foi bastante uma sobrecarga -. isso provavelmente comparável ao seu cenário CGI

Há também uma outra opção -. PPerl

Eu nunca usei, mas definitivamente parece interessante. E a pessoa que o escreveu (Matt Sergeant aka de transmissão.) - que lhe dá praticamente garantia de código de boa qualidade

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top