Yui e carregador de mudanças para 3.4.0
01 de julho de 2011 at 6:34 pm por Dav Vidro | Em Desenvolvimento e Desempenho | 10 ComentáriosEm 3.4.0 começamos o processo de mudança da lógica alguma Carregadeira em torno, não só para torná-lo mais competitivo, mas para torná-lo mais robusto e fácil de usar em outros lugares (como no servidor). Nós estaremos lançando mais alterações em futuras revisões, mas eu queria levar algum tempo e explicar o que foi alterado, por isso foi mudado e como isso pode afetar os desenvolvedores. Para a maioria dos casos de uso, os desenvolvedores irão notar nada de diferente, exceto que as coisas são um pouco mais rápido e downloads de sua exigência é um pouco menor.
Arquivo Semente
A primeira coisa que eu quero abordar é o arquivo de semente YUI. Nas versões anteriores do YUI, o nosso arquivo de semente era muito pequena e não conter Loader ou qualquer dos seus meta-dados. Descobrimos que no 90% de casos de uso deste não era tão alto desempenho como esperávamos. O usuário normal inclui o arquivo de sementes, em seguida, solicita os seus módulos, que por sua vez significa que a semente precisa primeiro buscar Loader, em seguida, calcular todas as suas dependências, em seguida, buscar todos eles. Hoje nós sentimos que este pedido http extra é a coisa errada a fazer, então o arquivo de semente nova norma contém Loader e sua meta-dados. Sim, isso fará com que o pedido inicial um pouco maior, mas ele vai fazer o carregamento de módulos que muito mais rápido, pois todos os seus meta-dados são requisitos agora já na página.
Se você quiser usá-lo da maneira antiga, você pode simplesmente incluir o arquivo de semente yui-base em seu lugar. Ele contém tudo o que é necessário para fazer YUI executado em modo stand-alone além de que contém a capacidade de buscar Loader em demanda. Se você precisar de dependências ainda mais sutis, criamos um arquivo semente yui-core que é exatamente o que a semente yui-base antiga era.
/ Build / yui / yui-min.js / / O YUI + Carregador / build / yui-base / yui-base-min.js / / O YUI Velha, com carregador de buscar apoio / build/yui-core/yui-core- min.js / / Old yui-base sem carregador de buscar apoio Deve notar-se que estes URLs são diferentes do que o URLs anterior. Qualquer pessoa que estava usando o yui/yui-base.js arquivos precisam repoint-los para yui-core/yui-core.js . Se você quiser o antigo modo de carregar a semente e buscar Loader, você usaria o yui-base/yui-base.js arquivo semente.
O raciocínio outro para essa mudança é o nosso roteiro para fazer YUI executado em tantos lugares quanto possível. O arquivo de origem plus antigo carregador em uma única solicitação de combinação servidor está tudo muito bem se você tiver um servidor de combinação disponível na sua aplicação. Mas o que aconteceu no servidor? Ou em um aplicativo offline em um dispositivo móvel? Estes lugares precisam minimizar o acesso ao arquivo e ainda obter a informação de que necessitam.
Rollups
A próxima coisa que mudou foi a remoção rollups do sistema e falta allowRollup para false no carregador config. O que isso significa para você? Bem, espero que nada. Antes de me explicar o impacto da mudança, deixe-me explicar o raciocínio por trás dele. A razão principal é, novamente, o desempenho, juntamente com a entrega de carga útil. Veja este exemplo:
Módulo A: exige um evento, evento-b
Módulo B: exige-c evento, evento-d
Quando você pede tanto, a lógica de conjunto antes de 3.4.0 para determinar que você deve obter o pacote cumulativo de evento. O que realmente significava que você estava começando:
event.a, event.b, event.c, event.d, event.e, event.f, event.g, evento.h
Você acabou com mais da sua página do que você realmente necessário. Ao desligar o apoio cumulativo, YUI irá agora pedir apenas o que você realmente solicitado e nada mais. Na maioria dos casos, você não vai notar isso. Os desenvolvedores do módulo, pode se deparar com uma situação onde as coisas que deram certo no passado pode não funcionar agora. A razão para isto é que eles efectivamente trabalhadas, por acidente antes. Deixe-me usar um exemplo do mundo real: Dial.
Em 3.3.0, Dial requereu isto:
requer: [
'Widget',
'Dd-drag',
'Substituto',
'Evento mouseenter',
"Transição",
'Intl'
]
Para a maior parte, Dial trabalhou em 3.4.0, no entanto o suporte ao teclado não funcionou. Depois de fazer algumas investigações simples, descobriu-se que o apoio cumulativo estava realmente pedindo o pacote cumulativo de evento inteiro (que inclui evento move e evento-chave). Sem a lógica de agregação puxando em todos eventos, 3.4.0 Dial já não teve todos os seus requisitos. Fazendo requisitos de discagem do mais específico e definir todas as suas dependências reais corretamente faz com que funcione conforme o esperado.
requer: [
'Widget',
'Dd-drag',
'Substituto',
'Evento mouseenter',
'Evento movimento',
"Acontecimento-chave",
"Transição",
'Intl'
]
Para os desenvolvedores do módulo, é uma boa prática para se certificar de que seu módulo requer exatamente o que ele precisa para funcionar. Não presuma que um requisito módulo montante está lá. É sempre melhor ter certeza de que você perguntar para o que você precisa.
Isto também significa que os requisitos de módulo são mais bem definida. Por exemplo, datatype-date Intl tem suporte construído dentro Nas versões anteriores é possível acessar as Intl assim:
Y.Intl.getAvailableLangs ("tipo de dados data ');
Mas desde que este módulo não tem realmente um idioma (o datatype-date-format módulo faz), isso irá falhar. Ele precisa ser mais específico e realmente pedir idiomas para o módulo correto:
Y.Intl.getAvailableLangs ("tipo de dados data-format ');
Criar Explosão de arquivos e remoção Sub-módulo
Depois de fazer essa mudança, a próxima mudança que fizemos estava explodindo o diretório de compilação e remoção de sub-módulos do sistema central. Lógica submódulo não foi removido, só a nossa estrutura de meta-dados foi alterado. Isto irá fornecer compatibilidade com versões anteriores para as instalações atuais.
Submódulos no núcleo do sistema causou um par de questões que precisávamos resolver. O primeiro motivo foi o desempenho. Cada carregador de tempo necessário para calcular dependências, que precisava de andar a estrutura submódulo / plugin de cada módulo. Fazendo isso milhares de vezes estava prejudicando o nosso desempenho durante o carregador de calcular rotina. Ao remover o suporte para submodules no núcleo do sistema que salvou dezenas de milhares de chamadas de função e iterações.
Carregador foi alterado para que se um use da propriedade em um módulo de meta-dados definido mais módulos, ele irá usar os módulos em vez de tentar carregar o módulo original. Então, se você pediu " dd "Loader iria inspecionar" dd "'s de meta-dados e ver uma propriedade utilização que é algo como isto:
"Dd-ddm-base, dd-DDM, dd-ddm-drop, dd-drag, dd-proxy, dd-constranger, drop-dd, dd-scroll, dd-drop-plugin"
No arquivo de semente do núcleo YUI, estamos incluindo também o que estamos chamando rollups virtuais ou apelidos. Essas definições do módulo são exatamente o mesmo que o meta-dados no Loader. Desta forma, você pode incluir todos os arquivos exportados do nosso Configurador de dependência e ainda usam esses pacotes cumulativos sem ter presente carregador na página. Em versões futuras, estaremos refinando essa abordagem ainda mais.
Depois de fazer essa mudança, então precedido a explodir nossos arquivos construir. Em versões anteriores, os submódulos determinado o caminho do arquivo módulos. Por exemplo:
"Dd": {
"Submódulos": {
"Dd-drag":
/ Módulo / dados
}
}
No 3.3.0 quando você construiu "dd", a estrutura do arquivo parecia algo como isto:
/ Build / dd / dd-drag.js
/ Build / dd / dd-ddm.js
/ Build / dd / dd-drop.js
Com o sistema de compilação explodiu em 3.4.0, "dd" é criar arquivos agora olhar como este:
/ Build / dd-drag / dd-drag.js
/ Build / dd-ddm / dd-ddm.js
/ Build / dd-drop / dd-drop.js
Isto permitiu-nos para remover o "caminho" propriedade de todos os nossos dados meta-módulo, bem como, salvar tamanho do arquivo e reduzindo a lógica necessária para reunir os caminhos módulos url.
Se você está incluindo um URL de combinação pré-configurada, você deve recalcular seu URL quando você atualizar.
A desvantagem desta mudança é que, se você está incluindo um URL de combinação de módulos para "preparar" sua página, você não pode simplesmente mudar o número da versão e atualizar. Você terá que rever a dependência Configurator e gerar uma nova URL com estrutura novo módulo.
O Futuro
Eu vou estar continuando a refinar, refatorar e maximizar cada aspecto de nossa estratégia Loader e Semente. Estes primeiros passos são necessários para auxiliar em mudanças futuras que precisam ser feitas não só para a nossa estratégia no lado do cliente, mas também o nosso servidor, de linha de comando e estratégias de dispositivos móveis também.
Compartilhar e ampliar: Bookmark com del.icio.us | digg it! | reddit!
10 Comments »
RSS feed dos comentários deste post. URI TrackBack
Deixe um comentário

Copyright © 2006-2012 Yahoo! Inc. Todos os direitos reservados. Política de Privacidade - Termos de Serviço
Alimentado por WordPress em Yahoo! Web Hosting .

Eu não começ completamente essa passagem:
"Loader foi alterado para que se uma propriedade no uso de um módulo de meta-dados definido mais módulos, ele irá usar os módulos em vez de tentar carregar o módulo original. Então, se você pediu "dd" Loader iria inspecionar "dd" é meta-dados e ver uma propriedade utilização que é algo como isto:
"Dd-ddm-base, dd-DDM, dd-ddm-drop, dd-drag, dd-proxy, dd-constranger, drop-dd, dd-scroll, dd-drop-plugin"
"
Você pode explicar esta narrativa ao contrário do que acontece na versão atual?
Thx
/ Paolo
Comentário por Paolo Nesti - 4 de julho de 2011 #
@ Paolo
Em versões anteriores a 3.4.0 PR2, criamos arquivos estáticos cumulativos. Assim, no caso de DD, houve um ficheiro chamado:
/ Build / dd / dd.js
E que continha todos os módulos de DD relacionados.
Comentário por Dav Vidro - 04 de julho de 2011 #
Fico feliz que vocês estão fazendo isso. Eu sempre evitei ups rolo como a peste. No entanto, uma vez que algumas das classes de base parecem ser removido agora, por exemplo, nó-base torna-se nó central, que seria uma boa coisa para obter uma lista de todas as classes que têm sido preteridos desta forma.
Comentário por Marc - 05 de julho de 2011 #
@ Marc
Quando 3.4.0 é liberado, deve haver muita documentação em torno dos módulos alterados.
Comentário por Dav Vidro - 05 de julho de 2011 #
Este comentário não é para este post especificamente, mas eu continuo a achar a filosofia do YUI contra a minha crença em um bom projeto, "as coisas simples devem ser simples, coisas complexas devem ser possível".
Para eu me encontrei de novo e de novo a leitura através da documentação dos módulos mais fundamentais como nó & evento, depois de meses com YUI3.
Os novos App / MVC módulos parece perfeito para a minha app no começo, depois comecei a escrever muita lógica personalizada para contornar o comportamento padrão, devido a sobrecarga de memória enorme. Quando eu jogar fora Módulo & Ver completamente, eu acabei com uma lógica muito mais curto e compacto, só que mais rápido!
Outro caso é o menu de contexto, que eu não encontrei em YUI3. Alguns especialistas sugerem YUI criando uma nova classe com base na sobreposição, em seguida, adicionar várias propriedades e métodos personalizados de renderização ... Eu só preciso de um menu de contexto e, eventualmente, eu tenho-o feito com menos de 10 linhas de cru JS + CSS.
Eu nunca duvido YUI3 pode suportar situações complexas, mas que sobre casos muito simples, como um app Olá mundo? Com C, você só chamar printf ("Olá mundo!") Dentro de main (). Para Java, você precisa primeiro definir uma classe HelloWorld, em seguida, um método chamado public static void main (), e, finalmente, chamar System.out.println ("Olá mundo!") ... OMG, ninguém percebe o quanto o conhecimento pré-requisito é preciso para escrever algo tão simples como isso? É exatamente como me sinto sobre YUI!
Tudo, eu não acho que YUI3 nunca vai se tornar mais simples, mas eu ainda espero que vocês pode fazê-lo o mais simples possível.
Comentário por Wayne - 16 de julho de 2011 #
@ Wayne: Você não precisa YUI para escrever um aplicativo Olá Mundo. Parece que você também não precisa YUI para construir o aplicativo que você tentou construir utilizando os componentes modelo ea visualização.
Tudo bem!
YUI não vai ser a ferramenta perfeita para cada tarefa. Se você pode escrever dez linhas de JavaScript e realizar o que você precisa fazer, em seguida, por todos os meios, fazer isso em vez de usar um widget que faz muito mais do que você precisa.
Isso não significa que o widget é inútil, ou desnecessariamente complexa. Isso significa que não era a ferramenta certa para o trabalho que você queria que fosse feito.
Nós certamente desejamos que fazer YUI tão simples como é prático, mas há um equilíbrio a ser alcançado entre a simplicidade e utilidade. O código mais simples é nenhum código em tudo, mas se fomos tão longe, nós também não proporcionaria qualquer valor. Assim, buscamos um equilíbrio: nós tentamos fazer coisas complexas mais simples, mas sem simplificar-los para o ponto onde nossas abstrações não são úteis.
Concordo com a sua filosofia de que as coisas simples devem ser as coisas simples e complexas deve ser possível. E eu acredito que é exatamente o que YUI faz: ele faz as coisas complexas possível, sem fazer as coisas simples menos simples. A beleza da arquitetura modular YUI é que se você achar que é mais simples para rolar seu próprio código em vez de usar um widget em particular, você não é obrigado a carregar o código do widget. E as mudanças que vêm em carregadoras 3.4.0 tornar isso ainda mais simples.
Comentário por Ryan Grove - 20 de julho de 2011 #
[...] Carregador teve uma atualização significativa para o 3.4.0. Se você estiver fazendo especificações de carga manual através de utilização ("*") ou fazer uso de configurações submódulo, nós apreciamos muito você está tentando o seu código com o novo carregador para ter certeza de que estamos tratando correctamente todos os casos de uso. Para informações mais detalhadas sobre as mudanças nesta versão do Carregador, consulte o post no blog descrevendo 3.4.0 mudanças carregadora. [...]
Pingback por YUI Preview Release 3.4.0 3 já disponível no CDN »Blog Yahoo! User Interface (YUIBlog) - 28 de julho, 2011 #
@ Ryan,
Só vi o seu comentário. Eu mantinha um projeto antigo escrito em YUI 3.1 com 1000 linhas de código, e eu só queria acrescentar um menu de contexto. Mas eu não conseguiram encontrar qualquer método viável módulo / para fazê-lo rápido e fácil. Prevendo esse recurso minúsculo pode exigir 100s de linhas de código orientado YUI, eu usei JS-prima em seu lugar.
BTW: havia falhas poucos quando se muda para 3.2, mas todo o sistema parou de funcionar quando se muda para 3,3. Então eu não acho necessário tentar 3,4 para este projeto.
Comentário por Wayne - 18 ago 2011 #
[...] O número de iterações executadas pelo carregador no cálculo de dependências. Você pode consultar o blog sobre as mudanças no carregador 3.4.0 para mais [...]
Pingback por anunciar YUI 3.4.0 eo YUILibrary.com novo »Yahoo! Blog User Interface (YUIBlog) - 18 de agosto de 2011 #
Todas essas mudanças para o carregador parece muito promissor e da remoção dos sub-módulos de cálculos é grande. Essa foi provavelmente a razão por que estavam vendo toneladas de chamadas de função que está sendo feito no IE quando se faz os cálculos de dependência e IE seria sorta sufocar por alguns segundos.
Com as alterações para o carregador e os dados de meta - como é o yui carregador lado do servidor afetado. É que ser atualizado para uma tomada em consideração destas alterações. Porque isso é o que acabamos usando.
Comentário por Ali D - 19 ago 2011 #