Vikomo vya kumbukumbu ya kivinjari wakati wa kuchakata mafaili
Faili langu ni 15 MB tu. Kwa nini kichupo kiliishiwa kumbukumbu?
Faili lililo kwenye diski ni toleo lililobanwa
Huu ndio mkanganyiko mzima katika sentensi moja: namba unayoiona kwenye kidhibiti cha mafaili ni ukubwa wa data iliyobanwa, na hakuna kinachoweza kuchakatwa kikiwa kimebanwa. Ili kubadilisha vipimo, kubana upya, kubadilisha umbizo au kuchambua picha, lazima kwanza isimbuliwe kuwa pikseli ghafi, nazo pikseli ghafi ni kubwa mno.
Hesabu ni rahisi. Pikseli moja katika kumbukumbu kwa kawaida ni baiti nne — nyekundu, kijani, buluu na alpha. Picha ya 4000 × 3000 ina pikseli milioni kumi na mbili, kwa hiyo picha iliyosimbuliwa ni takriban 48 MB. JPEG ambayo ilitoka nayo huenda ilikuwa 4 MB. Faili likaongezeka mara kumi na mbili kabla kazi yoyote haijaanza.
| Vipimo | Pikseli | Picha iliyosimbuliwa |
|---|---|---|
| 1920 × 1080 | milioni 2.1 | takriban 8 MB |
| 4000 × 3000 | milioni 12 | takriban 48 MB |
| 6000 × 4000 | milioni 24 | takriban 96 MB |
| 10000 × 10000 | milioni 100 | takriban 400 MB |
Na nakala moja haitoshi kamwe
Mnyororo halisi wa kazi hushikilia nakala kadhaa kwa wakati mmoja: baiti za pembejeo zilizobanwa, picha ya chanzo iliyosimbuliwa, picha ya matokeo yenye vipimo vipya, bafa za ndani za kisimbaji, na matokeo yaliyobanwa. Zana inayokuonyesha pia hakikisho hushikilia nakala nyingine. Kwa picha ya 4000 × 3000 iliyotajwa hapo juu, kilele cha matumizi ya kumbukumbu cha megabaiti mia mbili hadi mia tatu ni cha kawaida kabisa, kwa faili lililoonekana kuwa 4 MB.
Kugeuza kurasa za PDF kuwa picha hutenda vivyo hivyo, ukurasa baada ya ukurasa: ukurasa wa A4 uliochorwa kwa DPI 300 ni takriban pikseli 2480 × 3508, sawa na takriban 35 MB baada ya kusimbuliwa, na zana inayochora kurasa kadhaa kwa wakati mmoja huzidisha kiasi hicho. Video ni mbaya zaidi, kwa sababu kisimbuzi kinahitaji fremu kadhaa za marejeleo ziwe kwenye kumbukumbu kwa wakati mmoja.
Dari halisi ziko wapi
- Bajeti ya kumbukumbu ya kichupo huwekwa na kivinjari, si na tovuti, nayo ni ndogo kuliko kumbukumbu iliyosakinishwa kwenye kompyuta. Pia hupungua pale vichupo vingine vinapokuwa na shughuli.
- Moduli za WebAssembly zilizojengwa kwa mtindo wa kawaida wa kumbukumbu wa biti 32 zinaweza kufikia gibibaiti nne kwa juu zaidi, na vivinjari mara nyingi huruhusu kiasi kidogo zaidi ya hicho kwa kila nakala inayoendeshwa.
- Kila bafa ina urefu wake wa juu zaidi, ambao uko chini sana ya jumla ya kumbukumbu ambayo ukurasa unaweza kuitumia.
- Mifumo ya uendeshaji ya simu huua kichupo kinachokua kikubwa mno, bila onyo na bila hitilafu ambayo ukurasa unaweza kuinasa.
- Kumbukumbu ya michoro ni bwawa tofauti na dogo zaidi. Canvas kubwa kuliko kipimo cha juu cha jukwaa hushindwa tu, hata kama kumbukumbu ya mfumo iliyo wazi ni kubwa kiasi gani.
Hakuna hata moja kati ya hizi inayochapishwa kama namba moja unayoweza kuitafuta, kwa sababu zinategemea kivinjari, toleo lake, kifaa na kile kingine kinachoendeshwa. Hilo ndilo tatizo halisi: zana haiwezi kuuliza inaruhusiwa kutumia kumbukumbu kiasi gani.
Kwa nini simu ndiyo hali ngumu zaidi
Simu zina kumbukumbu ndogo zaidi, hazina swap kama ilivyo kwenye kompyuta za mezani, na zina mfumo wa uendeshaji ulio mkali katika kunyakua kumbukumbu kutoka kwa shughuli zinazoendeshwa nyuma. Kichupo cha kivinjari kinakuwa shughuli ya nyuma mara tu unapojibu ujumbe. Kwa hiyo vivinjari vya simu vinashikilia bajeti finyu zaidi na ni vyepesi kutupa kichupo, na kutupwa huko kwako wewe kwa kawaida kunaonekana kama ukurasa unaopakia upya na kupoteza kazi yako badala ya kuonekana kama hitilafu.
Matokeo ya kivitendo ni kwamba kazi inayokamilika kwenye kompyuta ndogo inaweza kuwa haiwezekani kwenye simu kwa faili lile lile. Hiyo si kasoro ya zana. Ni mpaka wa maunzi, na jibu la kweli ni kusema hivyo kabla ya kuanza badala ya kuvunjika katikati ya kazi.
Jinsi zana makini inavyotenda
- Inakadiria matumizi ya kumbukumbu kutokana na vipimo vya picha iliyosimbuliwa kabla ya kutenga kumbukumbu yoyote, na inakataa kazi ambayo ni wazi haitatoshea.
- Inachakata faili moja kwa wakati kwenye kifaa chenye uwezo mdogo badala ya kuendesha kundi zima kwa pamoja.
- Inahamisha bafa kati ya ukurasa na Web Workers zake badala ya kuzinakili, ili faili kubwa lisiwepo mara mbili.
- Inaachia kila tokeo mara tu linapoandikwa, na inabatilisha URL za muda ambazo vinginevyo zingeweka data hai.
- Inatiririsha ukurasa baada ya ukurasa au fremu baada ya fremu pale umbizo linaporuhusu, badala ya kupakia hati nzima kwenye kumbukumbu.
- Inaweka kikomo cha idadi ya pikseli itakayoikubali, na ndicho kinachozuia faili dogo linalotanuka kuwa canvas kubwa mno lisiangushe kichupo.
Unachoweza kufanya kazi inaposhindikana
- Funga vichupo vingine. Vinashindania bajeti ile ile, na vivinjari havigawi kwa usawa.
- Chakata mafaili machache kwa wakati mmoja. Foleni ya faili moja ni ya polepole lakini ina uwezekano mkubwa zaidi wa kukamilika.
- Punguza vipimo kwanza. Kupunguza ukingo mrefu zaidi kwa nusu hupunguza matumizi ya kumbukumbu hadi robo, na mara nyingi ndicho ulichokitaka hata hivyo.
- Gawa PDF kubwa kisha uchakate vipande vyake.
- Hamia kwenye kompyuta ya mezani kwa kazi kubwa zaidi. Hii si kushindwa kwa uchakataji wa ndani ya kifaa; ni matumizi sahihi ya maunzi uliyo nayo.
- Anzisha upya kivinjari ikiwa kichupo kimekaa wazi kwa siku kadhaa. Vichupo vinavyoishi muda mrefu hujilimbikizia kumbukumbu ambayo kupakia upya huiachia.
Kikomo cha makadirio yoyote
Vivinjari hutoa dokezo la jumla tu kuhusu kumbukumbu inayopatikana, na vingine havitoi chochote kabisa. Kwa hiyo takwimu yoyote ambayo zana ya ndani inakuonyesha ni makadirio yaliyojengwa kutokana na vipimo vya faili lenyewe na mtindo wa tahadhari wa mnyororo wa kazi, si usomaji kutoka kwa mfumo wa uendeshaji. Yanafaa kwa kuamua kama ujaribu kazi fulani. Si ahadi kwamba kazi itakamilika, kwa sababu kigezo kinachoamua — kile ambacho sehemu nyingine ya kifaa itakuwa ikifanya katika sekunde thelathini zijazo — si kitu ambacho ukurasa wa wavuti unaweza kukiona.
Zana za kazi hii
Vyanzo
- W3C — WebAssembly Core Specification, memory model
- W3C — Device Memory API, and why the value is coarse
- WHATWG — HTML Standard, transferable objects