TypedArray في JavaScript
تشرح هذه المقالة TypedArray
في JavaScript۔
سنشرح بالتفصيل المفهوم الأساسي لـ TypedArray
، وكل نوع، وكيفية استخدامهم، والحالات الخاصة للاستخدام.۔
YouTube Video
TypedArray في JavaScript
TypedArray
في JavaScript هو كائن لمعالجة البيانات الثنائية المؤقتة بكفاءة۔ TypedArray
يخصص ويعالج الذاكرة بناءً على أنواع بيانات محددة۔ على عكس المصفوفات العادية، يمكن أن تحتوي TypedArray
فقط على بيانات ثنائية بحجم ثابت، وليس أنواع بيانات عشوائية۔
البنية الأساسية لـ TypedArray
المكونات الرئيسية لـ TypedArray
هي ArrayBuffer
وTypedArray
نفسه۔
- ArrayBuffer: هو مخزن مؤقت بحجم ثابت يخصص البيانات الثنائية في الذاكرة۔ هذا المخزن المؤقت هو مجرد منطقة بيانات ولا يمكن القراءة منه أو الكتابة إليه مباشرة۔
- TypedArray: هو كائن مغلف يطبق نوع بيانات معين على المخزن المؤقت، مما يتيح الوصول إلى البيانات ومعالجتها۔
مثال على الاستخدام الأساسي
فيما يلي مثال على إنشاء ArrayBuffer
ثم إنشاء TypedArray
بناءً عليه۔
1// Create a 16-byte buffer
2const buffer = new ArrayBuffer(16);
3
4// Create a TypedArray (Uint8Array) to handle 8-bit unsigned integers
5const uint8Array = new Uint8Array(buffer);
6
7// Set data
8uint8Array[0] = 255;
9uint8Array[1] = 128;
10
11// Retrieve data
12console.log(uint8Array[0]); // 255
13console.log(uint8Array[1]); // 128
- في هذا المثال، يتم إنشاء
ArrayBuffer
، ثم يتم إنشاءUint8Array
بناءً على هذا المخزن المؤقت۔ يتم التعامل مع كل عنصر كعدد صحيح غير موقع مكون من 8 بت، حيث يتم تخزين القيم فقط ضمن النطاق المحدد۔
أنواع TypedArray
توجد أنواع مختلفة من TypedArray
لكل نوع من البيانات۔ الرئيسية منها هي كالتالي۔
اسم النوع | حجم العنصر | الوصف |
---|---|---|
Int8Array |
1 بايت | عدد صحيح موقع بمقدار 8 بت |
Uint8Array |
1 بايت | عدد صحيح غير موقع بمقدار 8 بت |
Uint8ClampedArray |
1 بايت | عدد صحيح غير موقع بمقدار 8 بت (يحتفظ بالقيم المقيدة) |
Int16Array |
2 بايت | عدد صحيح موقع بمقدار 16 بت |
Uint16Array |
2 بايت | عدد صحيح غير موقع بمقدار 16 بت |
Int32Array |
4 بايت | عدد صحيح موقع بمقدار 32 بت |
Uint32Array |
4 بايت | عدد صحيح غير موقع بمقدار 32 بت |
Float32Array |
4 بايت | رقم عشري بمقدار 32 بت |
Float64Array |
8 بايت | رقم عشري بمقدار 64 بت |
هذه الأنواع من TypedArray
كفوءة من حيث الذاكرة وفعّالة للتعامل مع كميات كبيرة من البيانات۔
التعامل مع TypedArrays
يمكنك الوصول إلى البيانات في TypedArray
باستخدام الفهارس تمامًا مثل المصفوفة العادية، ولكن يتم توفير عدة طرق خاصة أيضًا۔
تعيين القيم
في TypedArray
، يمكنك تعيين قيم متعددة دفعة واحدة باستخدام دالة set
۔
1const buffer = new ArrayBuffer(8);
2const int16Array = new Int16Array(buffer);
3
4// Set values
5int16Array.set([10, 20, 30]);
6
7console.log(int16Array[0]); // 10
8console.log(int16Array[1]); // 20
9console.log(int16Array[2]); // 30
- يستخدم هذا الكود الطريقة
set
لتعيين عدة قيم دفعة واحدة إلى مصفوفة من نوعInt16Array
، ويعرض كل عنصر في وحدة التحكم.۔
الحصول على مصفوفة فرعية
للحصول على جزء من TypedArray
كمصفوفة فرعية، استخدم دالة subarray
۔ هذا يشير إلى نفس المخزن المؤقت مثل TypedArray
الأصلي۔
1const int16Array = new Int16Array([1, 2, 3, 4, 5]);
2
3// Get a subarray containing elements from the 2nd to the 4th
4const subArray = int16Array.subarray(1, 4);
5
6console.log(subArray); // Int16Array [2, 3, 4]
- يسترجع هذا الكود مجموعة محددة من العناصر من مصفوفة من نوع
Int16Array
باستخدام الطريقةsubarray
ويعرض الجزء الفرعي في وحدة التحكم.۔
نسخ المخازن المؤقتة
يمكن أيضًا نسخ المخزن المؤقت لـ TypedArray
إلى TypedArray
آخر۔ باستخدام دالة set
، يمكنك النسخ من موقع محدد۔
1const srcArray = new Uint8Array([10, 20, 30, 40]);
2const destArray = new Uint8Array(4);
3
4// Copy
5destArray.set(srcArray);
6
7console.log(destArray); // Uint8Array [10, 20, 30, 40]
- ينسخ هذا الكود محتويات مصفوفة من نوع
Uint8Array
إلى مصفوفة أخرى باستخدام الطريقةset
، ويعرض المصفوفة المنسوخة في وحدة التحكم.۔
استخدام DataView
بينما يتعامل TypedArray
مع المخازن المؤقتة مع نوع بيانات ثابت، يوفر DataView
واجهة تتيح التلاعب المرن بالبيانات الثنائية مع إزاحات وأنواع بيانات عشوائية۔ هذا يتيح مزج أنواع مختلفة داخل نفس المخزن المؤقت۔
1const buffer = new ArrayBuffer(8);
2const dataView = new DataView(buffer);
3
4// Write a 32-bit signed integer at offset 0
5dataView.setInt32(0, 12345);
6
7// Write a 32-bit floating-point number at offset 4
8dataView.setFloat32(4, 12.34);
9
10console.log(dataView.getInt32(0)); // 12345
11console.log(dataView.getFloat32(4)); // 12.34000015258789
-
يستخدم هذا الكود كائن
DataView
لكتابة أنواع مختلفة من البيانات—أعداد صحيحة 32-بت وأعداد عشرية عائمة 32-بت—على نفس الذاكرة المؤقتة ويتحقق من النتائج.۔ -
DataView
يوفر مرونة أكبر في الوصول إلى البيانات مقارنة بـTypedArray
، وهو مفيد بشكل خاص عند التعامل مع ملفات ذات تنسيق ثنائي أو بروتوكولات الشبكة۔
حالات استخدام TypedArray
TypedArray
يُستخدم بشكل رئيسي للتعامل بكفاءة مع كميات كبيرة من البيانات الثنائية۔ تشمل حالات الاستخدام المحددة ما يلي۔
معالجة الصور
يُستخدم TypedArray
عند التعامل مع معلومات البكسل في بيانات الصور۔ باستخدام Uint8Array
، يمكنك تخزين قيم RGBA لكل بكسل وإجراء تحرير ومعالجة للصور۔
1const width = 100;
2const height = 100;
3const imageData = new Uint8Array(width * height * 4); // RGBA
4
5// Set pixel data
6for (let i = 0; i < imageData.length; i += 4) {
7 imageData[i] = 255; // Red
8 imageData[i + 1] = 0; // Green
9 imageData[i + 2] = 0; // Blue
10 imageData[i + 3] = 255; // Alpha
11}
- ينشئ هذا الكود بيانات صورة بعرض 100 وارتفاع 100 بصيغة RGBA باستخدام مصفوفة من نوع
Uint8Array
، ويضبط جميع وحدات البكسل إلى اللون الأحمر.۔
التعامل مع WebAssembly
يتم استخدام TypedArray
لتبادل البيانات الثنائية بين JavaScript و WebAssembly۔ من خلال مشاركة مساحة ذاكرة JavaScript و WebAssembly باستخدام ArrayBuffer
، يمكن تبادل البيانات بسرعة۔
معالجة بيانات الصوت والفيديو
TypedArray
يلعب دورًا هامًا في معالجة الصوت والفيديو۔ يمكنك تخزين أشكال موجات الصوت في Float32Array
لإجراء التشغيل والمعالجة۔
الخاتمة
TypedArray
هو أداة قوية لمعالجة كميات كبيرة من البيانات الثنائية بكفاءة۔ إنها مفيدة بشكل خاص في التطبيقات الحساسة للأداء مثل معالجة الصور وWebAssembly ومعالجة بيانات الصوت والفيديو۔ يحتوي TypedArray
على واجهة برمجة تطبيقات مشابهة للمصفوفات العادية، لكن هناك قيود تتعلق باستخدام الذاكرة وأنواع البيانات، لذلك يتطلب الأمر تمييزًا صحيحًا في الاستخدام۔
يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔