Với sự hỗ trợ cho mã nguồn cho phép tạo mã máy, các tập lệnh máy tính trong trải nghiệm của bạn có thể được tổng hợp trực tiếp vào các hướng dẫn máy tính để thi hành, thay vì các hướng dẫn máy tính nặng mà máy tính tải hệ điề
Mở khóa Người bản địa
Để bật lên mã nguồn cho một Script , thêm bình luận --!native ở đầu trang:¹
--!trình phátprint("Hello from native code!")
Điều này cho phép tạo mã nguồn cho tất cả các chức năng trong script, và phạm vi cấp cao, nếu được xem là có lợi. Không cần thiết phải thực hiện bất kỳ thay đổi nào; hành vi của việc thực hiện mã nguồn là chính xác như trước đó và chỉ sự hiệu suất khác biệt. Tất
Ngoài ra, bạn có thể bật lên một mã nguồn cho một chức năng cụ thể bằng cách thêm thuộc tính @native :
@native
local function f(x)
return (x + 1)
end
Tốt nhất
Các mẹo sau đây sẽ giúp bạn hưởng lợi từ việc tạo mã nguồn:
Tốt nhất nên bật tính năng này trong các script thực hiện rất nhiều công việc tính toán trực tiếp trong Luau. Nếu bạn có rất nhiều hành động toán học trên các bảng và đặc biệt là buffer , script có thể là một lựa chọn tốt.
Chỉ có các hàm của script được biên dịch một cách nativo. Mã ở phía ngoài của trang phát thường được thi hành chỉ một lần và không có lợi nhiều như các chức năng được gọi nhiều lần, đặc biệt là những chức năng được gọi nhiều lần.
Được khuyến nghị rằng bạn đo thời gian mà một script hoặc chức năng mất với và không có bản dịch nguyên bản để xem khi nào tốt nhất để sử dụng nó. Công cụ Script Profiler có thể đo hiệu suất của các hàm để đưa ra các quyết định thông thái.
Có thể thú vị để đặt bình luận --!native vào mọi script chỉ vì một số trong số chúng sẽ thực hiện nhanh hơn, nhưng tạo mã người dùng có một số nhược điểm:
- Thời gian biên dịch mã là yêu cầu để tăng thời gian khởi động của máy chủ.
- Bộ nhớ thêm được sử dụng để lưu trữ mã tập hợp một cách tự động.
- Có một giới hạn trên tổng số code được tạo thành một cách nào đó trong một trải nghiệm.
Các vấn đề này có thể được giải quyết bằng cách sử dụng hợp lý đặc tính @native .
Mã để Tránh
Mặc dù tất cả các tính năng sẽ được hành xử tương tự với hoặc không có sẵn code thông báo, một số trong số chúng sẽ không chạy được nhưng có thể gây ra de-optimization hoặc một fallback được hiểu biết. Các tính năng này bao gồm:
- Sử dụng các chức năng bên trong của Luau như math.asin() với các biểu tượng không đơn vị.
- Đang lưu các biến động không đúng, lưu các hàm như foo(true) khi foo được tuyên bố là function foo(arg: string) . Hãy luôn luôn sử dụng đúng 1> type annotations1> .
Khi sử dụng Script Profiler, bạn có thể so sánh thời gian mất từ một phiên bản thường của hàm chức so với phiên bản được biên dịch từ một --!native script hoặc được gắn bằng dấu hiệu #number1
Sử dụng Type Annotations
Những lần thử này thực hiện để xác định kiểu dữ liệu có thể được tối ưu hóa nhất cho một biến cụ thể bằng cách x
Trong khi việc tạo mã nguồn sẽ hỗ trợ bất kỳ đánh máynào, những lỗi dự đoán có thể gây ra những kiểm tra không cần thiết, dẫn đến việc thi hành mã chậm hơn.
Để giải quyết một số vấn đề phổ biến, Luau kiểm tra các biến luận ánh luận trên các đại diện chức năng, nhưng nên đặc biệt để ghi lại Vector3 biến luận:
--!trình phát
-- “v” được cho là một bảng; chức năng thực hiện chậm hơn do kiểm tra bảng
local function sumComponentsSlow(v)
return v.X + v.Y + v.Z
end
-- “v” được tuyên bố là một Vector3; mã chuyên dùng choベクトル được tạo ra
local function sumComponentsFast(v: Vector3)
return v.X + v.Y + v.Z
end
Công cụ Studio
Các công cụ Studio dưới đây được hỗ trợ cho --!native script và 2> 5> chức năng 8> number15> .
Đăng nhập
Hỗ trợ debugging của các script, nhưng các view cho các địa phương/upvalues có thể bị thiếu đối tượng từ call stack khung đang thi hành mà làm việc bằng cách gọi trực tiếp.
Lưu ý cũng rằng khi debug mã được chọn cho native compilation, đặt breakpoints sẽ không thể thi hành mã cho các hàm đó.
Lập trình sẵn
Trong Script Profiler, các hàm thực hiện ngay lập tức hiển thị <native> bên cạnh chúng:
Nếu một chức năng được ghi @native hoặc trong một 6 script bên trong một 9 script không hiển thị bản ghi 2> 15> < native>5> , thì chức năng đó có thể k
Luau Heap
Trong Luau Heap profiler, memory taken by native functions hiển thị như [native] các thành phần trong đồ thị.
Phân tích kích thước
Mọi mã tối ưu hóa đều tiêu tốn bộ nhớ. Khi kích thước của mã tối ưu đạt đến giới hạn đã định, việc tối ưu hóa mã sẽ kết thúc và phần mã còn lại sẽ được thi hành một cách ngoài hành lang. Điều này làm cho việc chọn mã tối ưu rất quan trọng cho việc tối ưu hó
Để theo dõi kích thước mã nguồn của các chức năng và tập lệnh riêng lẻ:
- Hãy chắc chắn bạn đang ở trong phần màn hình máy chủ qua nút client/server toggle .
- Gọi debug.dumpcodesize() từ Bar lệnh .
Trong Cửa sổ ra력, bạn sẽ thấy tổng số các script và chức năng đã được biên dịch một cách tự nhiên lên đến điểm gọi, kích thước bộ nhớ của mã nguồn và giới hạn kích thước của mã nguồn. Sau khi xem xét tóm tắtquát, bạn sẽ thấy một bả
Đối với mỗi script, kết quả hiển thị số lượng các chức năng được tổng hợp và tốn nhớ bộ nhớ máy chủ. Mỗi chức năng sau đó được liệt kê theo thứ tự ngược dòng từ kích thước máy chủ ng�
Giới hạn và Troubleshooting
Việc biên dịch mã thành các hướng dẫn cho một CPU cụ thể yêu cầu thêm bộ nhớ lưu trữ. Bên cạnh đó, tối ưu hóa cho các hàm phức tạp có thể mất quá nhiều thời gian để thực hiện. Đánh một giới hạn bên trong sẽ báo cáo một lỗi trong cửa sổ Thoát của Studio, bao gồm:
Hàm chức năng 'f' ở dòng thứ 20 vượt quá giới hạn một cái cục mã
Lỗi này có nghĩa là một cái khối mã trong một chức năng đã sử dụng hơn 64K hướng dẫn. Điều này có thể được tránh bằng cách đơn giản hóa chức năng hoặc chia nó thành các chức năng nhỏ hơn.
Hàm chức năng 'f' ở dòng thứ 20 vượt quá giới hạn mã chức năng
Lỗi này có nghĩa là một chức năng chứa hơn 32K khối nội tại của mã. Khối nội tại của mã không hoàn toàn map đến các khối kiểm soát trong script của bạn, nhưng lỗi này có thể được tránh bằng cách đơn giản hóa kiểm soát trong chức năng hoặc chia nó thành các khối nhỏ
Hàm chức năng 'f' ở dòng 200 vượt quá giới hạn tổng số hướng dẫn của modül
Lỗi này có nghĩa là, trong tổng, chức năng đã đạt đến giới hạn 1 triệu hướng dẫn cho toàn bộ script. Ở một số trường hợp, chức n
*Chức năng 'f' ở dòng thứ 20 đã gặp sự cố giảm giá nội bộ *(hoặc) Nội quyết lỗi: Khi các mã nguồn bị giảm giá (hoặc) giảm giá
Đôi khi một chức năng chứa những thành phần mã phức tạp mà người biên dịch mã nguồn không thể xử lý hiện tại. Để tránh lỗi này, hãy kiểm tra các biểu tượng phức tạp trong mã và chia chúng thành các phần hoặc đơn giản hóa chúng, nhưng cũng hãy xem xét mở một báo cáo lỗi vớ
Giới hạn phân bổ bộ nhớ đã đạt được cho việc tạo mã nguồn
Lỗi này có nghĩa là giới hạn bộ nhớ tổng thể cho dữ liệu mã nguồn đã đạt được. Để tránh điều này, hãy thử xóa --!native > từ những script có nhiều bộ nhớ hơn, cho phép những script nhỏ hơn có thể vào khu vực giới hạn.