Oluşturma yönetimi

Oluşturma yönetim sistemi, oluşturucuya engellemeleri ne zaman yeniden oluşturacağını bildirir. Bu özellik, bir blok değiştirildiğinde (ör. alan değerleri ayarlandığında veya girişler eklendiğinde) blok şeklinin eşleşecek şekilde güncellenmesini sağlar.

Bakım zamanı

Aşağıdaki durumlarda bu sistemle etkileşimde bulunmanız gerekir:

  • Blockly'ye, bloğun şeklini değiştiren yöntemler eklemek.
  • Blockly'ye, bir blokla ilgili güncellenmiş boyut veya konumlandırma bilgilerine dayanan yöntemler ekleme.

İşleyiş şekli

  1. Otomatik olarak sıraya ekleme. Bir blok değiştirildiğinde, Blockly söz konusu blok için bir oluşturmayı "sıralar". Oluşturmayı sıraya alan değişikliklere örnek olarak aşağıdakiler verilebilir:

    • Bir alanın değerini ayarlama
    • Giriş ekleme veya kaldırma
    • Çocuk blokunu bağlama veya bağlantısını kaldırma
  2. Grup oluşturun. Bir blok sıraya alındığında, oluşturma yönetim sistemi bunu ve tüm üst bloklarını, yeniden oluşturulması gereken bir blok grubuna ekler.

  3. Sizi arayalım. Daha sonra oluşturma yönetim sistemi requestAnimationFrame aracını kullanarak bir geri çağırma ister. Bu geri çağırma, geçerli çerçeve çizilmeden hemen önce tarayıcı tarafından çağrılır.

  4. Grubu yeniden oluşturur (ağaç olarak). requestAnimationFrame geri çağırması çağrıldığında, oluşturma yönetim sistemi yaprak bloklarından kök bloklarına kadar kümedeki her bloku oluşturur. Bu, üst bloklar oluşturulmadan önce alt blokların doğru boyut bilgisine sahip olmasını sağlar. Böylece üst bloklar, alt öğelerinin etrafına uzanabilir.

Neden çalışır?

Geçerli çerçeve çizilmeden hemen önce blokların yeniden işlenmesini beklemek, oluşturma yönetim sisteminin oluşturma isteklerini tekilleştirmesine olanak tanır. Bloklar her zaman hemen oluşturulmuşsa aynı blok gereksiz bir şekilde art arda birden fazla kez oluşturulabilir. Bunun yerine, oluşturma istekleri toplu olarak işlenir ve değiştirilen her blok, durumu kesinleştirildikten sonra yalnızca çerçevenin sonunda bir kez çizilir. Oluşturma işlemlerinin tekilleştirilmesi, Blockly'yi çok daha verimli hale getirir.

Örneğin, diğer iki sıra 11 arasına bir blok eklendiğinde 11 oluşturulur, ancak gerçekte yalnızca 3 tanesi gerçekleşir (her blok için bir tane). Yani 3,6 kat performans artışı.

Kullanım şekli

Oluşturma yönetim sistemiyle genelde ilgilenmeniz gerekmez çünkü bir bloku değiştirdiğinizde otomatik olarak çalışır. Ama bu araçla doğrudan etkileşim kurmanız gereken birkaç durum da vardır.

Oluşturmaları sıraya ekleme

Blockly'ye, bir bloğun şeklini güncellemesi gereken yeni bir yöntem ekliyorsanız bloğu oluşturmak için BlockSvg.prototype.queueRender yöntemini çağırmanız gerekir.

Oluşturmaların tamamlanmasını bekleyin

Blockly'ye, bir blokla ilgili boyut veya konumlandırma bilgilerinin güncellenmesini gerektiren yeni bir yöntem ekliyorsanız renderManagement.finishQueuedRenders() sözünü beklemeniz gerekir. Bu vaat, sıraya alınmış herhangi bir oluşturma işlemi tamamlandıktan sonra veya sıraya alınmış oluşturma işlemi yoksa hemen yerine getirilir.

import * as renderManagement from './renderManagement.js';

function async myNewMethod() {
  block.somethingThatModifiesTheShape();
  // Await the promise.
  await renderManagement.finishQueuedRenders();
  myThingThatReliesOnPositioningInfo();
}

Tetikleyici sıraya alındı hemen oluşturulur

Blockly'ye, bir blokla ilgili boyut veya konumlandırma bilgilerinin güncellenmesini gerektiren yeni bir yöntem ekliyorsanız ve oluşturma işlemlerinin tamamlanması için sonraki kareyi bekleyemiyorsanız sıraya alınan oluşturma işlemlerinin hemen gerçekleşmesi için renderManagement.triggerQueuedRenders yöntemini çağırabilirsiniz.

import * as renderManagement from './renderManagement.js';

function async myNewMethod() {
  block.somethingThatModifiesTheShape();
  // Trigger an immediate render.
  renderManagement.triggerQueuedRenders();
  myThingThatReliesOnPositioningInfo();
}

Genel olarak, daha az performans gösterdiği için bunu yapmak istemezsiniz. Bu uygulama yalnızca gecikmenin kötü bir kullanıcı deneyimine neden olduğu durumlarda gereklidir. Örneğin, ekleme işaretçilerinin konumlandırma bilgisi olması gerekir. Ayrıca, ekleme işaretçilerinin kullanıcılara anında geri bildirim sağlaması önemlidir. Böylece, ekleme işlemi anında tetikler.

Temelde, geriye dönük uyumluluk nedeniyle anında oluşturmayı tetiklediği birkaç yer de vardır. Bunların v11'de kaldırılması planlanmaktadır.