PDA

View Full Version : "Tia chớp" và "Ánh bạc"



ngthientrung
02-05-2010, 08:06 AM
“Tia chớp” và “Ánh bạc”


Ngthientrung.blogspot.com



http://vietflex.com/wp-content/uploads/2009/12/ria1.jpg (http://vietflex.com/wp-content/uploads/2009/12/ria1.jpg)


Khi mình chập chững học Flash cũng là khi Microsoft cho ra mắt version 2.0 Silverlight, sau một thời gian dài “ngâm cứu” Flash mình lại tự hỏi : “Thế còn Silverlight. Flash và Silverlight công nghệ nào hay hơn ? Tương lai RIA sẽ do Flash hay Silverlight thống lĩnh?”. Mình dạo quanh các diễn đàn, search từ khóa “Flash vs Silverlight” trên Google để tham khảo các nhận xét các chuyên gia và nhìn chung : có nhiều nhận xét nghiên về SilverLight hơn, Flash tuy không được đánh giá cao nhưng cũng đã có vài site lớn sau 1 thời gian ngắn áp dụng đã chuyển công nghệ Silverlight trở về dùng Flash.

http://video-commerce.org/wp-content/uploads/2009/08/flash-silverlight.jpg (http://video-commerce.org/wp-content/uploads/2009/08/flash-silverlight.jpg)



Trang web nổi tiếng http://www.shinedraw.com/ chuyên trình chiếu các hiệu ứng Flash và Silverlight và JavaFX để mọi người bình chọn các công nghệ Ria. JavaFX chắc chỉ tham gia cho vui thôi, mình cũng đã có xem qua công nghệ Ria này của Java, nói ngắn gọn là không thể so sánh được với Flash và Silverlight, với cấu trúc mã design không giống ai (không giống CSS cũng chẳng giống XML) …moreover code tay từ đầu chí cuối (-_-)…. Trở lại với trang Shinedraw và cuộc cạnh tranh của Flash–Silverlight. Không phải mình đã học Flash mà thiên vị cho Flash, mà quả thật mình nghi ngờ tính công bằng của trang web này. Đưa ra cả 2 hiệu ứng như nhau, ráng tập trung tìm chỗ khác nhau của 2 công nghệ này hay tìm xem công nghệ nào hay hơn nhưng tìm mãi mà không thấy. Với mình có thể nói là 2 công nghệ này ngang nhau, có khi mình thấy Flash load trang nhanh hơn Silverlight do kích thước file swf thường nhỏ hơn file xap. Ấy thế mà, số người bình chọn công nghệ Silverlight luôn hơn ít nhất là 1,5 lần so với Flash. Về sau mình lại biết là Shinedraw chỉ trình diễn những effect mà Silverlight “có thể làm được”, có những effect Flash làm được còn Silverlight bó tay thì Shinedraw giấu nhẹm. Thêm vào đó Shinedraw tỏ ra thiếu công bằng khi luôn khuyến khích mọi người nghiên cứu Silverlight.





Quả thật mình nghi ngờ Shinedraw. “Phải chăng Shinedraw là con bài của Microsoft !!?” . Ai chẳng biết lão cáo già Microsoft rất giỏi về maketing, bất kỳ công nghệ mới, sản phẩm mới của Microsoft luôn được trình làng rất rầm rộ, các buổi thuyết trình mang tính quảng cáo được tổ chức khắp nơi. Chiêu mộ các Microsoft Student Partner (MSP – Đại sứ sinh viên) ở các trường Đại học nhằm góp phần quảng bá công nghệ Microsoft trên khắp thế giới. Và shinedraw phải chăng là 1 chiến lược maketing của Microsoft !? Các đánh giá mà trước đây thiên về Silverlight liệu có thật khách quan !? Mình muốn biết thật sự Flash & Silverlight công nghệ nào đỉnh hơn, vậy là mình dành thời gian học thêm Silverlight.
http://blueprintds.com/wp-content/uploads/2009/10/FlashBuilder_Flash_export_thumb.jpg (http://blueprintds.com/wp-content/uploads/2009/10/FlashBuilder_Flash_export_thumb.jpg)



Mình khuyến khích các Flash developer nên nghiên cứu thêm công nghệ Silverlight, không mất thời gian nhiều đâu ^^. Trước đây, mình đã xem trên 1 trang web đã treo 1 câu rất ấn tượng “Nếu bạn đã là Flash developer, bạn sẽ nhanh chóng trở thành Silverlight Master”. Mình đã kiểm nghiệm thực tế bản thân và kết luận lời tuyên bố trên hoàn toàn có cơ sở. Tuy không phải Silverlight Master, nhưng ít ra mình chỉ mất 2 tuần để học hết căn bản Silverlight và thêm 1 tuần nữa đã có thể bắt tay làm Game bằng Silverlight được. Nói như vậy để biết Microsoft cố gắng xây dựng Silverlight theo hướng dễ dàng tiếp cận cho các lập trình viên Flash. Không phải riêng Silverlight mà cả các công nghệ khác cũng được Microsoft xây dựng trên 1 chuẩn như vậy. Công nghệ Microsoft với mình có thể hình dung bởi 2 từ dễ xài và dễ phát triển. Chính vì lý do đó Microsoft ngày càng hút được nhiều lập trình viên Flash về phía mình.
http://img163.imageshack.us/img163/6373/silverlightvsadobeflash.jpg (http://img163.imageshack.us/img163/6373/silverlightvsadobeflash.jpg)



Bước đầu mình có 1 số đánh giá khách quan về 2 công nghệ ADOBE-MICROSOFT như sau:




Về IDE, Silverlight hơn hẳn Flash do xài chung bộ VisualStudio.Net quá đỉnh. Silverlight tách hẳn phần viết code và desigh riêng. Code trong VS.NET, design bằng bộ Expression Blend (hiện tại đã ra đến bản 4 beta). Tuy code và design riêng nhưng vẫn giữ được sự đồng bộ với nhau. Thậm chí từ version 3 của Expression Blend đã có thể viết code ngay trên Blend mà không cần VS.NET. Trước đây Flash vẫn nhét chung phần code và design vào bộ Adobe Flash Professional (AFP - nay đã ra bản CS5 nhưng chưa biết down hay mua ở đâu), mà code trên AFP thì cực kỳ chuối, không chấm sổ được như Silverlight không tự sinh code event như Silverlight. May mắn Flash được các hãng phần mềm thứ 3 hỗ trợ bộ FlashDevelop và các plugin bộ sung cho IDE này, tuy không code đỉnh như VS.NET nhưng vẫn sướng hơn nhiều so với AFP.
http://www.codeproject.com/KB/silverlight/SilverlightGame/ExpressionBlendStoryboard.jpg (http://www.codeproject.com/KB/silverlight/SilverlightGame/ExpressionBlendStoryboard.jpg)


Về ngôn ngữ lập trình, Silverlight vẫn hơn Flash do sử dụng ngôn ngữ lập trình C# hỗ trợ hướng đối tượng mạnh mẽ, trong khí Flash trước đây khi còn là sản phẩm Macromedia sử dụng ngôn ngữ kịch bản ActionScript2 cũng có chút hướng đối tượng nhưng không mạnh và không được hỗ trợ đầy đủ. Chỉ khi Adobe mua lại Flash từ Macromedia đã thêm vào ngôn ngữ ActionScript3 cho version 9.0, CS3 trở lên. AS3 đặc biệt hướng đối tượng hơn AS2, mềm dẻo hơn nhưng vẫn thiếu 1 số khái niệm như overload method, enum, struct,… Có lẽ ta nên trông chờ vào thế hệ AS4 sắp tới có nhiều cải tiến hơn, tuy chưa ra mắt nhưng theo như mình tìm hiểu có lẽ AS4 sẽ thêm vào rất nhiều khái niệm mới mà cả C# lẫn Java vẫn chưa có (dynamic class, internal variable,…)


http://4.bp.blogspot.com/_eF9EUIjHc44/S9tBdqX841I/AAAAAAAAAHQ/8EBFdKNW75w/s400/Untitled-2.png (http://4.bp.blogspot.com/_eF9EUIjHc44/S9tBdqX841I/AAAAAAAAAHQ/8EBFdKNW75w/s1600/Untitled-2.png)
Về framework, có lẽ xét đến tận cùng thì Flash sẽ có lợi hơn Silverlight. Nếu Silverlight được thừa hưởng 1 phần framework từ .Net Framework thì Flash được sử dụng chung bộ Air Framework của Flex dùng để tạo ra các ứng dụng tề web, đến dịch vụ và các ứng dụng desktop của Adobe. Khác với .Net Fx, Air Fx bao gồm các class dễ sử dụng hơn trong .Net Fx, ví dụ cùng 1 chức năng trong .Net Fx phải sử dụng 1 tổ hợp gồm 5-6 class thì trong khi đó Air Fx chỉ cần dùng 1-2 class và gọi vài method trong đó là đủ. Dù kể ra có vẻ bất công với Silverlight nhưng rõ ràng ra đời trước chục năm là 1 lợi thế của Flash, khi cộng đồng mã nguồn mở của Flash đã phát triển rất lớn mạnh, đa số các thư viện lớn như Sandy, Away3D, Papervison3D, GreenSock … đều là đóng góp của cộng đồng mã nguồn mở thì việc phát triển ứng dụng, Game trên Flash sẽ dễ dàng hơn so với Silverlight.




Về ứng dụng desktop, Silverlight dù có thể chạy OutOfBrowser ở version3 Silverlight nhưng có vẻ không thể được xem là ứng dụng Desktop thật sự. Trong khi đó người anh em WPF của Silverlight được xem như là ứng dụng desktop thế hệ mới có thể thay thế cho WindowForm sau này. Tương tự như Silverlight, WPF cũng sử dụng mã XAML để design, vẫn đầy đủ các hiệu ứng, animation…, thư viện trong WPF đầy đủ hơn so với Silverlight, nhưng theo mình thì việc design trong Silverlight dễ dàng hơn trong WPF. Về Flex vừa là ứng dụng web vừa tạo đc ứng dụng desktop, Flash có thể dùng 1 số phần mềm convert thành ứng dụng chạy hoàn toàn độc lập trên desktop, có thể tránh được các rào cản về policy mà ứng dụng web vướng phải. Cộng 1 điểm cho Flash/Flex.
http://www.adobe.com/devnet/flash/articles/introducing_flash_cs3/fig03.jpg (http://www.adobe.com/devnet/flash/articles/introducing_flash_cs3/fig03.jpg)



Về ứng dụng trên Mobile, hiện tại Silverlight 2.0 có thể chạy được trên HĐH Window Mobile, Microsoft hứa hẹn năm 2010 thỏa thuận được với Nokia để ứng dụng Silverlight của họ có thể chạy trên HĐH Symbian. Chờ mọc râu mà ko thấy đâu, chắc gặp sự cố gì rùi ^^. Người em út FlashLite có thể chạy trên HĐH Symbian, hiện mình đang xài Nokia 5320 chạy được ứng dụng FlashLite 3.0, 1 số ít thiết bị di động có thể chạy đc FlashLite 4.0. Flash CS5 có thể viết các ứng dụng Flash cho IPhone.
http://vietflex.com/wp-content/uploads/2009/12/Silverlight2PosterMIX08.jpg (http://vietflex.com/wp-content/uploads/2009/12/Silverlight2PosterMIX08.jpg)



Về Effect và Animation, như mình đã nói ở trên, theo mình tất cả effect Silverlight làm được, Flash đều làm được nhưng ngược lại thì không chắc lắm, còn về hiệu suất thì mình chưa biết được công nghệ nào tối ưu hơn. Ví dụ đơn giản, các effect về 3D của Flash rất nhiều nhưng Silverlight thì không được hỗ trợ 3D hoàn chỉnh, chỉ có các Perspective Transform (http://ngthientrung.blogspot.com/2010/02/silverlight-3d-perspective-transforms.html) chỉ là giả 3D. Hệ thống Effect trong Flash phong phú hơn Silverlight, nếu trong Silverlight hiện tại là 4.0 chỉ có Blur và DropShadow thì trong Flash có thêm Bevel, Gradient,… tương tự như photoshop.Tiếp đến về Animation, trong Silverlight chia làm 2 loại animation là storyboard và state, Flash cũng chia làm 2 nhóm là motion và shape. Các state trong Silverlight có thể chuyển đổi qua lại cho nhau, trong khi đang thực hiện animation của state này có thể chuyển sang thực hiện animation của 1 state khác, đó là do các animation trong Silverlight đều được định nghĩa trong code XAML, các trạng thái đầu và cuối đều được khai báo , các state là 1 tập hợp trạng thái đầu, cuối, thời gian chạy. Khi muốn chuyển state chỉ việc so trạng thái hiện tại và trạng thái đầu của state mới. Animation trong Silverlight (storyboard, state) dựa trên Timeline tức là xét trạng thái và sự thay đổi đầu-cuối sẽ cho đối tượng thay đổi từng chút 1 cho đến trạng thái cuối trong 1 khoảng thời gian định sẵn, animation trong Flash dựa trên frame, giống làm film hoạt hình, sẽ cho từng frame hiện liên tục, ví dụ animation của bạn gồm 120 frame, tốc độ 12fps (12 frame trên 1s) thì animation chạy trong 10s, nếu tăng giá trị lên 24 fps thì animation thì tương đương số khung ảnh trong làm film và animation diễn ra trong 5s thôi. Ý nghĩa, nếu không cần thiết có thể giảm số frame trên giây để giảm nhẹ tốc độ xử lý CPU, ngoài ra với các animation không thể thực hiện đc bằng Motion Tween hay Shape Tween, các FlashDesigner sẽ thiết kế trên từng frame 1 cho đến hàng trăm frame (chả bít mấy cha này ăn gì mà trâu dữ ^^).


http://www.webresourcesdepot.com/wp-content/uploads/image/silverlight-pageflip.jpg (http://www.webresourcesdepot.com/wp-content/uploads/image/silverlight-pageflip.jpg)
(http://2.bp.blogspot.com/_eF9EUIjHc44/S9tD3pDik-I/AAAAAAAAAHg/k6_hnxY9lh4/s1600/Untitled-3.png)Về sự linh hoạt trong code Design, Silverlight linh hoạt hơn, với Silverlight, nếu bạn design bằng Expression Blend được thì bạn cũng có thể code bằng C# được (vất vả thôi) dù là Effect, Animation hay Design nhờ vậy bạn có thể design in Runtime được. Flash tuy cũng design 1 số bằng ActionScript như phức tạp hơn nhiều so với C#, Motion Tween cũng design được nhưng nhờ code XML định nghĩa các trạng thái, nếu bạn dùng các thư viện OpenSource như GreenSock thì sẽ dễ hơn Silverlight, Shape Tween thì chắc bó tay, mình vẫn chưa biết làm sao để tạo ShapeTween hay kỹ thuật khung xương bằng ActionScript.




Về Design, với bộ Expression Blend, Silverlight có thể design những chi tiết đơn giản nhanh hơn Flash nhưng để thiết kế những hình thể phức tap thì bó tay. Ví dụ, Silverlight không thể thiết kế các Usercontrol 3D được, Flash CS4 thì khác, tọa độ các MovieClip không chỉ có tọa độ x,y mà còn có tọa độ z, chính nhờ tọa độ z này mà mỗi MovieClip đều là 1 Object3D thật sự, khi rotatex, rotatey, rotatez các bạn sẽ thấy khối 3D MovieClip xoay như thế nào. Thêm vào đó Flash CS4 có thể tạo nhân vật hoạt hình cử động như thật nhờ vào cách thiết kế khung xương cho nhân vật (Silverlight dù phát triển đến version 10 cũng ko làm đc trò này).
http://2.bp.blogspot.com/_eF9EUIjHc44/S9tD3pDik-I/AAAAAAAAAHg/k6_hnxY9lh4/s400/Untitled-3.png (http://2.bp.blogspot.com/_eF9EUIjHc44/S9tD3pDik-I/AAAAAAAAAHg/k6_hnxY9lh4/s1600/Untitled-3.png)



Về hệ thống Panel, đây là khái niệm mới trong Silverlight mà Flash chưa có. Panel gọi chung là các đối tượng chứa dùng để chứa các UIElement khác, các lớp được kế thừa từ Panel như : Canvas, Grid, StackPanel, Border,… mỗi panel có 1 behavior riêng cho các usercontrol chứa trong nó. Ví dụ, Grid sẽ bố cục lại vị trí, kích thước các UIElement chứa trong nó khi kích thước thay đổi, Stackpanel sẽ xếp các UIElement theo hàng hoặc cột, Border chỉ chứa 1 UIElement duy nhất,… Còn trong Flash thì bất cứ việc gì cũng đưa về MovieClip, nhưng càng lồng nhiều movieclip vào nhau sẽ rất khó khăn cho việc code.




Về Template và Skin, Template trong Silverlight chuyên nghiệp hơn Skin trong Flash. Template và Skin là lớp vỏ ngoài của các control (trong flash gọi là component). Bạn có thể tạo 1 button hình khối cầu 3D bằng Silverlight đóng gói thành Template, sau này nếu muốn thay template cho các button khác bạn chỉ việc chọn template khác cho button đó. Vấn đề tương đương trong Flash là bạn phải tạo ra 1 skin mới cho Button, xóa button cũ, kéo button có skin mới vào, đặt tên trùng với button cũ (Không pro như silverlight rồi). Ngoài ra Silverlight đóng gói tất cả Template thành 1 file *.resx có thể mang sang các project khác và hoàn toàn tương thích. Vấn đề tương đương trong Flash là bạn phải mở 2 project trong Flash và kéo thả component từ project này sang project khác (như vậy trong Flash nên chia ra người chuyên tạo skin project và 1 người làm code project).




Về hệ thống Control, Silverlight được tích hợp nhiều control chuẩn hơn so với Flash. Hầu như tất cả control chuẩn trong window Silverlight đều có đủ. Trong flash gọi control là các component, nếu bạn search từ khóa “Flash component” trên google sẽ thấy rất nhiều người sống nhờ vào việc bán component Flash, họ tạo ra nhiều loại component và API cho các component này và … rao bán, thỉnh thoảng các bạn cũng có thể tìm được các component free ^^.
http://thegioiweb.vn/Uploaded/thudtn/30_01/Microsoft_Silverlight4.jpg (http://thegioiweb.vn/Uploaded/thudtn/30_01/Microsoft_Silverlight4.jpg)



Về Behaviors, Behaviors là các ứng xử khi gặp 1 sư kiện, ví dụ khi click chuột, khi di chuyển chuột sẽ phát sinh 1 sự kiện lẽ ra bạn phải viết code thụ lý sự kiện đó. Nhưng trong Silverlight đã thiết kế cho phép bạn kéo thả các 1 số behaviors vào xử lý từng sự kiện của các control mà các bạn không cần viết 1 dòng code nào, tuy không thể đáp ứng tất cả nhu cầu nhưng nếu nắm vững cách sử dụng behaviors này sẽ tiết kiệm đc khối thời gian viết code. Flash 8 cũng có Behaviors nhưng không đầy đủ bằng Silverlight, nhưng sau khi lên ActionScript 3 (CS3, CS4, CS5) thì không còn Behaviors nào được hỗ trợ nữa ???
http://img34.imageshack.us/img34/3294/silverlightvsflash.jpg (http://img34.imageshack.us/img34/3294/silverlightvsflash.jpg)



KẾT LUẬN




Quả thật, không ai dám nói chắc mình đã tường tận cả 2 công nghệ lớn này. Duy chỉ 1 nhận xét mình tin chắc là đúng :



Cả 2 công nghệ đều có ưu điểm riêng, như mình đã nhận xét, và sẽ không công nghệ nào bị xóa sổ khỏi cuộc đua tài này. Thời gian sẽ chứng minh những gì mình nói là đúng. Mỗi công nghệ có 1 mặt mạnh ở những lĩnh vực khác nhau. Với Flash, lĩnh vực quảng cáo, và game sẽ là sân chơi dành riêng cho Flash, theo mình Flash thích hợp phát triển game hơn so với Silverlight. Còn Silverlight có thể phát triển các ứng dụng trực tuyến, các ứng dụng như GoogleDoc Silverlight có thể làm tốt hơn Flash. Không kể đến Flex và WPF, Silverlight có thể xây dựng các ứng dụng webservice (WCF) tốt hơn Flash...



Ở VN, Flash vẫn còn thống trị 1 thời gian dài trước khi Silverlight có thêm bước đột phá lớn hơn.
Silverlight dễ học, dễ tiếp cận, phát triển các ứng dụng nhanh nhưng không hiểu sao với mình Flash vẫn có 1 sự lôi cuốn rất lớn.
(nguồn : ngthientrung.blogspot.com) (http://ngthientrung.blogspot.com/)