Async Executor
Chạy VM bất đồng bộ để khóa giải mã bytecode có thể được lấy về lúc chạy thay vì đóng gói sẵn trong bundle.
Xem
Obfuscator.io Async Executor: Async Bytecode Key Getter and Async-Only VM Virtualization
Tùy chọn vmAsyncExecutor bật bộ thực thi VM bất đồng bộ. Lợi ích nổi bật của nó là vmBytecodeArrayEncodingKeyGetter giờ đây có thể trả về một Promise - một key getter bất đồng bộ - nhờ đó khóa giải mã có thể đến từ một yêu cầu mạng, IndexedDB, hoặc bất kỳ nguồn bất đồng bộ nào tại thời điểm nạp, thay vì phải có sẵn một cách đồng bộ khi mã chạy lần đầu.
Để xem hướng dẫn đầy đủ về việc lấy khóa từ backend, hãy xem Tách khóa Bytecode Array Encoding ra ngoài.
Khi nào nên dùng
Rất được khuyến nghị cho các cơ sở mã bất đồng bộ hoàn toàn. Ở chế độ này, chỉ các hàm async được ảo hóa - một hàm đồng bộ không thể trở thành bất đồng bộ mà không biến giá trị trả về của nó thành một Promise và làm hỏng những nơi gọi nó - nên mã async xuyên suốt sẽ được bảo vệ nhiều nhất. Nó vẫn hoạt động khi gốc là đồng bộ (ví dụ một IIFE đồng bộ hoặc lớp bọc UMD): các hàm async ngoài cùng bên trong được bảo vệ, còn các phần đồng bộ không được ảo hóa (phần còn lại của quá trình làm rối vẫn được áp dụng).
Những gì được biến đổi
Mọi hàm async ngoài cùng, bất kể xuất hiện ở đâu (kể cả khi lồng bên trong các lớp bọc đồng bộ). Hàm async ngoài cùng trong mỗi chuỗi là đơn vị được bảo vệ - mọi thứ bên trong nó, cả đồng bộ lẫn bất đồng bộ, đều được biên dịch vào. Các hàm đồng bộ và generator thường không được ảo hóa (phần còn lại của quá trình làm rối vẫn áp dụng cho chúng).
Bỏ qua và cảnh báo
Các async generator cũng không được ảo hóa khi một key getter bất đồng bộ đang hoạt động - một async generator phải trả về iterator của nó một cách đồng bộ và không thể chờ khóa. Ở chế độ mặc định vmTargetFunctionsMode: 'root', việc bỏ qua diễn ra âm thầm (việc chọn lựa là tự động), trừ khi không có gì được ảo hóa cả, khi đó cảnh báo VMNoFunctionsToVirtualize được báo. Ở chế độ 'comment', một cảnh báo được báo (trong bảng điều khiển, và trong mảng warnings của phản hồi API) mỗi khi một hàm bạn đánh dấu tường minh không thể được ảo hóa - hóa ra nó là đồng bộ, hoặc nó là một async generator dưới một key getter bất đồng bộ. Các cảnh báo này (VMSyncFunctionSkippedInAsyncMode, VMAsyncGeneratorSkippedInAsyncMode) có thể được tắt theo từng loại thông qua tùy chọn warnings (v7.8.0+).
Ở chế độ root, vmAsyncExecutor giữ các biểu thức khởi tạo biến cấp cao nhất ở dạng JavaScript thuần ngay cả khi vmWrapTopLevelInitializers được bật, và (v7.8.0+) một cảnh báo VMTopLevelInitializerNotVirtualized liệt kê chúng.
Yêu cầu
- Key getter bất đồng bộ yêu cầu
vmBytecodeArrayEncoding, vàvmBytecodeArrayEncodingKeyGetterphải đi cặp vớivmBytecodeArrayEncodingKey- trình làm rối kiểm tra rằng cả hai đều được đặt (hoặc cả hai đều vắng mặt) và getter được phân tích được như một biểu thức, nếu không sẽ từ chối bản dựng. - Phiên bản obfuscator 7.3.0 trở lên.
Chỉ bật tùy chọn này đơn thuần chuyển bộ thực thi sang chế độ bất đồng bộ (chỉ các hàm async ngoài cùng được ảo hóa). Việc trả về một Promise từ key getter mới là thứ mở khóa khả năng lấy khóa lúc chạy, và điều đó còn cần thêm Bytecode Array Encoding cùng với một key getter. Việc getter có trả về Promise hay không thì không thể kiểm tra lúc build, nên một getter trả về Promise khi vmAsyncExecutor tắt sẽ thất bại lúc chạy - bộ giải mã nhận được Promise thay vì khóa.
Ví dụ
Trong một cơ sở mã đồng bộ hoàn toàn, gần như không có gì được ảo hóa, vì chỉ các hàm async mới đủ điều kiện. Nếu các điểm vào của bạn không phải là async, hãy ưu tiên một key getter đồng bộ và tắt vmAsyncExecutor.
