Phalcon thổi luồng gió mới vào thế giới Framework PHP
Đầu tiên xin giới thiệu với các bạn mình là 1 Mobile Developer và tôi có 1 vài ý tưởng xây dựng và phát triển những ứng dụng riêng cho mình. Nhưng ngoặt 1 nỗi các dụng dụng cho di động bây giờ mà chỉ hoạt động "offline" không có các phương thức chia sẻ hay đồng bộ dữ liệu khi người dùng thay máy ...
Đầu tiên xin giới thiệu với các bạn mình là 1 Mobile Developer và tôi có 1 vài ý tưởng xây dựng và phát triển những ứng dụng riêng cho mình. Nhưng ngoặt 1 nỗi các dụng dụng cho di động bây giờ mà chỉ hoạt động "offline" không có các phương thức chia sẻ hay đồng bộ dữ liệu khi người dùng thay máy thì thật là có bạn có thể thu hút người dùng. Vậy nên tôi bắt đầu đi tìm hiểu 1 vài ngôn ngữ, framework để xây dựng server.
Cũng chia sẻ với các bạn là Project tới đây tôi sẽ thực hiện là 1 mạng xã hội chia sẻ giúp mọi người gắn kết với nhau nên tôi có 1 số tiêu chí nhất định để chọn ngôn ngữ server:
- Nhanh, tốc độ đáp ứng và xử lý request tốt
- Hỗ trợ NoSql
Ngôn ngữ đầu tiên tôi nghĩ đến là Python với Django Framework: Python là 1 ngôn ngữ đơn giản và dễ học, khả năng xử lý dữ liệu lơn của Python là rất tốt cộng với Django là 1 Framework Full-Stack. Djando có cơ chế ORM để truy xuất cơ sở dữ liệu rất tiện dụng nhưng ngoặt một nỗi là hiện tại cơ chế này chưa hỗ trợ truy xuất NoSql. Bạn có thể cài thêm plugin hỗ trợ công việc này nhưng mà việc thao tác cũng như truy xuất là khá khó khăn và như thế làm mất đi ưu điểm của ORM trong Django cung cấp.
Tiếp theo là PHP với số lượng Framework cũng như cộng đồng phát triển cực lớn.
- Laravel: đây hiện tại là Framework được nhiều Develop sử dụng nhất thực chất công ty tôi hiện tại bây giờ cũng đang sử dụng framework này để phát triển các dự án Php. Nhưng theo như tôi tìm hiểu thì Laravel vẫn sử dụng cơ chế build trên cơ chế php thuần và đây là điều tôi lo ngại cho tốc độ thực thi của trang web mà tôi định phát triển. Cho nên tôi tạm gác framework này sang 1 bên.
- Phalcon: thực chất đây là 1 gợi ý của một người bạn khi tôi có ý định chia sẻ dự án mà mình sắp thực hiện. Đến khi tôi tìm hiểu thì thấy đây thực chất là 1 Framework thật tuyệt vời, nó đáp ứng rất tốt các yêu cầu về hệ thống cũng như ngôn ngữ mà tôi đề ra lúc ban đầu.
Dưới đây mình sẽ giới thiệu với các bạn về Phalcon (những gì mình tìm hiểu được và tại sao mình chọn Phalcon cho dự án sắp tới của mình)
Phalcon là một framework khá là trẻ (ra đời sau Laravel 1 năm, nhưng thực chất mới bùng nổ và được cộng đồng lập trình viên ủng hộ từ sau phiên bản 2.0). Phalcon là một thư viên có tính năng rất phong phú được viết bằng C biên dịch thành một PHP Extension. Điều này giúp tăng tốc độ xử lý, giảm tối đa bộ nhớ tiêu thụ khi có nhiều truy cập đồng thời.
Phalcon dễ học, dễ lập trình. Lập trình viên vẫn dùng ngôn ngữ lập trình PHP thông thường. Những hàm trong thư viện Phalcon sẽ được tối ưu tốc độ. Trong 2014, Phalcon 2.0 và ngôn ngữ Zephir sẽ phát hành. Lập trình viên viết các hàm hay dùng, cần tối ưu bằng Zephir để biên dịch ra các PHP extension mới để có thể tái sử dụng.
Phalcon là một framework đầy đủ các thành phần. Nó hỗ trợ kiến trúc MVC, cung cấp đầy đủ các tính năng tiện ích như ORM, các template engine cho hiển thị, caching dữ liệu, phân trang và một loạt các tính năng khác (tham khảo thêm các tính năng của Phalcon tại webstite http://phalconphp.com/). Nhưng sự đặc biệt của Phalcon nằm ở chỗ: thay vì phải download cả một gói thư viện gồm nhiều file PHP như các framework khác, thì với Phalcon bạn chỉ cần cài đặt chúng như một PHP module. Nhờ vậy mà quá trình cài đặt diễn ra rất nhanh chóng . Bên cạnh đó thì Phalcon là một Framework mã nguồn mở, nếu muốn, bạn có thể điều chỉnh và biên dịch lại mã nguồn.
Một nhược điểm lớn của PHP là mỗi khi có một request được gửi đến server, tất cả các file đều được đọc từ ổ đĩa cứng, thông dịch bởi một module xử lý PHP trên server và trả kết quả về cho người dùng. Đó là nguyên nhân khiến cho hiệu năng PHP không được như các ngôn ngữ khác như Ruby (trên Rails) hay Python (trên Django, Flask). Nhưng với Phalcon, do được viết dưới dạng PHP module nên toàn bộ Framework đều được nạp sẵn vào trong RAM khi hệ thống khởi động, loại bỏ hoàn toàn quá trình đọc Framework từ ổ đĩa cứng mỗi khi có request tới.
Tạm thời ở thời điểm hiện tại tôi cũng chưa tìm hiểu kỹ về cấu trúc và cách hoạt động của Phalcon. Nhưng khi đi tìm hiểu về nó mình có đọc được 1 bài về so sánh hiệu năng của các nên tảng chạy PHP thứ mà kiến cho tốc độ của Phalcon vượt trội hơn các framework hiện tại.
So sánh hiệu năng của những nền tảng chạy PHP – HHVM, Zephir và PHP.
Kể từ những phiên bản đầu tiên PHP, tốc độ xử lý của PHP luôn là một vấn đề lớn, mặc dù đã có một số cải tiến trong những phiên bản mới.
Bên cạnh những cải tiến của chính nhóm phát triển PHP, thì hiện nay cũng xuất hiện những nền tảng bên ngoài giúp nâng cao tốc độ của PHP. HHVM của Facebook, ZendOpache của Zend và Zephir của nhóm phát triển Phalcon là 3 nền tảng giúp nâng cao tốc độ PHP, đồng thời cũng dành được nhiều sự quan tâm nhất hiện nay.
- HHVM
HHVM- Là một nền tảng chạy PHP (tương tự như PHP-FPM hay mod_php) được phát triển bởi Facebook. HHVM là tên viết tắt của HipHop Virtual Machine.
Facebook xây dựng HipHop VM để thay thế cho HPHPc- một trình dịch PHP sang C++. HipHop VM giúp tăng tốc độ cho ứng dụng PHP bằng cách sử dụng một trình biên dịch JIT (Just In Time). Trong các phiên bản gần đây, nhóm phát triển đã đạt được nhiều bước tiến mới giúp HHVM có thể tương thích tốt với các thư viện PHP hiện tại (Danh sách thư viện chạy được với HHVM).
Việc tương thích tốt với các thư viện PHP sẽ giúp các ứng dụng PHP hiện tại có thể chạy trực tiếp trên HHVM và tận dụng được trình biên dịch JIT của nó. Mặc dù vẫn còn một số vấn đề với phiên bản HHVM hiện tại nhưng với tốc độ phát triển hiện tại, HHVM hoàn toàn có thể trở thành nền tảng mới để chạy PHP
- OPcache
Những nỗ lực tăng tốc xử lý cho PHP của Zend đã dẫn đến sự ra đời của OPCache. Khác với APC,OPCache không lưu sử dụng mô hình lưu trữ key/value, nó tập trung vào việc tối ưu và caching mã nguồn PHP.
Theo một số tài liệu, Zend OPcache giúp tăng hiệu suất bằng cách lưu trữ những đoạn bytecode đã được dịch sẵn trong RAM, để từ đó giảm các thao tác đọc mã nguồn từ ổ đĩa. Ngoài ra, OPCache còn có thể tối ưu lại các đoạn bytecode giúp giảm thời gian thực thi
- Zephir
Trong một nỗ lực khác, nhóm lập trình Phalcon Framework đã xây dựng nên Phalcon bằng ngôn ngữ Zephir. Phalcon là một PHP Framework được viết bằng ngôn ngữ lập trình C, sau đó được biên dịch thành một PHP extension(thành phần mở rộng cho PHP). Thực tế thì Phalcon Framework không phải là framework đầu tiên xây dựng theo phương pháp này, trước đó Yaf Framework cũng đã được xây dựng bằng phương pháp tương tự. Mục tiêu của Phalcon là trở thành Framework có tốc độ nhanh nhất cho PHP.
Mặc dù đạt được tốc độ cao, tuy nhiên với cách làm trên, Phalcon cũng gây khó cho các lập trình viên PHP vì toàn bộ mã nguồn được viết bằng C. Vì vậy, đội phát triển Phalcon đã quyết định viết lại framework này bằng ngôn ngữ lập trình Zephir.
Zephir là một ngôn ngữ khá đơn giản, cú pháp của Zephir là sự kết hợp giữa PHP và C. Khi biên dịch, toàn bộ mã nguồn Zephir sẽ được chuyển đổi sang ngôn ngữ lập trình C, kết quả biên dịch sau đó sẽ được dùng để tạo nên PHP extension.
Phalcon Query Language
Vậy là Phalcon đã giải quyết tốt vấn đề hiệu năng mà tôi đặt ra, thế còn vấn đề thứ 2 về cơ sở dữ liệu liệu phalcon có hỗ trợ các hệ cơ sở dữ liệu mà tôi đang cần không? Khi ghé qua trang chủ của Phalcon tôi đã vô cùng ngạc nhiên và thích thú khi Phalcon hỗ trợ rất nhiều kiểu truy vấn cũng như là các hệ cơ sở dữ liệu khác nhau.
-
ORM cho phép chuyển đổi dữ liệu khi truy vấn từ dạng bảng qua dạng Object thông thường. ORM trong Phalcon hỗ trợ MySQL, PostgreSQL và SQLite.
-
PHQL PHQL ở một high-level. object-oriented SQL này cho phép bạn viết các câu truy vấn theo dạng chuẩn rồi mapping dữ liệu trả về của nó sang dạng classes and objects để thuận tiện hơn cho việc sửa dụng. Mình rất thích kiểu như này, vì khi thao tác với ORM mình thường gặp khó khăn khi viết các câu truy vấn lồng nhau.
-
ODM for MongoDB đây cái mình quan tâm nhất thì đây rồi, ODM của Phalcon hỗ trợ truy vấn vào MongoDB cung cấp các hàm CRUD cơ bản.
-
Transactions cơ chế này giúp đồng bộ và bảo đảm tính toàn vẹn của dữ liệu được tối ưu.
-
Cache truy vấn dữ liệu qua Cache. Cơ chế này sẽ cache lại những dữ liệu mà bạn thường xuyên thao tác nhằm tăng tốc dộ truy vấn.
Tới đây các bạn đã thấy được 1 số điểm nổi bật của Phalcon chưa, hiện tại thì mình vẫn chưa thực sự thao tác với Framework này nhưng trong bài viết sau mình sẽ giới thiệu với các bạn về cấu trúc cũng như hướng dẫn các bạn xây dựng 1 ứng dụng demo hoàn chỉnh.