Performans Tricks

[[TOC]]

Lookup Performans İyileştirmeleri

Licrus UI geliştirmelerinde önemli performans noktalarından biri Lookup’lardır. Lookup kullanımında güvenlik ve performans sorunları yaşamamak için mutlaka aşağıdaki maddelere dikkate ederek geliştirmeler yapılması gerekiyor.

Arayüzlerde data-uikit ile kullanılan lookup çağrılarında büyük verilerin alınmasında ciddi performans sorunlarını yaşanabilmektedir. Bunu çözmek için HighFrame, OneFrame ve Licrus UIKit tarafında yapılan düzenlemeler mevcuttur. Geliştirme yaptığınız ekranın yapısına uygun olarak aşağıdaki adımları uygulamalısınız.

Temelde 100 kayıttan daha az veri getiren alanlarda bir düzenleme yapmanız gerekmeyecektir. Ana veri setlerinin bulunduğu Customer, ProductSerialNumber, Vehicle gibi verilerin lookup olarak kullanılması istenen durumlarda bu adımları mutlaka uygulamalısınız.

  1. Öncelikle yoğun verilerin yer aldığı entity’lerde lookupların devre dışı bırakılması gerekiyor.

Örnek:

public override LookupApiResponse Lookup(LookupApiRequest request) {
    return new NotSupportedLookupApiResponse();
}
  1. Bu tür veri setlerinde mutlaka bir lookup kullanmamız gerekiyorsa bu durumda lookup metotlarında mutlaka filtre kullanımı yapmamız gerekiyor.

Örnek;

public override LookupApiResponse Lookup(LookupApiRequest request) {
    var response = new LookupApiResponse();
    try {
        var filter = this.GetFilter<CustomerFilter>(request);

        //lookup listesine mutlaka kısıtlama yapılıyor.
        filter.IsActive = true;
        filter.PageSize = 20;
        filter.PageIndex = 0;

        var source = DbContext.Customers.Get(filter);
        var result = from x in source
                        select new {
                            x.Text,
                            x.Id,
                            x.TextWithCode,
                        };
        response.Results = result.ToList();
    }
    catch (Exception ex) {
        response.AddError(ex);
    }
    return response;
}
  1. Bir diğer durum da büyük veri setlerinin bulunduğu lookuplarda artık popup şeklinde çalışan bir lookup bileşenimiz bulunuyor. Aşağıdaki örnekteki gibi kullanabilirsiniz.

Örnek;

<div class="form-group">
    <label>Araç Modelli</label>
    <div class="input-group" data-model="Model.Id" data-uikit="vehicleModel.get" data-plugin="lookup" data-columns="Id,Code,Name"></div>
</div>

Lookup alanın görünümü.
image.png

Açılan seçim ekranının görünümü.
image.png

Kullanılan alanların açıklaması Nitelik Değer Açıklama
data-model Model.Id binding işlemlerinde kullanılacak olan veri modelinde alanın adı. Burada lookup için mutlaka .Id değeri verilmelidir
data-uikit vehicleModel Veri setinin lookup olarak alınacak controler (entity) adı. EĞer burada lookup metodu yerine farklı bir metod çağrılmak istenirse data-uikit=”vehicleModel.get” şeklinde belirtilebilir.
data-plugin lookup div tanımını popup olarak çalışan lookup bileşenine çeviren eklentidir.
data-columns Id,Code açılan ekranda gösterilmek sütünları belirler. Belirtilmediğinde varsayılan olarak Id ve Text alanları gösterilir.

UYARI: İlgili repositoryde mutlaka GetAsQuery metodunun yazılması/override edilmesi ve bu metod içerisinde filter.Keywords alanının dikkate alınması gerekir.