Oluşturma yönetim sistemi, oluşturucuya engeller. Bir blok değiştirildiğinde (ör. alan değerleri ayarlandığında veya girişler eklendiğinde) blokun şeklinin eşleşecek şekilde güncellendiğinden emin olur.
Ne zaman ilgilenmeli?
Aşağıdaki durumlarda bu sistemle etkileşime geçmeniz gerekir:
- Blockly'ye, bloğun şeklini değiştiren yöntemler ekleme.
- Blockly'ye, bir blokla ilgili güncellenmiş boyut veya konum bilgilerini kullanan yöntemler ekleme.
İşleyiş şekli
Otomatik olarak sıraya ekleme Bir blok değiştirildiğinde, Blockly "sıralar"a ekler a oluşturabilirsiniz. Oluşturma işlemini sıraya alan değişikliklere ilişkin bazı örnekler şunlardır:
- Alanın değerini ayarlama
- Giriş ekleme veya kaldırma
- Alt blok bağlama veya alt bloğun bağlantısını kaldırma
Grup oluşturun. Bir blok sıraya alındığında, oluşturma yönetim sistemi onu ve tüm üst bloklarını, incelenmesi gereken bir grup bloka ekler. yeniden işlendi.
Sizi arayalım'ı tıklayın. Ardından, oluşturma yönetim sistemi,
requestAnimationFrame
kullanarak geri arama. Bu geri çağırma, geçerli çerçeve çizilmeden önce tarayıcı tarafından sağ olarak çağrılır.Grubu yeniden oluşturun (ağaç olarak).
requestAnimationFrame
geri araması yapıldığında çağrıldığında, oluşturma yönetim sistemi gruptaki her bloğu oluşturur yaprak bloklarından kök bloklarına kadar. Bu, alt blokların oluşturulmadan önce doğru boyut bilgilerinin sağlanmasına yardımcı olur. bloklar çocuklarının etrafına da yayılabilir.
Nasıl çalışır?
Geçerli kare çizilinceye kadar blokların yeniden oluşturulmasını beklemek, oluşturma isteklerini tekilleştirmek için oluşturma yönetim sisteminden yararlanır. Bloklar her zaman hemen oluşturulursa aynı blok gereksiz yere art arda birden çok kez oluşturulabilir. Bunun yerine oluşturma istekleri toplu olarak işlenir ve her bir değiştirilmiş blok, durumu sıfırlandıktan sonra çerçevenin sonunda yalnızca bir kez çizilir gerekir. Oluşturma işlemlerini tekilleştirmek, Blockly'yi çok daha verimli hale getirir.
Örneğin, diğer iki arasına bir blok eklendiğinde 11 sıra oluşturulur, ancak 3 gerçekleşir (her blok için bir tane). Bu, 3,6 kat performans artışı demektir.
Kullanım şekli
Bir bloğu değiştirdiğinizde otomatik olarak çalıştığından genellikle oluşturma yönetimi sistemiyle ilgilenmeniz gerekmez. Ancak bazı durumlarda etkileşimde bulunmanız gerekir.
Oluşturma işlemlerini sıraya alma
Blockly'ye bir bloğun şeklini güncellemesi gereken yeni bir yöntem ekleyecekseniz bloğun oluşturulmasını sıraya almak için BlockSvg.prototype.queueRender
işlevini çağırmanız gerekir.
Oluşturma işleminin tamamlanmasını bekleyin
Blockly'ye, bir blokla ilgili güncel boyut veya konum bilgisi gerektiren yeni bir yöntem ekleyecekseniz renderManagement.finishQueuedRenders()
promise'i beklemeniz gerekir. Bu vaat şu tarihten sonra sona erer:
sıraya alınan oluşturma işlemleri tamamlanır.
import * as renderManagement from './renderManagement.js';
function async myNewMethod() {
block.somethingThatModifiesTheShape();
// Await the promise.
await renderManagement.finishQueuedRenders();
myThingThatReliesOnPositioningInfo();
}
Sırada bekleyen oluşturma işlemlerini hemen tetikle
Blockly'ye, boyutun güncellenmesini gerektiren yeni bir yöntem ekliyorsanız
engelleme hakkında bilgi edinir ve bir sonraki bloka
2013 ise bu modellerin tamamlanması için
Sıraya alınan oluşturma işlemlerinin gerçekleşmesini zorunlu kılmak için renderManagement.triggerQueuedRenders
hemen teslim edebilirsiniz.
import * as renderManagement from './renderManagement.js';
function async myNewMethod() {
block.somethingThatModifiesTheShape();
// Trigger an immediate render.
renderManagement.triggerQueuedRenders();
myThingThatReliesOnPositioningInfo();
}
Genellikle daha düşük performans gösterdiği için bunu yapmak istemezsiniz. Yalnızca gecikmenin kötü bir kullanıcı deneyimine neden olduğu durumlarda gereklidir. Örneğin, ekleme işaretçilerinin konumlandırma bilgilerine ihtiyacı vardır ve ekleme işaretçilerinin kullanıcılara anında geri bildirim vermesi, böylece anında oluşturma işlemini tetiklemesi önemlidir.
Temelde, anlık görüntülerin tetiklendiği birkaç yer daha vardır: geriye dönük uyumluluk nedenleri olabilir. Bunların v11'de kaldırılması planlanmaktadır.