Ưu điểm và nhược điểm của việc xây dựng một ứng dụng web duy nhất [đã đóng]


52

Tôi sắp kết thúc giai đoạn tạo mẫu / bằng chứng về giai đoạn khái niệm cho một dự án phụ mà tôi đang thực hiện và cố gắng quyết định một số quyết định thiết kế ứng dụng quy mô lớn hơn. Ứng dụng này là một hệ thống quản lý dự án phù hợp hơn với quy trình phát triển nhanh. Một trong những quyết định tôi cần đưa ra là có nên sử dụng ứng dụng nhiều trang truyền thống hay ứng dụng một trang hay không.

Hiện tại nguyên mẫu của tôi là một thiết lập nhiều trang truyền thống, tuy nhiên tôi đã xem xét backbone.js để dọn dẹp và áp dụng một số cấu trúc cho mã Javascript (jQuery) của tôi. Có vẻ như trong khi backbone.js có thể được sử dụng trong các ứng dụng nhiều trang, nó sẽ tỏa sáng hơn với các ứng dụng trang đơn. Tôi đang cố gắng đưa ra một danh sách các ưu điểm và nhược điểm của việc sử dụng phương pháp thiết kế ứng dụng một trang. Cho đến nay tôi có:

Ưu điểm

  • Tất cả dữ liệu phải có sẵn thông qua một số loại API - đây là một lợi thế lớn cho trường hợp sử dụng của tôi vì dù sao tôi cũng muốn có API cho ứng dụng của mình. Hiện tại, khoảng 60-70% các cuộc gọi của tôi để nhận / cập nhật dữ liệu được thực hiện thông qua API REST. Làm một ứng dụng một trang sẽ cho phép tôi kiểm tra API REST tốt hơn vì chính ứng dụng sẽ sử dụng nó. Điều đó cũng có nghĩa là khi ứng dụng phát triển, API sẽ phát triển vì đó là những gì ứng dụng sử dụng; không cần duy trì API như một tiện ích bổ sung cho ứng dụng.

  • Ứng dụng nhạy hơn - vì tất cả dữ liệu được tải sau trang ban đầu được giữ ở mức tối thiểu và được truyền ở định dạng nhỏ gọn (như JSON), nên các yêu cầu dữ liệu thường sẽ nhanh hơn và máy chủ sẽ xử lý ít hơn một chút.

Nhược điểm

  • Sao chép mã - ví dụ mã mô hình. Tôi sẽ phải tạo các mô hình cả về phía máy chủ (PHP trong trường hợp này) và phía máy khách trong Javascript.
  • Logic nghiệp vụ trong Javascript - Tôi không thể đưa ra bất kỳ ví dụ cụ thể nào về lý do tại sao điều này sẽ tệ nhưng tôi cảm thấy không hợp lý khi có logic kinh doanh trong Javascript mà bất kỳ ai cũng có thể đọc được.
  • Rò rỉ bộ nhớ Javascript - vì trang không bao giờ tải lại, rò rỉ bộ nhớ Javascript có thể xảy ra và tôi thậm chí sẽ không biết bắt đầu gỡ lỗi chúng ở đâu.

Ngoài ra còn có những thứ khác là loại kiếm hai lưỡi. Ví dụ, với các ứng dụng trang đơn, dữ liệu được xử lý cho mỗi yêu cầu có thể ít hơn rất nhiều vì ứng dụng sẽ yêu cầu dữ liệu tối thiểu cần cho yêu cầu cụ thể, tuy nhiên điều đó cũng có nghĩa là có thể có nhiều yêu cầu nhỏ hơn đối với máy chủ. Tôi không chắc đó là điều tốt hay xấu.

Một số ưu điểm và nhược điểm của các ứng dụng web đơn mà tôi nên ghi nhớ khi quyết định nên đi theo hướng nào cho dự án của mình?


Basecamp , phiên bản mới của basecamphq đang hoạt động khá tốt với thiết lập IMO trang đơn.
Hakan Deryal

Bạn có thể tìm thấy rò rỉ bộ nhớ với trình kiểm tra heap của chrome: gent.ilcore.com/2011/08/finding-memory-leaks.html
Joeri Sebrechts

bắt buộc xkcd.com/1309
Pieter B

Câu trả lời:


17

Nhược điểm lớn nhất là máy khách phải kích hoạt JavaScript và đủ mạnh để chạy một số lượng lớn. Cũng khó hơn để thỏa mãn các mối quan tâm về khả năng truy cập hoặc bất cứ điều gì khác liên quan đến phân tích HTML tĩnh (mặc dù điều gì đó biết API cụ thể của bạn có thể có thể làm tốt hơn so với quét HTML). Cuối cùng, việc rò rỉ bộ nhớ đáng kể sẽ dễ dàng hơn.

Theo như sao chép mã hoặc đưa logic kinh doanh vào máy khách - tôi không chắc bạn phải làm bao nhiêu trong số đó. Nếu mô hình trên máy khách là Mô hình xem (mô hình phù hợp với thế giới như UI nhìn thấy nó, không phải mô hình kinh doanh) thì logic khớp với ViewModel cho đến mô hình kinh doanh có thể nằm trên máy khách, máy chủ, hoặc một chút của cả hai. Nó phụ thuộc vào cách bạn cảm nhận về việc API của bạn chứa mặt tiền dành riêng cho khách hàng so với việc khách hàng dịch các đầu vào UI thành các lệnh gọi API.

Bạn cũng có thể muốn xem knoutout.js. Tôi không thể nói nếu nó tốt hơn xương sống nhưng nó có thể phù hợp với dự án của bạn hơn.


Phải, tôi đoán rằng hầu hết các sao chép mã sẽ có xác thực dữ liệu là tốt. Tôi ổn với việc yêu cầu javascript được kích hoạt vì tôi không quan tâm đến khả năng truy cập cho dự án này (như trình đọc màn hình và những gì không). Đối với vấn đề rò rỉ bộ nhớ javascript là mối quan tâm của tôi, với liên kết được cung cấp trong các nhận xét về câu hỏi của tôi, điều đó thực sự phủ nhận điều đó (chrome là dù sao trình duyệt phát triển chính của tôi).
ryanzec

7

Nhược điểm tôi thường thấy với các ứng dụng web trang đơn:

  • Không có khả năng liên kết đến một phần cụ thể của trang web, thường chỉ có 1 điểm vào.
  • Nút quay trở lại và chuyển tiếp.
  • Việc sử dụng các tab bị hạn chế hoặc không tồn tại.

(đặc biệt là điện thoại di động :)

  • Mất rất lâu để tải.
  • Đừng làm gì cả.
  • Không thể tải lại một trang, việc mất mạng đột ngột sẽ đưa bạn trở lại điểm bắt đầu của trang.

Tất cả những thứ này có thể được xử lý xung quanh, nhưng từ những gì tôi đã thấy, hầu hết những người ngồi trên ghế không.


9
1,2 và 6 về cơ bản chỉ là những bản giao hưởng của cùng một vấn đề. Người tạo không sử dụng liên kết API / hàm lịch sử.
Martin Hansen

11
Câu trả lời này đã lỗi thời, Hầu hết các khung ứng dụng một trang đều có cách xử lý các vấn đề trên
Luis

@Luis trong khi công nghệ ở đó, quá thường xuyên, nó không được sử dụng.
Pieter B

5

Có một ứng dụng khách cực kỳ quan trọng không bao giờ chạy Javascript: trình thu thập dữ liệu của Google (tính đến năm 2012) . (Tôi cho rằng Bing cũng không chạy JS.)

Bạn sẽ cần cung cấp một phiên bản không phải AJAX hợp lý của mỗi trang cần được lập chỉ mục hoặc liên kết đến một trang cần được lập chỉ mục.

Nếu trang web của bạn nhỏ, bạn có thể cung cấp các phiên bản rất cơ bản của một vài trang chỉ để lập chỉ mục cho bot.

Nếu hầu hết nội dung của trang chỉ dành cho người dùng đã đăng ký hoặc không cần lập chỉ mục vì một số lý do khác, bạn có thể tạo toàn bộ không gian không được lập chỉ mục dưới dạng ứng dụng một trang, với tìm kiếm của riêng bạn, blackjack, v.v.

Nếu không phải trong số này, có lẽ bạn nên phát triển một trang web nhiều trang ngay từ đầu và chỉ cung cấp các bản cập nhật AJAX khi nó không thay đổi 'mục đích chung' của trang.


4
Googlebot hiện đã đọc và thậm chí thực thi một số Javascript. Xem googlewebmastercentral.blogspot.com/2011/11/ Mạnh
jfrankcarr

2
Đối với câu hỏi cụ thể này, đó là một ứng dụng quản lý dự án. Có lẽ không phải là một trang web đáng SEO.
Jordan

SEO không phải là một mối quan tâm lớn đối với hầu hết các trang mặc dù thật tuyệt khi có thể SEO các vấn đề riêng lẻ vì nó có thể được cấu hình để cho phép truy cập ẩn danh vào nó (để nếu người dùng giải quyết vấn đề họ gặp phải với sản phẩm, họ có thể tìm vấn đề liên quan đến nó trong trình theo dõi).
ryanzec

1
2015 cập nhật: Google không thực hiện JS
rinogo

3

-Phân đoạn mã - Ví dụ: mã mô hình. Tôi sẽ phải tạo các mô hình cả về phía máy chủ (trường hợp PHP) và phía máy chủ trong javascript.

Bạn đang ở trong thế giới PHP nhưng có các chiến lược tạo mã trong thế giới .NET để tự động tạo các proxy JavaScript WCF. Xem tại đây

Tôi không biết những tùy chọn nào có thể có sẵn để không phải tự tạo các đối tượng từ xa bằng JavaScript trong ứng dụng PHP, nhưng đây là một tùy chọn cho những người viết các ứng dụng trang đơn bằng .NET.


0

Sự lựa chọn không phải là cái này hay cái khác. JWt là một bộ công cụ web thực hiện ảo ảnh hoàn hảo của một trang web nhiều trang, nhưng nó chỉ là một trang duy nhất. Ngoài ra, nó sẽ nhận ra các bot và trình duyệt google không có javascript (dùng thử) và chuyển sang mô hình nhiều trang truyền thống khi phát hiện ra chúng.

Nói ngắn gọn:

  • không cần phải viết API (nhưng bạn vẫn có thể, nếu bạn muốn)
  • ứng dụng đáp ứng: mỗi lần nhấp chuột của người dùng cần nhiều nhất một chuyến máy chủ (cộng với tìm nạp hình ảnh)
  • không sao chép mã
  • không có logic khách hàng phía doanh nghiệp
  • phía khách hàng phức tạp tối thiểu
  • bot tìm kiếm có thể lập chỉ mục nó

1
JWt là một bộ công cụ java. Câu hỏi là về PHP.
Joeri Sebrechts
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.