2012-04-08 36 views
5

Tôi biết tiêu đề của câu hỏi này có thể hơi gây hiểu nhầm; Tôi nhận ra rằng JSON là một cách định dạng dữ liệu và AJAX là một cách để kéo/đẩy các cập nhật từ/đến máy chủ mà không cần làm mới. Tôi hỏi vì tôi hợp pháp không có nhiều kinh nghiệm trước đây trong lĩnh vực này.CakePHP: JSON vs AJAX

Cho rằng tôi có một ứng dụng web CakePHP: là nó chỉ đơn giản là vấn đề ưu tiên nếu tôi chọn

  • Để sử dụng JSON để kéo/dữ liệu đẩy và sau đó sử dụng một kịch bản về phía khách hàng để cập nhật trang?
  • Để sử dụng AJAX để nhận đoạn mã HTML hoàn chỉnh từ máy chủ và chỉ cần chèn đoạn mã đó vào trang?

Sự khác biệt duy nhất tôi thấy giữa hai là JSON có nghĩa là ít tải trên máy chủ và sử dụng băng thông, và có lẽ ngôn ngữ mà nhà phát triển thoải mái hơn khi sử dụng (JSON có thể có nghĩa là kịch bản phía máy khách hơn ?).

Ai đó có thể làm sáng tỏ vấn đề này cho tôi?

+0

Câu hỏi hay - thuộc về lập trình trao đổi mặc dù tôi tin tưởng. –

+0

@MichaelDurrant Tôi không biết về lập trình trao đổi, nhưng nó là nhiều hơn của một câu hỏi mở kết thúc có. Tôi không hoàn toàn chắc chắn 'câu trả lời' thực sự là gì vì nó là một triết lý lập trình mà OP là sau đó. Có thể trên một diễn đàn? Sau đó, một lần nữa, tôi có thể tưởng tượng bản thân mình nhìn lên 'Tôi có thể sử dụng tốt hơn phía máy khách hoặc khuôn mẫu phía máy chủ cho ứng dụng mới của tôi không?' trên Stackoverflow và câu hỏi này chạm vào đó. – Mosselman

+0

@Purren bạn đã hỏi hai câu hỏi về StackOverflow, cái này và một câu hỏi khác khoảng một năm trước và bạn chưa theo dõi câu trả lời. Cố gắng làm như vậy vì nó làm cho cộng đồng tốt hơn cho nó. – Mosselman

Trả lời

3

Câu hỏi hay. Đặc biệt là trong những thời điểm mà những thứ như Backbone.js đã trở nên phổ biến hơn.

Cho phép xem xét từng bước.

Thứ nhất, tải trên máy chủ để tạo JSON thay vì HTML có lẽ ít nhiều giống nhau. Hầu hết các tài nguyên không chuyển đổi các đối tượng dữ liệu sang HTML hoặc JSON, nhưng chúng đi vào chấp nhận yêu cầu của máy khách, tải lên khung công tác của bạn, CakePHP trong trường hợp của bạn, định tuyến yêu cầu, tải thêm một số thành phần, thiết lập kết nối cơ sở dữ liệu , ném truy vấn vào nó, chấp nhận kết quả, chuyển đổi chúng thành mảng/đối tượng và sau đó chỉ bạn mới bắt đầu xuất dữ liệu đó vào chuỗi cho chế độ xem của bạn (JSON hoặc HTML). Vấn đề là mặc dù các ngôn ngữ phía máy chủ như PHP không thực sự ấn tượng bằng cách lặp qua mọi thứ và xuất các giá trị thành chuỗi, chúng có thể làm điều đó mà không gặp khó khăn gì.

Trong thực tế, sự khác biệt về hiệu suất sẽ không tuyệt vời khi bạn bắt đầu xuất JSON. Ít nhất, không đủ lớn cho hầu hết mọi thứ.

Khi bạn muốn sử dụng JSON là khi bạn có một chức năng phức tạp. Ví dụ như một cái gì đó giống như nguồn cấp dữ liệu tweetdeck, nơi có rất nhiều thành phần nhỏ và các mẩu dữ liệu cần cập nhật; Các mẩu tin đơn, danh sách các tweet, số lượng người theo dõi, v.v. Có ý nghĩa khi tải các mẩu thông tin này thay vì tải xuống lại toàn bộ các bộ HTML mỗi lần. Bạn sẽ sử dụng JSON và các khuôn mẫu phía máy khách vì bạn có nhiều thứ có khả năng thay đổi.

Tuy nhiên, trong các ứng dụng 'bình thường' hơn như blog, trang web thương mại điện tử, wiki, v.v ... bạn sẽ không thực sự cần những thứ tốt như thế này. Trong trường hợp đó bạn sẽ sử dụng AJAX (sử dụng định nghĩa của bạn).

Lý do cho một số là dễ dàng hơn và thân thiện với nhà phát triển hơn để xây dựng chế độ xem HTML hơn là xây dựng lượt xem đầu tiên trả về JSON và sau đó xây dựng các mẫu phía máy khách để hiển thị chúng. Nó dễ dàng hơn để kiểm tra các điều kiện nhất định, tạo vòng lặp, tìm nạp thêm dữ liệu khi cần thiết, vv trong khuôn mẫu phía máy chủ. Nó sẽ không cắt giảm hiệu suất của bạn tất cả những gì nhiều anyway.

Một lý do khác là bạn có thể sử dụng HTML tĩnh ở phía máy chủ để hiển thị các trang không phải AJAX cũng như dự phòng.Vì vậy, khi AJAX có sẵn cho khách hàng, bạn tải nội dung thông qua AJAX và thay thế cho phép nói nội dung của '' của bạn với '' từ HTML mà bạn có, nhưng khi không có bất kỳ AJAX nào, bạn chỉ cần chuyển hướng đến trang đó. Vì vậy, bây giờ bạn có hỗ trợ cho cả javascript và khách hàng không javascript. Bạn có thể đạt được điều này với máy chủ và phía khách hàng templating quá, nhưng điều đó sẽ yêu cầu công việc gấp đôi hoặc sử dụng một cái gì đó như Mustache.

Ngày đầu này, bất lợi khi sử dụng JSON để thực hiện tất cả hiển thị của bạn trong ứng dụng khách là một số thông tin cần thiết để hiển thị trang của bạn nhưng không được cho phép trong tay người dùng của bạn. Tôi có thể tưởng tượng những thứ như dữ liệu thẻ tín dụng, số an sinh xã hội, tên thật, v.v ... mà bạn muốn chạy một số loại kiểm tra trong mã của bạn trước khi bạn kết xuất ở phía máy chủ. Để làm điều đó cùng một kiểm tra ở phía khách hàng, bạn phải gửi tất cả cho khách hàng, ergo đưa nó cho người dùng. Tất nhiên bạn không thể làm điều này và đầu tiên xử lý tất cả dữ liệu của bạn ở phía máy chủ, trước khi gửi nó cho máy khách, nhưng điều đó có nghĩa là bạn đã làm nhiều hơn và nhiều hơn nữa những gì bạn sẽ làm trong một mẫu HTML.

Để tổng hợp:

Đối với tôi hiệu suất giữa hiển thị html của máy chủ hoặc phía máy khách không phải là hiển nhiên trong cuộc sống thực. Tôi sử dụng rất nhiều JSON, nhưng thường dành cho những thứ không liên quan đến xem. Giống như lưu một cái gì đó thông qua một cuộc gọi AJAX và sau đó trở về một báo cáo trạng thái trong JSON. Vì vậy, tôi có thể làm những thứ như if data.status == 'awesome', vv Nếu tôi hoàn toàn AJAX một trang web bình thường, tuy nhiên, tôi sẽ sử dụng một cái gì đó như pjax (bên dưới) để tải lên các mẩu HTML từ máy chủ. Trong mắt của tôi javascript nên làm những việc với HTML hiện tại và không nên được kết hợp với nó quá nhiều. Có những trường hợp ngoại lệ, khi xây dựng các ứng dụng thực sự phức tạp và thời gian thực đòi hỏi phải theo dõi nhiều mẩu dữ liệu nhỏ hơn cùng một lúc, vì vậy việc tạo khuôn mẫu phía máy khách có vị trí của nó, nhưng không chỉ ở khắp mọi nơi.

Hãy xem pjax, đây là thư viện javascript để tải các mẩu html động từ phía máy chủ vào các phần tử trên trang của bạn. http://pjax.heroku.com/

DHH đã trả lời chuỗi trên Hacker Tin tức về cách thức và thiết lập của họ với Basecamp; chủ yếu là các kịch bản phía máy chủ, MVC của khách hàng nhỏ.

https://news.ycombinator.com/item?id=3603898

Một liên kết thú vị khác. LinkedIn mô tả cách họ sử dụng khuôn mẫu phía khách hàng vì lý do hiệu suất. http://engineering.linkedin.com/frontend/leaving-jsps-dust-moving-linkedin-dustjs-client-side-templates