Dokumentasi
/
Obfuskasi VM
/

Async Executor

Async Executor

Pro
v7.3.0+

Jalankan VM secara asinkron sehingga kunci dekripsi bytecode dapat diambil saat runtime alih-alih ikut dikirim di dalam bundel.

Tonton

Obfuscator.io Async Executor: Async Bytecode Key Getter and Async-Only VM Virtualization

Tonton di YouTube

Opsi vmAsyncExecutor mengaktifkan executor VM asinkron. Manfaat utamanya adalah vmBytecodeArrayEncodingKeyGetter kini boleh mengembalikan Promise - sebuah key getter asinkron - sehingga kunci dekripsi dapat berasal dari permintaan jaringan, IndexedDB, atau sumber async mana pun saat pemuatan alih-alih harus tersedia secara sinkron ketika kode pertama kali dijalankan.

Untuk panduan lengkap mengambil kunci dari backend, lihat Kunci Bytecode Array Encoding.

Kapan menggunakannya

Sangat direkomendasikan untuk basis kode yang sepenuhnya async. Dalam mode ini hanya fungsi async yang divirtualisasi - sebuah fungsi sinkron tidak dapat dijadikan async tanpa mengubah nilai kembaliannya menjadi Promise dan merusak pemanggilnya - sehingga kode yang async di seluruh bagiannya mendapatkan cakupan paling luas. Ini tetap berfungsi ketika bagian akarnya sinkron (misalnya IIFE sinkron atau pembungkus UMD): fungsi async terluar di dalamnya tetap terlindungi, sementara bagian yang sinkron tidak divirtualisasi (obfuskasi lainnya tetap diterapkan).

Apa yang ditransformasi

Setiap fungsi async terluar, di mana pun ia muncul (termasuk yang bersarang di dalam pembungkus sinkron). Fungsi async terluar pada setiap rantai adalah unit yang terlindungi - semua yang ada di dalamnya, baik sinkron maupun async, ikut dikompilasi. Fungsi sinkron dan generator biasa tidak divirtualisasi (obfuskasi lainnya tetap diterapkan pada fungsi tersebut).

JavaScript

Yang dilewati dan peringatan

Async generator juga tidak divirtualisasi ketika key getter asinkron aktif - sebuah async generator harus mengembalikan iteratornya secara sinkron dan tidak dapat menunggu kunci. Pada mode bawaan vmTargetFunctionsMode: 'root', yang dilewati bersifat diam-diam (pemilihan dilakukan otomatis), kecuali jika tidak ada satu pun yang divirtualisasi, yang akan melaporkan VMNoFunctionsToVirtualize. Pada mode 'comment', sebuah peringatan dilaporkan (di dasbor, dan di array warnings pada respons API) setiap kali fungsi yang Anda tandai secara eksplisit tidak dapat divirtualisasi - ternyata fungsi tersebut sinkron, atau merupakan async generator di bawah key getter asinkron. Peringatan-peringatan ini (VMSyncFunctionSkippedInAsyncMode, VMAsyncGeneratorSkippedInAsyncMode) dapat dibisukan per jenisnya melalui opsi warnings (v7.8.0+).

Dalam mode root, vmAsyncExecutor membiarkan inisialisasi variabel tingkat atas tetap berupa JavaScript biasa meskipun vmWrapTopLevelInitializers aktif, dan (v7.8.0+) peringatan VMTopLevelInitializerNotVirtualized mencantumkannya.

Persyaratan

  • Key getter asinkron memerlukan vmBytecodeArrayEncoding, dan vmBytecodeArrayEncodingKeyGetter harus dipasangkan dengan vmBytecodeArrayEncodingKey - obfuscator memvalidasi bahwa keduanya disetel (atau keduanya tidak ada) dan bahwa getter dapat diurai sebagai ekspresi, dan menolak build jika tidak.
  • Obfuscator versi 7.3.0 atau lebih baru.

Mengaktifkan opsi ini saja hanya mengalihkan executor ke mode async (hanya fungsi async terluar yang divirtualisasi). Mengembalikan Promise dari key getter itulah yang membuka pengambilan kunci saat runtime, dan hal itu tambahan memerlukan Bytecode Array Encoding beserta sebuah key getter. Apakah getter mengembalikan Promise tidak dapat diperiksa saat build, sehingga getter yang mengembalikan Promise dengan vmAsyncExecutor nonaktif akan gagal saat runtime - dekoder menerima Promise alih-alih kuncinya.

Contoh

JavaScript

Pada basis kode yang sepenuhnya sinkron, hampir tidak ada yang divirtualisasi, karena hanya fungsi async yang memenuhi syarat. Jika titik masuk Anda bukan async, lebih baik gunakan key getter sinkron dan biarkan vmAsyncExecutor nonaktif.