9 điểm bởi xguru 2024-05-27 | 2 bình luận | Chia sẻ qua WhatsApp
  • PHP hiện chiếm khoảng 75% số website trên Internet
  • PHP có thể không phải là “cậu trai quyến rũ” trong các ngôn ngữ lập trình, nhưng đã đóng vai trò quan trọng kể từ khi Internet ra đời
  • Giờ đây có thể chạy PHP hoàn chỉnh trên Wasmer và Wasmer Edge (open beta)

Tại sao việc chạy PHP trên WebAssembly lại quan trọng

  • Nhờ đặc tính của WebAssembly, có thể giới hạn an toàn các tài nguyên mà chương trình được phép truy cập
  • Có thể chạy PHP an toàn mà không có overhead của ảo hóa hệ điều hành hay phần cứng
  • Nhóm Wasmer đã đầu tư rất nhiều thời gian để PHP chạy hoàn hảo và nhanh nhất có thể trên WebAssembly
  • Bằng cách bật opcode caching trong WebAssembly, họ đã đạt tốc độ nhanh hơn tới 3 lần

Mang đến khả năng mở rộng kiểu serverless cho ứng dụng PHP

  • Việc mang khả năng mở rộng kiểu serverless cho mọi ứng dụng PHP có thể mở ra giá trị rất lớn
  • Có thể chạy ứng dụng PHP ở Edge và chỉ phải trả một phần nhỏ so với mức giá mà các nhà cung cấp cloud áp dụng
  • Có thể chạy mọi ứng dụng PHP bằng Wasmer mà không cần lo ứng dụng phá vỡ sandbox và thực hiện những hành vi có hại không nên làm

Các framework PHP phổ biến nhất có thể chạy trên Wasmer và Wasmer Edge

  • WordPress
  • Symfony
  • Laravel
  • Tất cả template PHP: https://wasmer.io/templates?language=php
  • Lưu ý: hỗ trợ của Wasmer Edge cho custom file system volume vẫn đang được phát triển. Các ứng dụng đã triển khai dùng SQLite (như WordPress hoặc Symfony) hiện chỉ lưu thay đổi cơ sở dữ liệu trong bộ nhớ chứ chưa lưu bền vững

Tận dụng tối đa WebAssembly và PHP

  • Bằng cách bật opcode caching, có thể chạy WordPress nhanh hơn 3 lần mà không cần chỉnh sửa, từ 600ms xuống 200ms

Tự thử ngay

  • Nếu bình thường bạn chạy php -S localhost:8000 ., thì giờ có thể chạy hoàn toàn trong sandbox thông qua Wasmer:
    wasmer run php/php --mapdir:/app:. -- /app -S localhost:8000  
    
  • WordPress cũng có thể chạy local dễ dàng. Sau khi clone repository WordPress, chạy wasmer run . --net từ thư mục gốc (cần Wasmer 4.3.1)
  • Một PHP CLI đầy đủ tính năng được cung cấp để chạy trên server trong trạng thái được sandbox hoàn toàn
  • Bạn không còn phải lo ứng dụng truy cập vào những thứ như /etc/passwd nữa

Thành tựu kỹ thuật

  • Việc khiến PHP hoạt động hoàn hảo trên WebAssembly trong Wasmer không hề dễ dàng
  • Họ đã lần theo toàn bộ quá trình và giải quyết nhiều vấn đề:
    • Phát hiện một lỗi khó hiểu trong triển khai longjmp/setjmp cần cho việc dùng câu lệnh try/catch trong PHP, nơi stack bị ghi đè và không được khôi phục đúng cách
    • Tìm ra và sửa một lỗi khiến các HTTP call đi ra ngoài chậm hơn 10 lần
    • Bật PHP opcache mặc định để giúp thời gian chạy PHP nhanh hơn tới 3 lần
    • Nhiều chỉnh sửa nhỏ cho lớp ảo hóa file system và networking (IPv6)
  • Nếu trước đây bạn từng làm theo bài blog chạy WordPress trên Wasmer, bạn sẽ biết rằng khi đó phải sửa rất nhiều mã nguồn (hay còn gọi là hack) để thay đổi hành vi trong WordPress và tránh kích hoạt các edge case gây chặn
  • Trong bản phát hành Wasmer mới nhất, WordPress, Laravel và Symfony chạy được trên Wasmer mà không cần bất kỳ sửa đổi mã nguồn nào

Tốc độ

  • Chỉ chạy PHP ở tốc độ mặc định là chưa đủ; họ muốn nó chạy nhanh nhất có thể trên WebAssembly
  • PHP có mô-đun Zend Opcache giúp tăng tốc độ thực thi lên đáng kể
  • Mô-đun opcode caching tối ưu hóa và lưu cache bytecode mà mã nguồn PHP được chuyển đổi thành, nhờ đó tiết kiệm thời gian phân tích cú pháp AST cho các file đã được xử lý
  • Opcode caching có thể tăng số lượng request mà ứng dụng xử lý lên tới 3 lần, nên việc bật nó trên WebAssembly có vẻ là điều hiển nhiên
  • Tuy nhiên, opcode caching (và việc nạp Zend module) mặc định bị tắt vì cần đến dlopen, dlsym... vốn không khả dụng trong Wasm
  • Họ bắt đầu một hành trình đặc biệt: bật opcode caching trong PHP
    • Sau quá trình nghiên cứu, họ tìm ra một cách mới để liên kết tĩnh, và dù phải sửa rất nhiều thứ trong quá trình đó, cuối cùng cũng chạy thành công
  • Thời gian chạy WordPress trên Wasm không có Opcache: ~620ms
  • Thời gian chạy WordPress trên Wasm có bật Opcache: ~205ms
  • Chỉ riêng việc bật Opcache đã mang lại mức tăng tốc 3 lần!
  • Họ nhận ra vẫn còn nhiều chỗ để cải thiện nhằm đưa PHP tiến gần tốc độ native hơn nữa (hãy chờ đón!)

Mở ra thêm nhiều cơ hội

  • Điều này mở ra thêm nhiều cơ hội cho các dự án hiện phụ thuộc vào Emscripten để chạy PHP trong trình duyệt, như WordPress playground
    • Những dự án như vậy có thể được đóng gói để chạy được cả trong trình duyệt lẫn ở Edge
  • Họ đang chuẩn bị một cách tiếp cận hoàn toàn mang tính cách mạng cho cold-start (Cloudflare & Fly.io, chúng tôi đang dõi theo các bạn!)
  • Một thời kỳ đầy hứng khởi đang đến với thị trường Edge

2 bình luận

 
tsboard 2024-05-28

Cá nhân tôi thấy việc PHP đến giờ vẫn còn được sử dụng rất mạnh mẽ vừa khá ấn tượng vừa khá thú vị. Haha, nghe nói sau khi vượt qua thời kỳ từng mang tiếng xấu, giờ nó đã thay đổi rất nhiều, nên tôi cũng nghĩ hay là thử dùng lại PHP một lần nữa.

 
xguru 2024-05-29

Cả Hacker News lẫn GeekNews đều có nhiều người không thích PHP, haha
Nhưng mình nghĩ chừng nào công nghệ “web” chưa bị thay thế hoàn toàn bằng thứ khác thì nó vẫn sẽ tiếp tục được dùng.
Có lẽ không nên tập trung vào “ngôn ngữ”, mà nên xem nó như một trong những công nghệ phù hợp với “web” hơn.