ColdFusion vs PHP

Phan Nhật Minh
(phannhatminh)

Thành viên danh dự
Có đ/c nào hứng thú nghiên cứu coldfusion không nhỉ? Mình thấy cái này tương lai có triển vọng đánh bại PHP nếu như nó được chuyển sang public domain thay vì tồn tại theo dạng comercial như hiện nay. Theo mình thì ngôn ngữ này có một số điểm rất mạnh sau:
+ Tính tin cậy và bảo mật cực tốt do khả năng kiểm soát chặt chẽ input, variable thông qua pre-defined parameters đồng thời có thể run trên server dưới dạng encrypted code nhằm tránh các lỗi bảo mật liên quan đến coding disclosure (một lỗi rất phổ biến được các haker tận dụng hiểu quả và triệt để với PHP). Ngay cả khi chạy trên chế độ non-encrypted cũng vẫn rất an toàn do cơ chế management division rất được chú trọng. Eg: Khi coder muốn viết một chương trình giao tiếp với database thì tham biến cần biết duy nhất là database label, hoàn toàn không cần phải provide dbname, dbpass hay la host address như PHP. Vì admin ở cấp cao hơn sẽ chịu trách nhiệm thiết lập một hidden reference chứa các tham số dbname, dbpass và host address point tới label đó. Khả năng này khiến hệ thống database được bảo mật một cách tối đa trong trường hợp hacker cố gắng khai thác lỗi coding disclosure hoặc cần phải sự dụng external coder với độ tịn cậy thấp để phát triển các internal application.
+ Cấu trúc ngôn ngữ của coldfusion rất gần với HTML và tương tác rất tốt với HTML đặc biệt nếu bạn sử dụng các trương trình hỗ trợ như Dreamweaver. Vì coldfusion vừa là sripting language vừa là markup language như HTML.
+ Coldfusion còn có khả năng coding trên cả 3 cấu trúc language phổ biến hiện nay là object oriented(fusebox), scripting và markup do vậy rất thuận tiện và thoái mái cho các coders. Mặc dầu vậy điểm mạnh của CFML vẫn là nền tảng markup.
+ Sometimes bạn còn cảm thấy CFML giống như drag-n-drop programming language với khả năng phát triển các ứng dụng siêu nhanh. Eg Bạn có thể viết "from scratch" một forum tựa như vb hay phpbb trong vòng 2 tuần! với phần lớn công việc là design và drag-n-drop thay vì phải coding cho từng text box hay radio button như PHP.
+ Coldfusion có đặc tính independent vượt trội so với PHP bao gồm platform idependent, browser independent, database independent trong khi PHP không hỗ trợ database independent và browser independent.

Mặc dầu vậy CFML không phải không có những điểm yếu so với PHP:
+ Là thế hệ ngôn ngữ phát triển sau PHP và tập trung chính vào các ứng dung comercial thế nên CFML không phải là một ngôn ngữ flexible và sophisticated như PHP. CFML chỉ giới hạn ở các web application thông dụng và đặc biệt tập trung vào các ứng dụng web - database driven.
+ CFML thật sự là một comerical / instant language không thích hợp cho các mục đích nghiên cứu , học tập vì khi làm việc với nó việc duy nhất mà bạn cần quan tâm là thiết kế giao diện mà không hề biết đến những "dirty work" đằng sau nó.
+ CFML không thuộc public domain thế nên tính phổ biến của nó thua xa PHP, và bạn có thể cảm thấy thất vọng khi có ý định tìm kiếm các open-source application với CFML.
+ CFML sometimes tạo cho bạn cảm giác rườm rà và confuse khi debuging và analyzing vì bản chất markup language structure không phải là một structure thích hợp cho một scripting/programming language(Eg: khi coding dưới dạng markup bạn không thể tạo lập các funtion hoặc object).

Một số nhận xét chung như vậy, đ/c nào có hứng thú thì add tiếp :)
 
Hì, mình cũng đã nghe về Cold Fusion (của Macromedia pt đúng k0), nhưng chưa thấy ứng dụng nào của nó. Bạn có thể cho ví dụ được k0?
 
Trên đây là ví dụ về một hệ thống bulletin board tương đối hoàn chỉnh viết "from scratch" bằng CFML và được hoàn thành trong vòng 3 ngày dựa trên cấu trúc giao diện của YaBB và cấu trúc hệ thống của PHPBB. Backend database là MSSQL.
Source code bác có thể download tại link này cũng được viết "from scratch" bằng CFML với khả năng support multi sub portal. Những hệ thống portal như vậy nếu viết bằng PHP sẽ đòi hỏi một khối lượng lớn thời gian + khả năng mở rộng và phát triển rất hạn chế (Eg postnuke, phpnuke...).

Xét về khía cạnh kinh tế, CFML bị nhiều người coi là một ngôn ngữ "quý tộc" do giá thành khởi điểm của nó cũng như các ứng dụng viết trên nó, mặc dầu vậy CFML lại kinh tế hơn PHP nhiều ở các chi phí: trainning, developing, implementing, mantaining, securing, enhancing ở khía cạnh long-run.
Về trainning :
+ Với một developer đã thôgn thạo các loại web scripting language khác như ASP, Perl hay PHP thì chỉ cần khoảng 1 tuần tiếp xúc với CFML là có thể nắm được toàn bộ cấu trúc ngôn ngữ cơ bản do CFML rất gần gũi với HTML về mặt syntax, còn cấu trúc ngôn ngữ thì không khác gì các loại scripting language khác. Do vậy hầu hết các công ty sử dụng CFML hiện nay khi tuyển web developer đều không coi việc hiểu biết về CFML là một điều kiện bắt buộc mà chỉ yêu cầu applicant biết at least 1 trong số các web scripting language như PHP hay ASP và thông thạo về SQL server, HTML/Dreamweaver là được còn hiểu biết thêm về CFML chỉ là optional.
Về developing:
+ CFML đặc biệt nổi bật với low-cost developing khi so sánh với PHP hay ASP ở 2 đặc điểm :
- Less programming skill
- Less time consumming
Chính vì đặc điểm này mà CFML thu hút được sự chú ý của nhiều công ty với mong muốn phát triển các ứng dụng web/db với chi phí thấp bằng cách đào tạo ngay những nhân viên sẵn có thay vì phải tuyển mộ thêm.
Đồng thời với những ứng dụng phổ thông không quá phức tạp thì CFML là một lựa chọn sáng suốt nếu bạn muốn rút ngắn thời gian phát triển.
Về implementing :
+ Macromedia rất quan tâm đến vấn đề management division và low cost implementing trong CFML do vậy implementing các ứng dụng CFML rất đơn giản và dễ dàng, bạn hoàn toàn không phải quan tâm đến các server-side/database information để có thể implement các ứng dụng của mình vì việc thiết lập cấu hình cho CFML làm việc với server/database hoàn toàn là việc của server administrator.
Về mantaining :
+ CFML đặc biệt đơn giản trong việc maintaining, khác với các scripting language khác khi bạn phải trực tiếp can thiệp vào code để có thể thay đổi/debug thì với CFML bạn có thể tận dụng khả năng drag-n-drop được hỗ trợ sẵn trong Dreamweaver. Xét về đặc điểm này thì tính visibility của CFML hơn hẳn PHP/ASP.
Về securing :
+ Như đã nói ở thread trước, CFML hỗ trợ khả năng encrypting code. Với tính này này bạn có thể quyết định việc đóng hay mở code của mình đồng thời nâng cao tính bảo mật của application.
Về enhancing :
+ CFML đặc biệt tiện lợi và đơn giản trong việc enhancing các application sẵn có. Enhancing in CFML không đòi hỏi bạn phải nắm rõ cấu trúc của exsiting application vì bạn có thể dễ dàng insert enhancement của bạn vào bất kỳ đâu trong exsiting application do tính rời rạc trong cấu trúc của một CFML application rất cao (khác với PHP và ASP). CFML rất dễ dãi trong cấu trúc ngôn ngữ do không tồn tại các hàm(function) hay đối tượng (object) và thay vào đó là các template rời rạc vời hàm cfinclude (tựa như include trong PHP). Do vậy điều duy nhất mà bạn cần làm để enhance một CFML application là viết từng template riêng rẽ và kết hợp chúng lại với nhau.

Sau đây là một vài phân tích chi tiết về CFML vs PHP:

Task : Query a table and display the results to a webpage

PHP
Mã:
<?php>
$host="localhost";
$username="username";
$password="password";
$dbname = "db";
$link = mysql_connect($host, $username, $password);
mysql_selectdb($dbname);
$query = "SELECT * from tableA";
$result = mysql_query($query);
while($row = mysql_fect_array($result))
{
          ?><p><?$row['name']?></p>
              <p><?$row['password']?></p>
<?}
?>
CFML
Mã:
<cfquery name="select" dbsource="hao">
select * from tableA
</cfquery>
<cfoutput query="hao">
<p>#name#</p>
<p>#name#</p>
</cfoutput>
 
Chỉnh sửa lần cuối:
Tớ cũng làm với PHP khá lâu rồi, ngứa nghề so sánh 1 chút nhỉ

So sánh giữa PHP và CFML:

1- Platform Support: PHP có mặt trên hầu hết các platform, trong khi CFML chỉ giới hạn ở 1 số.
1-0

2- Ngôn ngữ:
PHP có một thư viện rất lớn và đủ loại.
PHP là Open Source, do đó ta có thể viết một function riêng rồi compile luôn vào Code.
2-0

3- Database Support:
Như Minh đã phân tích ở trên, CFML rất mạnh về DB, trong khi ở PHP thì các hàm truy suất mỗi dạng DB lại khác nhau.
2-1

4- Quản lý lỗi:
CFML có tính năng quản lý lỗi try/catch khá tốt, trong khi PHP không hề có gì cả :(
2-2

5- Khả năng tìm kiếm
CFML rất mạnh khi tìm kiếm dữ liệu file và DB, PHP gần như không có
2-3

6- Xử lý xâu
Công việc của 1 web script chủ yếu là làm việc trên string, thằng PHP có bộ thư viện Regular Expressions rất mạnh lấy từ Perl sang, còn thằng CFML thì chỉ có phần cơ bản.
3-3

7- Về security
PHP cũng có code encryting (Zend Encoder, ngoài ra còn code caching và content caching nữa (Zend Accelerator), nhưng mấy cái này phải mua riêng.
4-4

8- Về mantaining:
CFML rõ ràng mạnh hơn về phần này (như Minh đã phân tích)
4-5

8- Chi phí:
PHP free hoàn toàn, có thể chạy trên Linux, FreeBSD (cũng free), còn CFML thì $$$$$, lại còn cho tiền cho HĐH nữa (Windows)
5-5

9- Nhân lực:
PHP rõ ràng được nhiều sử dụng hơn vì nó free, ra đường ném đá cũng trúng đầu thằng biết PHP chứ mò cả ngày cũng chẳng ai biết CFML.
6-5
 
Chỉnh sửa lần cuối:
Các bác viết nói quá, em nghe chẳng khác gì nghe lecture :D
Cám ơn nhiều!!
 
Back
Bên trên