Interceptez, modifiez et étendez le comportement fondamental de JavaScript.
// Proxy avancé pour validation et logging
const validator = {
set(target, prop, value) {
if (prop === 'age' && (value < 0 || value > 150)) {
throw new Error('Âge invalide');
}
console.log(`[${new Date().toISOString()}] ${prop} = ${value}`);
target[prop] = value;
return true;
}
};
const person = new Proxy({}, validator);
// Reflect API pour opérations avancées
const obj = { a: 1, b: 2 };
Reflect.set(obj, 'c', 3);
console.log(Reflect.get(obj, 'a')); // 1
🪄 Proxy Intelligent
2. Web Workers & Multithreading
Exécutez du code JavaScript en arrière-plan sans bloquer l'interface utilisateur.
// Création d'un Worker
const worker = new Worker('worker.js');
// Envoi de données
worker.postMessage({ operation: 'calculate', data: largeArray });
// Réception des résultats
worker.onmessage = (event) => {
console.log('Résultat:', event.data);
};
// Gestion des erreurs
worker.onerror = (error) => {
console.error('Erreur worker:', error);
};
🧵 Calcul intensif avec Web Worker
Sans Worker
Avec Worker
Worker inactif
3. SharedArrayBuffer & Atomics
Partagez de la mémoire entre plusieurs workers pour des performances maximales.
// Création d'un buffer partagé
const sharedBuffer = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 4);
const sharedArray = new Int32Array(sharedBuffer);
// Opérations atomiques (thread-safe)
Atomics.store(sharedArray, 0, 42);
const value = Atomics.load(sharedArray, 0);
Atomics.add(sharedArray, 1, 5);
Atomics.compareExchange(sharedArray, 2, 0, 100);
🔄 Mémoire partagée entre workers
4. Gestion de la Mémoire & Performance
WeakMaps, WeakSets, et techniques d'optimisation mémoire.
// WeakMap - permet le garbage collection
const weakMap = new WeakMap();
let obj = { data: 'sensible' };
weakMap.set(obj, 'valeur secrète');
// Quand obj n'est plus référencé, la paire est supprimée automatiquement
// WeakSet - idem pour les sets
const weakSet = new WeakSet();
weakSet.add(obj);
// Performance measurement
performance.mark('start');
// ... opération ...
performance.mark('end');
performance.measure('MonOp', 'start', 'end');
const measure = performance.getEntriesByName('MonOp')[0];
console.log(`Durée: ${measure.duration}ms`);
📊 Moniteur de mémoire
0%
5. Internationalization (i18n) Avancée
Formatez dates, nombres et textes selon les locales.
// Formater des nombres selon la locale
const numberFormat = new Intl.NumberFormat('fr-FR', {
style: 'currency',
currency: 'EUR'
});
console.log(numberFormat.format(1234.56)); // 1 234,56 €
// Formater des dates
const dateFormat = new Intl.DateTimeFormat('fr-FR', {
dateStyle: 'full',
timeStyle: 'long'
});
console.log(dateFormat.format(new Date()));
// Relative Time Format
const rtf = new Intl.RelativeTimeFormat('fr', { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // "hier"
🎯 Niveau Architecte atteint !
Vous maîtrisez maintenant les concepts les plus avancés de JavaScript. Prochaines étapes :
contributeur Open Source, création de frameworks, ou spécialisation en systèmes distribués !