Kuboresha utendaji ni muhimu sana wakati wa kujenga programu za kisasa za wavuti kama Look Scanned, hasa wakati wa kushughulikia picha. Chombo chenye nguvu lakini kisichotumika sana kwa kufikia maboresho makubwa ya utendaji ni kiolesura cha ImageBitmap
. Katika chapisho hili la blogu, tutachunguza ni nini ImageBitmap
, kwa nini ni cha ufanisi, na jinsi kimeuganishwa katika Look Scanned kuboresha utendaji wa uonyeshaji.
ImageBitmap ni Nini?
ImageBitmap
ni kiolesura cha HTML5 kinachowakilisha picha ya bitmap. Kinaruhusu ufumuzi wa picha na uchakataji wenye ufanisi nje ya uzi mkuu, kupunguza utegemezo wa uonyeshaji na kuboresha ujibu. Mara tu kimejengwa, kitu cha ImageBitmap
kinaweza kutumiwa moja kwa moja katika mazingira ya uonyeshaji kama Canvas 2D au WebGL, kikifanya kuwa chombo chenye nguvu kwa programu zenye picha nyingi.
Kwa Nini Kutumia ImageBitmap katika Look Scanned?
Hapo awali, Look Scanned ilitegemea Blob
kupitisha data za picha kati ya vitendakazi vya uchakataji. Hata hivyo, Blob
si bora kwa kuboresha utendaji kwa kuwa inahitaji hatua za usimbaji na ufumuzi. Kinyume chake, ImageBitmap
inatoa ufikiaji wa moja kwa moja wa data za picha, ikiondoa shughuli za ufumuzi zisizohitajika na kuboresha utendaji wa uonyeshaji kwa kiasi kikubwa.
Jinsi Tunavyotumia ImageBitmap katika Look Scanned
Look Scanned inasaidia vivinjari vya zamani, hivyo haiwezi kubadilika kabisa hadi ImageBitmap
bila kudumisha msaada wa Blob
. Msaada huu wa pande mbili unahakikisha upatanifu katika anuwai kubwa ya vivinjari. Kwa maelezo ya upatanifu wa kivinjari, angalia caniuse.com. Aidha, msaada mdogo wa canvas wa Safari unahitaji matumizi ya WebAssembly (WASM) kwa uchakataji wa picha, ambayo inahitaji Blob
kama umbizo la kuingiza.
Kushughulikia hili, Look Scanned inatumia mbinu ya kuchanganya inayosaidia Blob
na ImageBitmap
huku ikihamia polepole kwa ya mwisho. Hapa chini ni maelezo muhimu ya utekelezaji:
Kupakia na Kufumua
async function loadImage(url): Promise<ImageBitmap | Blob> {
const response = await fetch(url);
const blob = await response.blob();
if (window.createImageBitmap) {
return createImageBitmap(blob);
}
// Kurudi kwa matumizi ya Blob
return blob;
}
Muunganiko wa WebAssembly
Kwa uchakataji wa kina, Blob
inapitishwa kwa WASM kuhakikisha utendakazi hata katika vivinjari visivyosaidika. Tunahitaji kuchora picha kwanza kwenye canvas kisha kutumia canvas.toBlob
kupata Blob
.
Uonyeshaji wa Kurudi Nyuma
async function renderImage(canvas, imageUrl) {
const ctx = canvas.getContext("2d");
const image = await loadImage(imageUrl);
if (image instanceof ImageBitmap) {
ctx.drawImage(image, 0, 0);
} else {
const img = new Image();
img.src = URL.createObjectURL(image);
img.onload = () => ctx.drawImage(img, 0, 0);
}
}
Maboresho ya Utendaji
Kwa kuunganisha ImageBitmap
, Look Scanned imefikia kupungua kwa kiasi kikubwa kwa wakati wa uchakataji wa picha—kutoka ms 50 hadi ms 20 kwa kila picha. Kuboresho hiki kunatafsiri kuwa uzoefu wa mtumiaji ulio laini zaidi na unaojbu zaidi, hasa kwa kazi zinazohusisha hati zilizosafishwa.
Matokeo Yasiyotarajiwa
Wakati wa utekelezaji, tuligundua kuwa kuunda nakala mpya ya ImageBitmap
kwa kutumia createImageBitmap
kabla ya kuihamisha kwa mfanyakazi hutoa utendaji bora zaidi kuliko kupitisha moja kwa moja kitu cha asili. Tabia hii inaweza kuwa kutokana na maboresho ya injini ya kivinjari kwa vitu vinavyoweza kuhamishwa.
Msaada wa Kivinjari
ImageBitmap
inasaidiwa katika vivinjari vingi vya kisasa, ikiwa ni pamoja na matoleo ya hivi karibuni ya Chrome, Firefox, Edge, na Safari. Kwa maelezo ya upatanifu, angalia createImageBitmap
katika caniuse.com.
Hitimisho
Kuunganisha ImageBitmap
katika Look Scanned kumeboresha utendaji kwa uwazi kwa kuwezesha ufumuzi wa asynchronous, uonyeshaji wenye ufanisi, na upatanifu bora na Web Workers. Ingawa kudumisha msaada wa vivinjari vya zamani kunahitaji matumizi ya kuendelea ya Blob
, uhamaji wa polepole kwa ImageBitmap
unahakikisha faida za muda mrefu za utendaji.
Kwa kutumia maendeleo haya, Look Scanned hutoa uzoefu wa haraka zaidi, unaojbu zaidi kwa watumiaji wake. Ijaribu na upate tofauti kwa mikono yako mwenyewe!