Python vốn chạy trên máy chủ và máy tính cá nhân. Vài năm gần đây, nó đã chạy được cả trong trình duyệt nhờ WebAssembly — công nghệ cho phép thực thi mã biên dịch ngay trên trang web.
WebAssembly là gì?
Đó là một định dạng bytecode mà mọi trình duyệt hiện đại đều chạy được, với tốc độ gần với mã máy. Ban đầu nó phục vụ các ứng dụng cần hiệu năng như trò chơi và xử lý đồ họa.
Vì trình thông dịch Python viết bằng C, và C biên dịch được sang WebAssembly, nên về nguyên tắc Python chạy được trong trình duyệt. Điều này đã thành hiện thực.
Pyodide
Pyodide là bản Python biên dịch sang WebAssembly, kèm theo nhiều thư viện khoa học phổ biến — NumPy, Pandas, Matplotlib, scikit-learn đều dùng được.
<script src="https://cdn.jsdelivr.net/pyodide/v0.26.0/full/pyodide.js"></script>
<script>
async function main() {
const pyodide = await loadPyodide();
await pyodide.loadPackage("numpy");
const ketQua = pyodide.runPython(`
import numpy as np
mang = np.array([1, 2, 3, 4, 5])
float(mang.mean())
`);
console.log(ketQua); // 3.0
}
main();
</script>
Toàn bộ chạy trong trình duyệt người dùng. Không có máy chủ nào tham gia sau khi trang được tải.
PyScript
PyScript xây trên Pyodide, cho phép viết Python thẳng trong HTML:
<script type="py">
from pyscript import display
import pandas as pd
df = pd.DataFrame({"thang": [1, 2, 3], "doanh_thu": [100, 150, 130]})
display(df)
</script>
Cách viết gần với người quen Python hơn, không cần biết nhiều JavaScript.
Dùng để làm gì?
Dạy và học lập trình
Đây là ứng dụng thuyết phục nhất. Người học chạy được code Python ngay trên trang web, không phải cài đặt gì. Với lớp học đông người dùng máy khác nhau, việc này loại bỏ hẳn khâu tốn thời gian nhất.
Tài liệu có ví dụ chạy được
Thay vì khối code tĩnh, tài liệu có thể cho người đọc sửa và chạy thử ngay tại chỗ. Đó là cách học hiệu quả hơn nhiều so với đọc suông.
Công cụ xử lý dữ liệu phía người dùng
Đây là ứng dụng thú vị về mặt quyền riêng tư: dữ liệu không rời khỏi máy người dùng. Một công cụ phân tích tệp CSV chạy hoàn toàn trong trình duyệt không gửi dữ liệu đi đâu cả.
Với dữ liệu nhạy cảm — hồ sơ y tế, số liệu tài chính — đây là lợi thế thật sự chứ không chỉ là điểm kỹ thuật.
Trang trình diễn
Thư viện Python có thể cho người dùng thử ngay trên trang chủ mà không phải cài đặt.
Hạn chế cần biết
Tải về khá nặng. Riêng phần lõi Python đã vài chục megabyte, thêm thư viện thì nhiều hơn. Lần tải đầu tiên chậm, dù sau đó được lưu đệm.
Chậm hơn Python thường. WebAssembly nhanh nhưng vẫn có khoảng cách so với chạy trực tiếp. Với tính toán nặng, khác biệt rõ rệt.
Không truy cập được hệ thống tệp thật. Có một hệ thống tệp ảo trong bộ nhớ, nhưng code đọc ghi tệp trên đĩa sẽ không chạy như mong đợi.
Không phải thư viện nào cũng dùng được. Thư viện thuần Python thì gần như luôn được. Thư viện có phần lõi C cần được biên dịch riêng cho WebAssembly.
Không có mạng theo cách thông thường. Các thư viện gọi HTTP phải dùng cơ chế của trình duyệt và chịu ràng buộc về nguồn gốc chéo.
Khi nào nên dùng?
Hợp lý: công cụ giáo dục, tài liệu tương tác, xử lý dữ liệu nhạy cảm phía người dùng, trang trình diễn thư viện.
Chưa hợp lý: ứng dụng web thông thường, thứ cần tải nhanh, tính toán nặng, hoặc bất cứ thứ gì mà JavaScript làm tốt hơn.
Nói thẳng: nếu bạn đang xây một trang web bình thường, hãy dùng JavaScript. Python trong trình duyệt giải quyết một bài toán cụ thể — đưa hệ sinh thái Python tới chỗ không cài đặt được — chứ không thay thế JavaScript.
Nhìn về phía trước
Đây vẫn là lĩnh vực đang phát triển. Dung lượng tải và tốc độ khởi động đang được cải thiện dần, và ngày càng nhiều thư viện có bản dựng cho WebAssembly.
Điều thú vị không nằm ở việc thay thế JavaScript, mà ở chỗ nó xóa bỏ rào cản cài đặt — thứ vẫn là trở ngại lớn nhất với người mới học lập trình.