JavaScript WeakMap

பலவீனமான குறிப்புகளின் விசை-மதிப்பு தொகுப்பு

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 (மற்றும் அதன் மதிப்புகள்) கழிவு சேகரிக்கப்படும்
{fname: "John", lname: "Doe"}
"secret"

விசைகள் பொருள்களாக இருக்க வேண்டும்

முதன்மை மதிப்புகள் 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 வரையறுக்கப்பட்ட முறைகளை வழங்குகிறது:

new WeakMap()
புதிய WeakMap பொருளை உருவாக்குகிறது
get(key)
WeakMap இல் ஒரு விசைக்கான மதிப்பைப் பெறுகிறது
set(key, value)
WeakMap இல் ஒரு விசைக்கான மதிப்பை அமைக்கிறது
delete(key)
விசையால் குறிப்பிடப்பட்ட உறுப்பை அகற்றுகிறது
has(key)
விசை WeakMap இல் இருந்தால் true தரும்

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 எந்த வகை விசைகளையும் ஏற்கும்
✗ தவறு! WeakMap இல் விசைகள் பொருள்களாக மட்டுமே இருக்க வேண்டும்
WeakMap அதன் விசைகளுக்கு பலவீனமான குறிப்புகளை வைத்திருக்கிறது
✓ சரி! WeakMap பலவீனமான குறிப்புகளை வைத்திருக்கிறது, இது கழிவு சேகரிப்பைத் தடுக்காது
WeakMap க்கு size பண்பு உள்ளது
✗ தவறு! WeakMap க்கு size பண்பு இல்லை
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