Sự phức tạp không cần thiết.
Nhận được một phản hồi từ một bạn đọc (tên Nguyễn Tuân, đọc thắc mắc tại đây) đưa ra thắc mắc nhờ tìm hiểu tại sao trang NhacSo.net không thể nào hoạt động được trong Firefox. Cũng đã lâu tớ chưa vào lại trang NhacSo và lần cuối cùng tớ vào thì nó hoạt động trơn tru trên cả hai trình duyệt Firefox và IE nên tớ không để ý đến chi tiết này. Hôm nay sau khi nhận được thắc mắc trên tớ đã thử tìm hiểu vấn đề này và phát hiện ra một chi tiết kỹ thuật (theo tớ chính là nguyên nhân gây lỗi) mà tớ cho là một sự phức tạp hóa không cần thiết.
Trước hết, để trả lời nhanh cho bạn Tuân: đây đơn giản là lỗi của NhacSo chứ không phải do cấu hình máy của bạn. Cách khắc phục duy nhất là hãy sử dụng trình duyệt Internet Explorer để xem NhacSo. Còn về lỗi trong Vietkar, tớ chưa thể trả lời bạn và có lẽ chỉ có các bạn làm trong NhacSo mới có thể giải đáp.
Còn nếu các bạn muốn tìm hiểu chi tiết những gì tớ ghi nhận được, hãy tiếp tục đọc chi tiết trong bài…
Thực tế tại thời điểm hiện tại, NhacSo hoàn toàn không hoạt động trên trình duyệt Firefox. Nếu bạn sử dụng trình duyệt Firefox để xem NhacSo.net, bạn sẽ không đi đâu được ngoài trang chủ! Tất cả các liên kết đều không hoạt động trên trình duyệt Firefox: nhấn vào bất kỳ liên kết nào, bạn sẽ bị dẫn quay ngược trở lại trang chủ.
TÌM HIỂU
Điểm thú vị là ở chỗ NhacSo.net hoạt động trơn tru trên trình duyệt Internet Explorer (IE). Chi tiết này cho thấy: nguyên nhân chính là do lỗi không tương thích giữa IE và Firefox (nền Mozilla) trong mã xử lý javascript của NhacSo.net. Thử duyệt lướt qua một số trang NhacSo trên IE, tớ nhận thấy: các liên kết hiển thị dưới dạng câu truy vấn ngay trong địa chỉ (URL) kiểu như "nhacso.net?nhac9=singer&do=view&id=1394". Tuy nhiên, khi nhấn vào liên kết như trên thì trang trả về lại có một địa chỉ … rất xa lạ. Ví dụ, liên kết ví dụ ở trên là của liên kết của bài hát "Giấc mơ muôn màu" của Mỹ Tâm từ danh sách Những bài hát được yêu thích nhất. Trong trình duyệt IE, địa chỉ trang web trả về là: http://nhacso.net/a861946737ebd04e118bd23682754418.htm. Như đã nói, trong trình duyệt Firefox, nhấn vào liên kết bài hát Giấc mơ muôn màu từ trang chủ sẽ chẳng dẫn đến đâu, nhưng nếu chép địa chỉ trên vào Firefox thì bạn sẽ vào nghe được bài hát đó.
Rõ ràng, NhacSo sử dụng một cơ chế Javascript bên trong để mã hóa (hay nói một cách dễ hiểu hơn đối với người không chuyên tin là "chuyển đổi") liên kết từ dạng truy vấn thành một đoạn mã sử dụng làm địa chỉ của file chứa trang đó. Đễ dễ hiểu, các bạn có thể theo dõi mô hình dưới:

Để chứng minh cho điều tớ nghi ngờ, tớ thử lục trong file mã nguồn javascript của NhacSo.net và tìm thấy ngay hàm xử lý quá trình mã hóa và giải mã địa chỉ liên kết trong các hàm keywordUrlEncode() và decodeUrl(). Theo tớ đoán, mọi thứ có vẻ là như thế này (cái này là tớ chỉ đoán sau khi đọc lướt qua phần javascript thôi nhé. Tớ chưa có thời gian ngồi tìm hiểu kỹ. Có thể nó hoàn toàn sai :), nhưng theo tớ ít nhất thì nó đúng được 60-80% bản chất):
Chú ý: Nhấn vào biểu đồ để phóng to.
Các bạn muốn có thể nhấn vào đây để xem mã - cái này có lẽ không vi phạm gì về bản quyền đâu nhỉ? bởi mọi người biết cách xem mã nguồn trang web sẽ đều có thể tìm ra cách truy cập vào file này; Tớ chỉ liên kết trực tiếp từ đây cho tiện mà thôi)
CÂU TRẢ LỜI
Nói chung, đến đây, tớ câu trả lời có lẽ đã rõ ràng: chính cách lập trình javascript không tốt của NhacSo để xử lý các liên kết nội bộ đã dẫn đến lỗi không tương thích giữa 2 trình duyệt IE và Firefox. Kết quả là mặc dù mã javascript chạy đúng trên IE, nó chẳng thực hiện gì trên Firefox, và hệ quả là bạn không đi được đâu khác ngoài trang chủ của NhacSo trên Firefox.
SUY NGHĨ THÊM
Phần trên có lẽ đã đủ trả lời cho thắc mắc của bạn Nguyễn Tuân. Tuy nhiên, cái khiến tớ suy nghĩ là, nếu như cách giải thích của tớ ở trên là đúng thì tại sao NhacSo phải áp dụng một cơ chế rắc rối như vậy? Tất cả những khả năng mà tớ có thể nghĩ đến:
1) Những người làm NhacSo muốn giấu cấu trúc thực hiện truy vấn qua địa chỉ web: người xem thay vì thấy cấu trúc rõ ràng kiểu như "?nhac9=singer&do=view&id=1394" thì chỉ thấy một địa chỉ trang web vô nghĩa kiểu "a861946737ebd04e118bd23682754418.htm" trên thanh địa chỉ trình duyệt. Tuy nhiên, nếu đây quả thật là điều mà những người làm NhacSo muốn đạt đến thì cách này quả là một cách tồi, bởi ngay cả người duyệt web bình thường cũng biết nhìn xuống thanh trạng thái (status bar) của trình duyệt khi đưa chuột lên một liên kết để biết mình sẽ đi đến đâu trước khi nhấn chuột, và như vậy sẽ biết ngay cấu trúc câu truy vấn. Quan trọng hơn, liệu có cần thiết phải giấu hay không? Khả năng này xem ra có thể loại bỏ.
2) Hoặc lý do có thể là do NhacSo sử dụng cấu trúc lưu thông tin tĩnh (static): Tức là trên máy chủ của NhacSo thực sự tồn tại một file tên là "a861946737ebd04e118bd23682754418.htm" cho phép nghe bài hát "Giấc mơ muôn màu" của Mỹ Tâm (và nhiệm vụ của hệ thống là dịch ngược từ câu truy vấn của người dùng thành một tên file cụ thể). Điều này không hẳn đã là vô lý bởi khá nhiều hệ thống xuất bản sử dụng cách này để xuất tài liệu. Tuy nhiên, với một hệ thống kiểu như NhacSo vốn đòi hỏi có nội dung thay đổi theo thời gian thực thì có lẽ sẽ chẳng bao giờ sử dụng phương thức này. Hơn nữa, trong file javascript của NhacSo có một phương thức tên là decodeURL. Tuy tớ không có thời gian tìm hiểu cụ thể nó làm gì, chắc chắn nó được viết ra một cách có mục đích. Vậy nên, khả năng này cũng dễ dàng bị loại bỏ.
3) Cách giải thích hiện thực hơn cả, theo tớ là: Đây có thể là cách để có thể tích hợp trang NhacSo với phần mềm Vietkar. Nếu bạn từng sử dụng phần mềm Vietkar, bạn sẽ nhận thấy 2 tính năng quan trọng của phần mềm Vietkar: i) bạn có thể duyệt trang NhacSo trực tiếp từ Vietkar mà không cần phải sử dụng trình duyệt. Thú vị hơn là, ii) mỗi khi bạn vào một trang giới thiệu album hay ca sĩ nào đó trên NhacSo trực tiếp từ phần mềm Vietkar, Vietkar sẽ tự động lấy luôn danh sách các bài hát liên quan và đính kèm vào danh sách các bài hát bạn có thể nghe trên Vietkar. Có thể (có thể thôi nhé), bằng cách có bước xử lý trung gian, máy chủ có thể gửi kèm luôn danh sách bài hát theo từng trang. Tuy nhiên, theo tớ, vẫn có cách tốt hơn để thực hiện tính năng tương tự - nếu xem xét những điểm cực kỳ bất lợi của cách thức hiện tại (xem giải thích phía dưới).
Trong cả 3 cách, tuy cách thứ 3 là "dễ chấp nhận" nhất (bởi thật sự thì cũng chẳng có cách nào kiểm chứng trừ khi bạn là người thiết kế Vietkar) nhưng nó cũng không thật sự lý giải 100% lý do sử dụng cơ chế phức tạp trên của NhacSo. Có lẽ một bạn nào đó làm trong NhacSo nếu đọc bài này có thể "gợi ý" đôi chút không?
NHỮNG KHIẾM KHUYẾT QUAN TRỌNG
Bất kể lý do giải thích việc sử dụng cơ chế trên là gì đi nữa, có hai khiếm khuyết quan trọng không thể bỏ qua của cơ chế này. Cả hai đều liên quan và ảnh hưởng xấu đến quá trình tương tác với người dùng:
BẠN KHÔNG THỂ QUAY LUI?
Nút "Back" (Quay lui - cho phép bạn quay lại trang bạn ghé thăm kế trước trang hiện tại) của trình duyệt chẳng có ý nghĩa gì khi xem NhacSo.net. Và bản thân NhacSo.net cũng không cung cấp cơ chế nào để thực hiện tác vụ này.
Hãy thử vào thăm vài trang trong NhacSo.net bằng trình duyệt Internet Explorer (tất nhiên, như đã nói, hiện tại bạn không thể xem NhacSo bằng Firefox). Sau khi nhấn vài liên kết trong NhacSo, thử nhấn nút BACK trên cửa sổ trình duyệt. Bạn sẽ được dẫn quay lại … trang bạn đang đứng hiện tại! Điều này không có gì là khó hiểu nếu biết rằng NhacSo sử dụng một cơ chế xử lý trung gian để chuyển qua lại giữa các trang như đã nói ở trên. Để hiểu tại sao nó lại gây ra hiện tượng này, hãy xem biểu đồ sau:

Trong NhacSo, Khi bạn từ Trang này sang trang khác, bạn đã có qua một trang xử lý trung gian (mã hóa & giải mã địa chỉ). Tại trang đích, khi bạn nhấn nút BACK, trình duyệt đơn giản chỉ đưa bạn quay lại trang xử lý trung gian với cùng một hướng dẫn như khi bạn đến và vì vậy cơ chế xử lý trung gian sẽ dẫn bạn quay trở lại trang bạn đang đứng. Cách xử lý của NhacSo đơn giản đã vi phạm một qui tắc quan trọng là một phần mềm mới không bao giờ nên phá hỏng hoặc đi ngược lại những quy tắc đã được chấp nhận trước đó - cũng giống như không có quốc gia nào lại lấy đèn đỏ làm tín hiệu cho phép được đi cả, hoặc không có ai sản xuất một con chuột mà khi gắn vào thì bàn phím không hoạt động được.
Nếu như bạn đã đọc qua bài giới thiệu của tớ về công nghệ web AJAX trên nguoitapviet, tớ có đề cập đến một trong những khuyết điểm quan trọng của công nghệ này cũng chính là nó phá vỡ khả năng hoạt động của các tính năng đi tới, đi lui hoặc ghi lại địa chỉ (bookmark). Những người thiết kế web vẫn đang tìm một giải pháp cho vấn đề này, nhưng cho đến khi giải pháp đó ra đời thì phạm vị ứng dụng của công nghệ AJAX sẽ vẫn bị thu hẹp (xem bài giới thiệu AJAX - Tương lai của ứng dụng web). Cũng xin nói thêm là những trang sử dụng công nghệ AJAX hiện tại phần lớn là những trang không đòi hỏi tính năng ghi nhớ địa chỉ (ví dụ như bạn không bao giờ cần phải ghi nhớ địa chỉ để đọc một email nào đó), hoặc đã cung cấp một tính năng tượng tự thay thế (các liên kết đi tới, đi lui,… ngay trong trang web thay cho việc sử dụng các nút của trình duyệt).
Tất nhiên, NhacSo có thể thêm các tính năng đi tới, đi lui ngay trong ứng dụng để khắc phục vấn đề này như các ứng dụng web hiện tại khác, nhưng theo tớ, nó không đáng để phải tốn sức như vậy.
VÀ … NÓ CÓ NGHĨA LÀ GÌ VẬY?
Hãy tưởng tượng, mà cũng chẳng cần phải tượng tượng, cứ giả sử rằng vì một lí do nào đó bạn cần phải có cách nào đó nhớ được địa chỉ trang nghe bài hát "Giấc mơ muôn màu" của Mỹ Tâm để sau này bạn có thể gõ lại trực tiếp mà không cần phải vào trang trung gian. Với cái tên kiểu như "a861946737ebd04e118bd23682754418.htm", có lẽ bạn nên chịu thua trước!
Một lần nữa, theo ý kiến cá nhân của tớ, NhacSo đã mắc lại sai lầm của mình trước đó (cái tiêu đề như một đoạn văn của NhacSo, hoàn toàn không có ý nghĩ thực tiễn gì cả), lần này là với cái địa chỉ: cái địa chỉ bản thân nó không mô tả gì về nội dung của nó cả. Các ứng dụng web trước đây vốn rất hay sử dụng cách mã hóa địa chỉ (bây giờ vẫn còn thấy trong một số phần mềm xây dựng diễn đàn), tuy nhiên càng ngày cách này càng không được ưa chuộng và đã gần như không còn thấy nữa. Tớ thật không hiểu tại sao những bạn xây dựng NhacSo nhìn cái tên trang "a861946737ebd04e118bd23682754418.htm" mà không thấy khó chịu? tớ rất dị ứng với những trang có địa chỉ như vậy - bởi vì trông nó chẳng đáng tin chút nào (giả như có ai đó trong một diễn đàn liên kết đến bài hát trên nhacso, nhìn cái địa chỉ như vậy, tớ sẽ chẳng bao giờ vào bởi: ai biết được nó chứa cái gì?)
Khi cài đặt nguoitapviet, tớ đã suy nghĩ khá nhiều về vấn đề nên chọn cách thể hiện địa chỉ một bài viết như thế nào là tốt nhất. Đặt điểm bài viết có tiêu đề tiếng Việt (Unicode) không cho phép tớ đặt tên file bài viết bằng tiêu đề. Cuối cùng tớ đã chọn phương án sử dụng các con số. Nếu bạn biết năm, tháng và ngày một bài viết được đưa lên (và tốt hơn nếu bạn biết luôn mã số bài viết, mặc dù nó không bắt buộc), bạn có thể dễ dàng gõ lại địa chỉ bài viết đó theo định dạng nguoitapviet.info/năm/tháng/ngày/[mã_số_bài_viết].
KẾT LUẬN:
Cuối cùng thì tớ không thể biết chắc chắn lí do tại sao NhacSo lại hoạt động theo cấu trúc như vậy (tất nhiên, họ có thể có một lý do hợp lý cần phải sử dụng cấu trúc như vậy), nhưng theo tớ, cho dù lý do là gì đi nữa thì hệ thống phải đảm bảo được yếu tố tương thích. Việc NhacSo không hoạt động trong Firefox hiện tại chưa hẳn đã là vấn đề bởi phần lớn người VN vẫn chưa xài đến Firefox (70% khách vào nguoitapviet sử dụng IE), nhưng không thể không tính đến nó trong tương lai (càng ngày càng có nhiều người dùng Firefox). Đó là chưa kể đến các điểm yếu của cấu trúc hiện tại như đã phân tích ở trên.
Có vẻ như tớ hơi bị nhiễm tính "chê bai", chỉ biết bới móc những gì không tốt của người khác để nói dù mình cũng chẳng tốt hơn gì :). Cũng có vẻ như tớ đòi hỏi ở NhacSo hơi nhiều :).Nhưng chính các bạn bên NhacSo có lẽ cũng muốn nghe nhưng phân tích hơi "cà chớn" một chút nhỉ? :)
Tái bút gửi đến các bạn làm trong dự án NhacSo.net: bạn Tuân có nói thêm là đã gửi email hỏi bên NhacSo nhưng không thấy email trả lời hỗ trợ nên đành tìm trên Internet và gặp bài phân tích trên trang nguoitapviet. Các bạn bên NhacSo nên chú ý tiếp nhận những thắc mắc từ người xem, đừng chỉ lập ra một địa chỉ email liên hệ rồi không ai them kiểm tra xem có email nào không.


Canada
United States
Australia
Viet Nam







abi
United States
đến từ
không hiểu sao tớ không nghe được nhạc trên nhacso.net :( từ hồi sang bên này gần như ngày nào cũng lên mạng, và kỳ cà kỳ cạch vào nhacso.net, nhưng không lần nào nghe được, dù đã thử đủ mọi cách.
chờ hồi âm của PPUT ! ;)