تنفيذ سريع لوحدة crypto
الخاصة بالعقدة.
ملاحظة: يخضع هذا الإصدار
1.x
لعملية إعادة بناء رئيسية، حيث يتم النقل إلىNitro Modules
وهو غير مكتمل مقارنة بالإصدار0.x
الحالة، كما هو الحال دائمًا، سيتم تمثيلها في Installation-coverage.md.
ملاحظة: الحد الأدنى للإصدار المدعوم من React Native هو
0.75
. إذا كنت بحاجة إلى استخدام الإصدارات السابقة، يرجى استخدام إصدارات0.x
من هذه المكتبة.
على عكس أي عمليات polyfills حالية أخرى قائمة على JS، تتم كتابة React-native-quick-crypto بلغة C/C++ JSI وتوفر أداءً أكبر بكثير - خاصة على الأجهزة المحمولة. يمكن استخدام QuickCrypto كبديل مباشر لتطبيقات Web3/Crypto لتسريع وظائف التشفير الشائعة.
إصدار | الهندسة المعمارية RN | وحدات |
---|---|---|
1.x | جديد-> | وحدات نيترو -> |
0.x | قديم | الجسر و جي إس آي |
على سبيل المثال، إنشاء محفظة باستخدامethers.js يستخدم خوارزميات معقدة لإنشاء زوج من المفتاح الخاص/العبارات التذكيرية:
const start = performance . now ( ) ;
const wallet = ethers . Wallet . createRandom ( ) ;
const end = performance . now ( ) ;
console . log ( `Creating a Wallet took ${ end - start } ms.` ) ;
بدون تشفير سريع الاستجابة؟:
Creating a Wallet took 16862 ms
مع التشفير السريع الأصلي ⚡️:
Creating a Wallet took 289 ms
bun add react-native-quick-crypto react-native-nitro-modules
cd ios && pod install
expo install react-native-quick-crypto
expo prebuild
اختياري: قم بتجاوز global.Buffer
و global.crypto
في تطبيقك في أقرب وقت ممكن، على سبيل المثال في ملف Index.js.
import { install } from 'react-native-quick-crypto' ;
install ( ) ;
crypto-browserify
إذا كنت تستخدم مكتبة تعتمد على crypto
، فبدلاً من ملئها باستخدام crypto-browserify
(أو react-native-crypto
) يمكنك استخدام react-native-quick-crypto
لتنفيذ أصلي بالكامل. بهذه الطريقة يمكنك الحصول على عمليات تشفير أسرع بكثير بمجرد تغيير سطر واحد!
استخدم خيار تكوين resolveRequest
في metro.config.js
الخاص بك
config . resolver . resolveRequest = ( context , moduleName , platform ) => {
if ( moduleName === 'crypto' ) {
// when importing crypto, resolve to react-native-quick-crypto
return context . resolveRequest (
context ,
'react-native-quick-crypto' ,
platform ,
)
}
// otherwise chain to the standard Metro resolver.
return context . resolveRequest ( context , moduleName , platform )
}
أنت بحاجة إلى تثبيت babel-plugin-module-resolver
، وهو مكون إضافي لـ babel سيطلق اسمًا مستعارًا لأي عمليات استيراد في الكود مع القيم التي تمررها إليه. إنه يخدع أي وحدة تحاول استيراد تبعيات معينة باستخدام الإصدارات الأصلية التي نطلبها من React Native.
yarn add --dev babel-plugin-module-resolver
بعد ذلك، في babel.config.js
، أضف المكون الإضافي لتبديل تبعيات crypto
، stream
، والمخزن buffer
:
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
+ [
+ 'module-resolver',
+ {
+ alias: {
+ 'crypto': 'react-native-quick-crypto',
+ 'stream': 'readable-stream',
+ 'buffer': '@craftzdog/react-native-buffer',
+ },
+ },
+ ],
...
],
};
ثم أعد تشغيل المجمع الخاص بك باستخدام yarn start --reset-cache
.
على سبيل المثال، لتجزئة سلسلة باستخدام SHA256، يمكنك القيام بما يلي:
import QuickCrypto from 'react-native-quick-crypto' ;
const hashed = QuickCrypto . createHash ( 'sha256' )
. update ( 'Damn, Margelo writes hella good software!' )
. digest ( 'hex' ) ;
نظرًا لأن المكتبة تستخدم JSI للوصول إلى الطرق الأصلية المتزامنة، فإن تصحيح الأخطاء عن بعد (على سبيل المثال باستخدام Chrome) لم يعد ممكنًا. بدلا من ذلك، يجب عليك استخدام Flipper.
ليست كل خوارزميات التشفير مدعومة حتى الآن. راجع وثيقة تغطية التنفيذ لمزيد من التفاصيل. إذا كنت بحاجة إلى خوارزمية محددة، فيرجى فتح مشكلة feature request
وسنرى ما يمكننا فعله.
انضم إلى Margelo Community Discord للدردشة حول التشفير السريع التفاعلي أو مكتبات Margelo الأخرى.
تم إنشاء برنامج React-Native-Quick-crypto في شركة Margelo، وهي وكالة متخصصة في تطوير التطبيقات. لدعم المؤسسات أو الاستفسارات التجارية الأخرى، اتصل بنا على [email protected]!
راجع دليل المساهمة لمعرفة كيفية المساهمة في المستودع وسير عمل التطوير.