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.

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 resep Mengambil Kunci Bytecode Array dari Backend.

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 dibiarkan apa adanya.

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 dibiarkan tanpa obfuskasi.

function foo() {              // sync — left as-is
    function bar() {}         // sync — left as-is

    async function baz() {    // transformed
        // any code here, including calls to other async or sync functions
    }

    async function bark() {   // transformed
        // any code here, including calls to other async or sync functions
    }
}

Yang dilewati dan peringatan

Async generator juga dibiarkan tanpa obfuskasi 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). Pada mode 'comment', sebuah peringatan dikeluarkan melalui ObfuscationResult.getWarnings() 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+).

Persyaratan

  • Key getter asinkron memerlukan vmBytecodeArrayEncoding bersama sebuah vmBytecodeArrayEncodingKeyGetter.
  • Obfuscator versi 7.3.0 atau lebih baru.

Contoh

JavaScriptObfuscator.obfuscate(code, {
    vmObfuscation: true,
    vmAsyncExecutor: true,
    vmBytecodeArrayEncoding: true,
    vmBytecodeArrayEncodingKey: 'mySecretKey123',
    // the key getter may now return a Promise
    vmBytecodeArrayEncodingKeyGetter: 'fetch("/vm-key").then((res) => res.text())'
});