Xamarin Forms - Melhorando o desempenho com Compiled Bindings
Neste artigo veremos como melhorar o desempenho de aplicações Xamarin Forms com Compiled Bindings. |
Ao criar sua aplicação Xamarin Forms você tem muitas opções e e muitos padrões a serem seguidos. Alguns são muito úteis, outros um pouco menos, mas há um que você deve sempre usar : MVVM, Model View View Model.
O MVVM é muito importante pois permite que você separe seus aplicativos em três partes ou camadas principais:
Model - Onde você define os seus dados
View - Onde você define a User Interface - UI
View Model - Onde você coloca a sua lógica
No padrão MVVM a sua View não sabe nada sobre a
lógica de seu aplicativo e seu ViewModel não sabe
nada sobre a IU, mas eles se comunicam por meio de um mecanismo chamado
Data Binding.
<Label Text = "{Binding MeuTitle}" />
Neste exemplo associamos a propriedade Text da
nosso Label à propriedade “MeuTitle”
em nosso ViewModel. Simples assim.
Acontece o Data Binding ou vinculação de dados em dois grandes problemas:
Como eles são resolvidos em tempo de execução,
você não tem validação em tempo de compilação. Isso significa que se no
exemplo anterior, ao invés de MeuTitle você escrever MeuTile,
seu código irá compilar bem e você será capaz de executar seu aplicativo Mas
você não verá o texto em sua etiqueta.
E como eles são resolvidos em tempo de execução por meio de um mecanismo denominado Reflection, isso tem um alto custo que impacta de forma indireta sua aplicação, e, portanto, sempre que você carrega uma página com algumas vinculações de dados, seu aplicativo vai consumir tempo.
Como resolver estes problemas ?
Felizmente existe uma solução que permite você usar o
padrão MVVM e o Data Binding, sem ter que se
preocupar com o desempenho. E a solução é usar :
Compiled Bindings.
Para habilitar o Compiled Binding, você deve
realizar duas etapas :
Habilitar a compilação XAML;
Definir um atributo x: DataType correto em um VisualElement para o tipo de objeto ao qual o VisualElement e seus filhos se vincularão;
Nota: É recomendado definir o atributo x: DataType no mesmo nível na hierarquia da view em que o BindingContext está definido. No entanto, esse atributo pode ser redefinido em qualquer local em uma hierarquia de visualização.
Para usar associações compiladas, o atributo x: DataType deve ser definido como uma string literal ou um tipo usando a extensão de marcação x:Type. No tempo de compilação do XAML, quaisquer expressões de vinculação inválidas serão relatadas como erros de compilação. No entanto, o compilador XAML relatará apenas um erro de compilação para a primeira expressão de ligação inválida que encontrar.
Vejamos a seguir como fazer isso.
Usando Compiled Bindings
A compilação XAML oferece vários benefícios:
A compilação XAML vem desabilitada por padrão para garantir a compatibilidade com versões anteriores. Ela pode ser habilitada no nível do assembly e da classe adicionando o atributo XamCompilation.
Abaixo temos um exemplo da ativação da compilação XAML no nível do assembly:
using Xamarin.Forms.Xaml;
...
[assembly: XamlCompilation (XamlCompilationOptions.Compile)]
namespace DemoApp
{
...
}
|
Neste exemplo, a verificação em tempo de compilação de todo o XAML contido no assembly será executada, com erros de XAML sendo relatados em tempo de compilação, em vez de tempo de execução. Portanto, o prefixo do assembly para o atributo XamlCompilation especifica que o atributo se aplica a todo o assembly.
A seguir temos o exemplo da ativação da compilação XAML a nível de Classe:
using Xamarin.Forms.Xaml;
...
[XamlCompilation (XamlCompilationOptions.Compile)]
public class HomePage: ContentPage
{
...
}
|
Agora vamos ver como definir o x:
DataType correto.
Vamos supor que temos uma View chamada DemoPage e
nosso ViewModel se chama
DemoPageViewModel e que nossa página tem uma Label
usando uma vinculação de dados:
Este código XAML esta correto e, se o construirmos e iniciarmos, ele será executado. Se a propriedade MeuTitle existir em DemoPageViewModel, o texto será exibido na Label.
Vamos agora adicionar o x:DataType para habilitar o Compiled Data Binding. Nosso código ficará assim:
Neste exemplo, veja como foi simples. Bastou incluir : x:DataType = "viewModels:XF_Demo"
E isso vai valer para todas as propriedades definidas em nossa ViewModel que usarmos no XAML através da vinculação de dados.
Se, por algum motivo, em sua visualização, você precisar desativar os Compiled Bindings, poderá definir o x: DataType como null, por exemplo:
<StackLayout x: DataType = "{x: Null}"> <Label Text = "{Binding MeuTitle}" /> </StackLayout> |
Para outros cenários usando o DataBinding e o MVVM consulte a documentação para saber como definir o x:DataType.
E agora temos as seguintes vantagens:
De acordo com a Microsoft seguem alguns números que o uso deste recurso te proporciona :
Dessa forma o recurso Compiled Bindings (vinculação compilada) é extremamente útil por duas razões principais: ele torna o seu código mais rápido e permite descobrir muitos problemas em tempo de compilação.
Este é um recurso que você deve considerar sempre usar.
"E percorria Jesus
todas as cidades e aldeias, ensinando nas sinagogas deles, e pregando o
evangelho do reino, e curando todas as enfermidades e moléstias entre o povo."
Mateus 9:35
Referências:
Xamarin Forms - Definindo um luxo de Login
Xamarin Forms - Usando a Câmera
Xamarin Forms - Usando SQLite com MVVM
Xamarin Forms - Criando uma página de pequisa
Xamarin Forms 4.0 - Apresentando o Shell
Xamarin Forms - Apresentando CollectionView