WeakMap பொருள்
JavaScript WeakMap
ஒரு JavaScript WeakMap என்பது விசை/மதிப்பு ஜோடிகளின் தொகுப்பாகும், அங்கு விசைகள் பொருள்களாக இருக்க வேண்டும்.
ஒரு WeakMap அதன் விசைகளுக்கு பலவீனமான குறிப்புகளை வைத்திருக்கிறது.
Example
// WeakMap உருவாக்கு
let myMap = new WeakMap();
// பொருள் உருவாக்கு
let myObj = {fname:"John", lname:"Doe"};
// WeakMap மதிப்பை அமை
myMap.set(myObj, "player");
// WeakMap மதிப்பைப் பெறு
let type = myMap.get(myObj);
கழிவு சேகரிப்பு
JavaScript கழிவு சேகரிப்பு என்று அழைக்கப்படும் நினைவக மேலாண்மை வழிமுறையைப் பயன்படுத்துகிறது.
முதன்மை செயல்பாடுகள்:
பலவீனமான குறிப்புகள்
வழக்கமான Map போலல்லாமல், ஒரு WeakMap அதன் விசைகள் கழிவு சேகரிக்கப்படுவதைத் தடுக்காது.
ஒரு விசை (ஒரு பொருள்) ஒரு நிரலில் குறிப்புகள் இல்லையென்றால், அது கழிவு சேகரிப்புக்கு தகுதியானதாகிறது.
விசை கழிவு சேகரிக்கப்படும்போது, அதன் விசை-மதிப்பு ஜோடி WeakMap இலிருந்து அகற்றப்படும்.
Example
let myMap = new WeakMap();
let myObj = {fname:"John", lname:"Doe"};
myMap.set(myObj, "secret");
myObj = null;
// இப்போது myMap இல் உள்ள myObj (மற்றும் அதன் மதிப்புகள்) கழிவு சேகரிக்கப்படும்
விசைகள் பொருள்களாக இருக்க வேண்டும்
முதன்மை மதிப்புகள் WeakMap இல் விசைகளாகப் பயன்படுத்த முடியாது.
விசைகள் பொருள்கள் அல்லது பதிவு செய்யப்படாத சின்னங்களாக இருக்க வேண்டும்.
தவறானது:
let weakMap = new WeakMap();
weakMap.set(42, "value"); // பிழை!
weakMap.set("key", "value"); // பிழை!
weakMap.set(true, "value"); // பிழை!
சரியானது:
let weakMap = new WeakMap();
weakMap.set({name: "John"}, "value"); // சரி!
weakMap.set([1, 2, 3], "value"); // சரி!
weakMap.set(new Date(), "value"); // சரி!
இந்த கட்டுப்பாடு கழிவு சேகரிப்பு வழிமுறையுடன் தொடர்புடையது; முதன்மை மதிப்புகள் பொருள்களைப் போல கழிவு சேகரிக்கப்படுவதில்லை.
பொருள்களைக் கண்காணித்தல்
WeakMap இல் உள்ள உள்ளீடுகள் பலவீனமாக வைத்திருக்கப்படுகின்றன: பொருள் விசை அணுக முடியாததாக மாறினால், அதன் மேப்பிங் தானாகவே அகற்றப்படும்.
கழிவு சேகரிப்பைத் தடுக்காமல் பொருள்களைப் பற்றிய தரவைக் கண்காணிப்பதற்கு இது சரியானது.
வருகையாளர்களைக் கண்காணித்தல்
let text = "";
// வருகை எண்ணிக்கையைச் சேமிக்க WeakMap உருவாக்கு
const visitsCount = new WeakMap();
// வருகையாளர் பொருள்களை உருவாக்கு
const John = {name:"John", age:40};
const Paul = {name:"Paul", age:41};
const Ringo = {name:"Ringo", age:42};
const George = {name:"George", age:43};
// வருகைகளைக் கண்காணி
track(Paul);
track(Ringo);
track(Paul);
track(Paul);
track(John);
// வருகையாளர்களைக் கண்காணிக்க செயல்பாடு
function track(visitor) {
let count = visitsCount.get(visitor) || 0;
count++;
visitsCount.set(visitor, count);
text += visitor.name + ", age " + visitor.age + ", has visited " + count + " time(s).
";
}
தானியங்கி சுத்திகரிப்பு
நீங்கள் ஒரு வருகையாளர் பொருளுக்கான அனைத்து குறிப்புகளையும் அகற்றினால்:
வருகையாளர்களைக் கண்காணித்தல்:
John = null;
// John க்கான உள்ளீடு இப்போது WeakMap (persons) இலிருந்து அகற்றப்படும்
தானியங்கி சுத்திகரிப்பு:
WeakMap மெமரி மேலாண்மையை எளிதாக்குகிறது. நீங்கள் பொருள்களை நீக்க வேண்டியதில்லை - அவை தானாகவே கழிவு சேகரிக்கப்படும்.
மறு செய்கை செய்ய முடியாதது
WeakMaps மறு செய்கை செய்ய முடியாதவை.
நீங்கள் for சுழற்சிகள், forEach(), அல்லது keys() மூலம் விசைகள் மற்றும் மதிப்புகள் வழியாக மறு செய்கை செய்ய முடியாது.
நீங்கள் அளவை அணுக முடியாது.
| செயல்பாடு | Map | WeakMap |
|---|---|---|
| மறு செய்கை (for...of) | ✓ ஆதரிக்கிறது | ✗ ஆதரிக்காது |
| forEach() முறை | ✓ ஆதரிக்கிறது | ✗ ஆதரிக்காது |
| size பண்பு | ✓ உள்ளது | ✗ இல்லை |
| keys() முறை | ✓ ஆதரிக்கிறது | ✗ ஆதரிக்காது |
| values() முறை | ✓ ஆதரிக்கிறது | ✗ ஆதரிக்காது |
| entries() முறை | ✓ ஆதரிக்கிறது | ✗ ஆதரிக்காது |
வரையறுக்கப்பட்ட முறைகள்
WeakMap வரையறுக்கப்பட்ட முறைகளை வழங்குகிறது:
WeakMap இரகசிய தரவு
தனியுரிமை பாதுகாப்பு
WeakMap தனியுரிமைக்காக வடிவமைக்கப்பட்டது: உள்ளே என்ன இருக்கிறது என்று ஆய்வு செய்ய முடியாது
Example
// WeakMap உருவாக்கு
const myMap = new WeakMap();
// தனிப்பட்ட புலங்கள் உருவகப்படுத்துதல்
class User {
constructor(name) {
myMap.set(this, {secret:"hidden data"});
this.name = name;
}
getSecret() {
return myMap.get(this).secret;
}
}
const user1 = new User("John");
secret = user1.getSecret();
Example Explained:
ஒரு WeakMap மறு செய்கையை அனுமதிக்காது.
வெளிப்புற குறியீட்டால் WeakMap இல் என்ன பொருள்கள் சேமிக்கப்படுகின்றன என்று "கண்டுபிடிக்க" முடியாது.
இரகசியத்தைப் பெற, கட்டமைப்பாளரில் பயன்படுத்தப்பட்ட this குறிப்பு உங்களுக்குத் தேவை.
வெளிப்புற குறியீட்டிற்கு user1 மற்றும் myMap ஆகியவற்றிற்கு அணுகல் உள்ளது, ஆனால் myMap இல் உள்ள this குறிப்புக்கு அல்ல, நீங்கள் வெளிப்படையாக வெளிப்படுத்தாவிட்டால், getSecret() வழியாக, இரகசிய மதிப்பு அணுக முடியாதது.
தனியுரிமை
WeakMap தனியுரிமைக்காக வேண்டுமென்றே வடிவமைக்கப்பட்டது: நீங்கள் ஒரு பொருள் விசையைப் பயன்படுத்தி அமைக்கலாம், பெறலாம், சோதிக்கலாம் மற்றும் நீக்கலாம், ஆனால் உள்ளே என்ன இருக்கிறது என்று ஆய்வு செய்ய முடியாது.
இது JavaScript வகுப்புகளில் தனிப்பட்ட பண்புகளை உருவகப்படுத்துவதற்கான ஒரு சிறந்த கருவியாக இருந்தது (#தனிப்பட்ட புலங்கள் மொழியில் சேர்க்கப்படுவதற்கு முன்பு).
தனியுரிமை
வெளிப்புற குறியீட்டிலிருந்து தரவை மறைக்க WeakMap பயன்படுத்தலாம்
நினைவக மேலாண்மை
கழிவு சேகரிப்பு தானாகவே கையாளப்படுகிறது
தானியங்கி சுத்திகரிப்பு
பொருள்கள் அகற்றப்படும்போது உள்ளீடுகள் தானாகவே அகற்றப்படும்
கட்டுப்பாடுகள்
மறு செய்கை, அளவு மற்றும் பல முறைகள் இல்லை
WeakMap பயிற்சி
JavaScript WeakMap இன் கருத்துகளைப் புரிந்துகொள்வதை இந்த பயிற்சி சோதிக்கிறது.
பின்வரும் கூற்றுகளில் எது WeakMap பற்றி சரியானது?
மேலும் அறிய
WeakMap பற்றிய மேலும் விரிவான தகவலுக்கு:
JavaScript Maps
Maps அறிமுகம் மற்றும் அடிப்படைகள்
JavaScript Map Methods
Map முறைகள் மற்றும் பண்புகள்
JavaScript Map Reference
முழுமையான Map குறிப்பு
JavaScript Sets
Sets அறிமுகம் மற்றும் அடிப்படைகள்
உலாவி ஆதரவு
WeakMap ஒரு ES6 அம்சமாகும்.
ES6 ஜூன் 2017 முதல் அனைத்து நவீன உலாவிகளிலும் முழுமையாக ஆதரிக்கப்படுகிறது:
| உலாவி | பதிப்பு | வெளியீட்டு தேதி |
|---|---|---|
| Chrome | 51 | May 2016 |
| Edge | 15 | Apr 2017 |
| Firefox | 54 | Jun 2017 |
| Safari | 10 | Sep 2016 |
| Opera | 38 | Jun 2016 |