బ్రౌజర్లో లోకల్ ఫైల్ ప్రాసెసింగ్ ఎలా పని చేస్తుంది
ఏదీ అప్లోడ్ కాకపోతే, ఆ పని నిజంగా చేసేదెవరు — ఎక్కడ?
ఇక్కడ “లోకల్” అంటే అర్థం ఏమిటి
మామూలు ఆన్లైన్ కన్వర్టర్ అంటే అప్లోడ్ ఎండ్పాయింట్ ఉన్న ఒక వెబ్సైట్. మీ ఫైల్ మీ అధీనంలో లేని ఒక మెషీన్కు వెళ్తుంది, అక్కడ ప్రాసెస్ అవుతుంది, కొంతకాలం నిల్వ ఉంటుంది, తర్వాత డౌన్లోడ్గా తిరిగి ఇవ్వబడుతుంది. లోకల్ ప్రాసెసింగ్ ఆ వాక్యం మధ్య భాగాన్ని తీసేస్తుంది: మీ ఫైల్ను చదివే కోడ్ మీరు ఇప్పటికే తెరిచి ఉన్న బ్రౌజర్ ట్యాబ్ లోపలే, మీ సొంత ప్రాసెసర్పై నడుస్తుంది, ఫలితం తిరిగి మీ సొంత డిస్క్కే రాయబడుతుంది.
సైట్ మాత్రం ఇప్పటికీ నెట్వర్క్ ద్వారానే వస్తుంది — HTML, స్టైల్షీట్లు, స్క్రిప్ట్లు, WebAssembly మాడ్యూల్లు అన్నీ మామూలు వెబ్ పేజీలానే సర్వర్ నుంచి వస్తాయి. తేడా ఉన్నది దిశలో. ప్రోగ్రామ్ కోడ్ కిందికి వస్తుంది; మీ ఫైల్ పైకి వెళ్ళదు.
కావలసిన భాగాలు బ్రౌజర్లో ఇప్పటికే ఉన్నాయి
| ఫీచర్ | అది ఏం అందిస్తుంది |
|---|---|
| File, Blob APIలు | ఫారం సబ్మిట్ చేయకుండానే, యూజర్ ఎంచుకున్న లేదా డ్రాప్ చేసిన ఫైల్ బైట్లను చదవడం |
| Web Workers | భారీ పనిని బ్యాక్గ్రౌండ్ థ్రెడ్లో నడపడం, తద్వారా ఇంటర్ఫేస్ స్పందిస్తూనే ఉంటుంది |
| WebAssembly | కంపైల్ చేసిన C, C++ లేదా Rust కోడెక్ లైబ్రరీలను నేటివ్కు దగ్గరి వేగంతో నడపడం |
| Canvas, OffscreenCanvas | ఇమేజ్లను డీకోడ్ చేయడం, గీయడం, రీసైజ్ చేయడం, మళ్ళీ ఎన్కోడ్ చేయడం |
| WebCodecs | బ్రౌజర్ సొంత హార్డ్వేర్-వేగవంతమైన వీడియో ఎన్కోడర్లు, డీకోడర్లను అందుకోవడం |
| WebGPU | మోడల్ ఇన్ఫరెన్స్నూ, సమాంతర పిక్సెల్ పనినీ గ్రాఫిక్స్ ప్రాసెసర్పై నడపడం |
| File System Access | మద్దతు ఉన్నచోట, యూజర్ ఎంచుకున్న చోటికే ఫలితాన్ని నేరుగా రాయడం |
ఇందులో ఏదీ అసాధారణం కాదు. స్ప్రెడ్షీట్లనూ, డిజైన్ టూల్స్నూ, గేమ్లనూ ట్యాబ్లో నడిపే అదే ప్లాట్ఫాం ఇది. ఇక్కడ అసాధారణమైన నిర్ణయం ఒక్కటే — దీనికి సర్వర్ను జోడించడానికి నిరాకరించడం.
ఒక ఫైల్ ప్రయాణించే దారి
- మీరు ఫైల్ ఎంచుకుంటారు. బ్రౌజర్ పేజీకి దాని హ్యాండిల్ ఇస్తుంది — కాపీ కాదు, ఒక రిఫరెన్స్.
- ఎక్స్టెన్షన్ను నమ్మకుండా, ఫైల్ సిగ్నేచర్ నుంచి అసలు ఫైల్ రకాన్ని గుర్తించడానికి పేజీ మొదటి బైట్లను చదువుతుంది.
- ఆ పనికి ఎంత మెమరీ కావాలో అంచనా వేస్తుంది, పరికరం సురక్షితంగా ఇవ్వగలిగే దాన్ని అది మించితే పనిని తిరస్కరిస్తుంది లేదా క్యూలో పెడుతుంది.
- బైట్లు Web Worker లోకి బదిలీ అవుతాయి. ArrayBufferను బదిలీ చేయడం అంటే కాపీ చేయడం కాదు, యాజమాన్యాన్ని తరలించడం — తద్వారా పెద్ద ఫైల్ మెమరీలో రెండుసార్లు ఉండదు.
- వర్కర్ లోపల, ఒక WebAssembly కోడెక్ లేదా ప్లాట్ఫాం API అసలు డీకోడింగ్, ఎన్కోడింగ్ చేస్తుంది.
- ఫలితం బైట్ల రూపంలో తిరిగి వచ్చి, Blobలో చుట్టబడి, డౌన్లోడ్గా మీకు ఇవ్వబడుతుంది లేదా మీరు ఎంచుకున్న చోటికి రాయబడుతుంది.
- ఆ Blob తాత్కాలిక URL రద్దవుతుంది, బఫర్లు విడుదలవుతాయి.
పరిస్థితిని మార్చిన భాగం WebAssembly ఎందుకయ్యింది
ఇమేజ్, వీడియో కోడెక్లు దశాబ్దాల పాటు జాగ్రత్తగా ఆప్టిమైజ్ చేసిన C కోడ్. వాటిని JavaScriptలో మళ్ళీ రాయడం ఎప్పుడూ ఆచరణ సాధ్యం కాదు. WebAssembly అనేది పోర్టబుల్ బైనరీ ఇన్స్ట్రక్షన్ ఫార్మాట్; బ్రౌజర్లు దాన్ని శాండ్బాక్స్లో, నేటివ్ కోడ్కు దగ్గరి వేగంతో నడుపుతాయి — అంటే ఉన్న ఆ లైబ్రరీలనే కంపైల్ చేసి బ్రౌజర్కు అలాగే పంపవచ్చు.
వేగం ఎంత ముఖ్యమో శాండ్బాక్స్ కూడా అంతే ముఖ్యం. WebAssembly మాడ్యూల్కు మీ ఫైల్ సిస్టమ్పై గానీ, మీ నెట్వర్క్పై గానీ, మీ ఇతర ట్యాబ్లపై గానీ ఎలాంటి సహజ ప్రాప్యతా ఉండదు. పేజీ ఇచ్చిన మెమరీ మాత్రమే దానికి కనిపిస్తుంది, ఇంకేమీ కనిపించదు. హానికరమైన లేదా కేవలం బగ్లున్న కోడెక్ కూడా తనకు ఇవ్వని దాన్ని వెతికి చదవలేదు.
ఇంకా నెట్వర్క్ను తాకేది ఏమిటి, అది మీ ఫైల్ ఎందుకు కాదు
నెట్వర్క్ ద్వారా మూడు వస్తువులు వస్తాయి: పేజీ, మీరు తెరిచిన టూల్ ఇంజిన్, ఇంకా — బ్యాక్గ్రౌండ్ తొలగింపు కోసం — మోడల్ వెయిట్లు. ఈ మూడూ FileSlimmer సొంత స్టాటిక్ అసెట్లే, మీ బైట్లలో ఒక్కటీ చదవకముందే FileSlimmer సొంత ఆరిజిన్ నుంచే తెచ్చుకుంటాం. అవి డౌన్లోడ్లు, అవి కాష్ అవుతాయి, మొదటిసారి వాడాక నెట్వర్క్ అసలు లేకుండానే బ్రౌజర్ సొంత కాష్ నుంచి అందించవచ్చు.
ఆ తర్వాత జరిగేదంతా లోకల్గానే. ఇంజిన్లకు ఫైల్ బైట్లు పేజీ నుంచి postMessage ద్వారా మాత్రమే అందుతాయి; ఏదైనా పంపడానికి వాటికి ఎప్పుడూ URL ఇవ్వబడదు, పైగా ఏదైనా కోడ్ ప్రయత్నించినా పేజీ ఎక్కడికి కనెక్ట్ కావచ్చో కంటెంట్ సెక్యూరిటీ పాలసీ పరిమితం చేస్తుంది.
లాభనష్టాలు, స్పష్టంగా
| అంశం | మీ బ్రౌజర్లో | సర్వర్పై |
|---|---|---|
| మీ ఫైల్ ఎక్కడికి వెళ్తుంది | ఎక్కడికీ వెళ్ళదు | మీ అధీనంలో లేని మెషీన్కు |
| వేగం | మీ పరికరం ఎంత చేయగలిగితే అంత | ఆపరేటర్ ఎంతకు డబ్బు కట్టాడో అంత |
| చాలా పెద్ద ఫైల్లు | బ్రౌజర్ మెమరీ హద్దుల్లో | ఆపరేటర్ పెట్టిన పరిమితుల్లో |
| ఆఫ్లైన్లో పని చేస్తుందా | ఇంజిన్ ఒకసారి కాష్ అయ్యాక, అవును | లేదు |
| అరుదైన ఫార్మాట్లు | WebAssemblyకి కంపైల్ అయ్యేవి మాత్రమే | ఆపరేటర్ ఇన్స్టాల్ చేసినవి ఏవైనా |
| వెయ్యి ఫైల్ల బ్యాచ్ | పరికరం పరిమితులకు లోబడి | సాధారణంగా ఇదే మెరుగైన ఎంపిక |
లోకల్ ప్రాసెసింగ్ అన్ని సందర్భాల్లోనూ మెరుగైనది కాదు. ఫైల్ ప్రైవేటుగా ఉన్నప్పుడు, పరికరం సమర్థంగా ఉన్నప్పుడు, పని మెమరీలో ఇమిడినప్పుడు అది మెరుగైనది. ఒక్క మెషీన్ మోయగలిగే దానికంటే చాలా ఎక్కువ ప్రాసెస్ చేయాల్సి వచ్చినప్పుడు సర్వరే మెరుగు. ఏ విధానం అన్నిచోట్లా గెలుస్తుందని పట్టుబట్టడం కంటే, మీరు ఏ పరిస్థితిలో ఉన్నారో స్పష్టంగా తెలుసుకోవడం ఎక్కువ ఉపయోగకరం.
ఇది దేన్ని క్లెయిమ్ చేయడం లేదు
ఇది ఈ అప్లికేషన్ ఏం చేస్తుందో చెప్పే ప్రకటన మాత్రమే. మీరు తెరిచే ఏ పేజీ కంటెంట్నైనా చదవగల మీ బ్రౌజర్ ఎక్స్టెన్షన్ల గురించిన క్లెయిమ్ కాదు; మీరు తాకే ఏ ఫైల్నైనా పరిశీలించగల మీ ఆపరేటింగ్ సిస్టమ్ గురించిన క్లెయిమ్ కాదు; మీరు ఏ సైట్ను సందర్శించారో చూడగల మీ నెట్వర్క్ ఆపరేటర్ గురించిన క్లెయిమ్ కూడా కాదు. అవి ఏ వెబ్సైట్ చేతికీ అందవు, అలా కాదని చెప్పే టూల్ తన స్థాయిని మించి మాట్లాడుతున్నట్టే.
క్లెయిమ్ ఇరుకైనది, తనిఖీ చేయదగినది: మీరు ఎంచుకున్న ఫైల్లు ఈ బ్రౌజర్లోనే లోకల్గా ప్రాసెస్ అవుతాయి, FileSlimmer వాటిని అప్లోడ్ చేయదు. దాన్ని నమ్మడం కాకుండా మీరే ఎలా ధృవీకరించుకోవాలో తర్వాతి గైడ్ వివరిస్తుంది.
దీనికి పనికొచ్చే టూల్స్
మూలాలు
- W3C — File API
- W3C — WebAssembly Core Specification
- WHATWG — HTML Standard, Web Workers
- W3C — WebCodecs