Những lợi thế nào được trao bằng cách sử dụng kết xuất trang phía máy chủ?


19

Tôi đang phát triển một ứng dụng web và hiện tại tôi đã viết toàn bộ trang web bằng html / js / css và trên phần phụ trợ tôi có các máy chủ lưu trữ một số dịch vụ RESTFUL. Tất cả logic trình bày được thực hiện thông qua việc lấy các đối tượng json và sửa đổi chế độ xem thông qua javascript.

Ứng dụng về cơ bản là một công cụ tìm kiếm, nhưng nó sẽ có các tài khoản người dùng với các vai trò khác nhau.

Tôi đã nghiên cứu một số khung như Play và Spring. Tôi còn khá mới đối với phát triển web, vì vậy tôi đã tự hỏi những lợi thế nào khi sử dụng kết xuất trang phía máy chủ sẽ cung cấp?

Có phải: Tốc độ? Phát triển và quy trình làm việc dễ dàng hơn? Truy cập vào các thư viện hiện có? Hơn? Tất cả những điều trên?


4
An ninh là một trong những lớn. Đặc biệt khi ứng dụng này động và cần giao tiếp với cơ sở dữ liệu.
Oded

2
@Oded - Tại sao bảo mật dễ thực hiện hơn khi bạn kết xuất trang so với API? Tôi đã luôn nghĩ rằng những gì bạn phải lập trình là tương đương nhau, nhưng về mặt tâm lý sẽ dễ dàng hơn (ít nhất là đối với tôi) để nhớ rằng không tin tưởng khách hàng khi thực hiện API. Tôi đang hỏi bởi vì nếu tôi đang xem một cái gì đó tôi thực sự muốn biết.
psr

1
@psr Anh ta có thể không đề cập đến bảo mật dữ liệu nhiều như bảo mật người dùng (Ví dụ: khai thác MITM). Chỉ là một phỏng đoán mặc dù.
maple_shaft

1
@psr - Đồng ý. Tuy nhiên, mới hôm qua tôi đã trả lời một câu hỏi trong đó OP có chuỗi kết nối được nhúng trong JS ...
Oded

1
@maple_shaft - MITM là một cái gì đó để suy nghĩ, nhưng một lần nữa tôi không chắc tại sao nó lại tạo ra sự khác biệt cho API so với HTML do máy chủ tạo ra. Tôi cho rằng một API thuận tiện hơn để lập trình chống lại, vì vậy nó sẽ là một vết nứt dễ dàng hơn một chút, nhưng tôi nghi ngờ đó là ý của bạn.
psr

Câu trả lời:


16

Kết xuất HTML phía máy chủ:

  • Kết xuất trình duyệt nhanh nhất
  • Bộ nhớ đệm trang có thể là một tăng hiệu suất nhanh và bẩn
  • Đối với các ứng dụng "tiêu chuẩn", nhiều tính năng UI được xây dựng sẵn
  • Đôi khi được coi là ổn định hơn vì các thành phần thường phải xác thực thời gian biên dịch
  • Dựa vào chuyên môn phụ trợ
  • Đôi khi nhanh hơn để phát triển *

* Khi yêu cầu UI phù hợp với khung tốt.


Kết xuất HTML phía máy khách:

  • Sử dụng băng thông thấp hơn
  • Trang kết xuất ban đầu chậm hơn. Thậm chí có thể không được chú ý trong các trình duyệt máy tính để bàn hiện đại. Nếu bạn cần hỗ trợ IE6-7 hoặc nhiều trình duyệt di động (webkit di động không tệ), bạn có thể gặp phải các nút cổ chai.
  • Xây dựng API đầu tiên có nghĩa là máy khách có thể dễ dàng trở thành một ứng dụng độc quyền, máy khách mỏng, dịch vụ web khác, v.v.
  • Dựa vào chuyên môn về JS
  • Đôi khi nhanh hơn để phát triển **

** Khi UI phần lớn là tùy chỉnh, với các tương tác thú vị hơn. Ngoài ra, tôi thấy mã hóa trong trình duyệt với mã được giải thích nhanh hơn đáng kể so với việc chờ biên dịch và khởi động lại máy chủ.


Bạn cũng có thể xem xét một mô hình lai với triển khai phụ trợ nhẹ bằng cách sử dụng hệ thống tạo khuôn mặt trước / cuối như ria mép .


1
Whoah, hoàn toàn quên mất cơ hội lưu trữ!
Michael K

"Đối với các ứng dụng" tiêu chuẩn ", nhiều tính năng UI được xây dựng trước" Điều đó không liên quan, cả máy chủ và máy khách đều có điều đó.
Raynos

@Raynos Anh ấy đã không đề cập đến việc sử dụng khung công tác phía khách hàng , nhưng nếu anh ấy đang sử dụng một khung công tác, đó là một điểm tốt.
peteorpeter

1
Cảm ơn, đây chủ yếu là câu trả lời tôi đang tìm kiếm. Tôi đã không làm quá nhiều với các khung công tác phía máy khách, nhưng tôi đã thực hiện một số nghiên cứu về Dust.js dựa trên sự lựa chọn của LinkedIn. Tôi biết rằng ria mép là một thay thế, nhưng tôi sẽ nghiên cứu nó nhiều hơn. Tôi có thể sẽ thực hiện một số loại lai, chủ yếu tôi muốn đẩy mọi thứ sang phía máy chủ nếu điều đó có thể cải thiện hiệu suất. Cảm ơn một lần nữa.
user1303881

Tôi thực sự sẽ không coi bất cứ điều gì được liệt kê cho "Kết xuất HTML phía máy khách" là một lợi thế. "Đôi khi nhanh hơn để phát triển" bay ra khỏi cửa sổ một lần nữa so với các trình duyệt cạnh chảy máu được xem xét (IE 8, v.v.).
null

3

tạo HTML phía máy chủ:

  • dễ gỡ lỗi hơn;
  • không có vấn đề với khả năng tương thích trình duyệt;
  • với thế hệ phía máy chủ toàn trang cổ điển, việc lưu trữ HTML trở nên khó khăn hơn, ngay cả khi nó có các phần bất biến lớn; (giải pháp là tìm nạp các đoạn HTML thông qua các cuộc gọi AJAX);
  • không tận dụng các proxy-bộ đệm và CDN cho HTML động;

thế hệ HTML phía máy khách:

  • khó gỡ lỗi hơn;
  • một số vấn đề với trình duyệt lỗi thời;
  • không có vấn đề lưu bộ đệm HTML phía máy khách;
  • tận dụng các proxy-bộ đệm và CDN cho các mẫu HTML và mã JS;
  • sử dụng mạng thấp hơn nhiều;

Lưu ý, việc tạo phía máy khách là cách nó được thực hiện trong trường hợp các trang web di động thành công, vì rõ ràng nó hiệu quả hơn với các trình duyệt hiện đại (các trình duyệt dựa trên WebKit có khoảng 70-80% thị trường di động).

LinkedIn có bài viết về những lợi thế của cách tiếp cận phía khách hàng bằng cách sử dụng Dust.js làm ví dụ: "Để lại các tệp tin trong bụi: chuyển LinkedIn sang các mẫu phía máy khách của Dust.js"


1
+1 Trên điện thoại thông minh hiện đại (chủ yếu sử dụng webkit di động), JS không có khả năng tắc nghẽn, trong khi băng thông mạng di động .
peteorpeter

1

Nó phụ thuộc vào yêu cầu của bạn là gì. Nếu bạn cần một giải pháp hiệu suất cao, độ trễ thấp phụ thuộc vào rất nhiều nhiệm vụ nhỏ, bạn có thể đi với một cấu trúc tương tự như những gì bạn mô tả. Các giải pháp phổ biến nhất, trong Java, PHP và C # không mặc định cho điều này.

Hầu hết các ứng dụng web phụ thuộc rất nhiều vào cơ sở dữ liệu - hầu hết trong số chúng rất nhiều để các trang không thể kết xuất mà không có ít nhất một cuộc gọi. Rõ ràng là bạn không muốn tiết lộ công khai cơ sở dữ liệu của mình, vì một số lý do:

  • Bảo mật (như Oded đề cập) - bạn chắc chắn không muốn công khai mạng của mình! Lý tưởng nhất là giao diện duy nhất cho các hệ thống của bạn từ bên ngoài phải là https đến máy chủ của bạn.
  • Dễ phát triển - bạn thực sự, thực sự , thực sự không muốn viết SQL bằng Javascript và các ngôn ngữ được thiết kế để trình bày web không hoạt động tốt với RDB. Họ không có khái niệm về nhà nước, ví dụ.

Vì vậy, khi bạn cần một cơ sở dữ liệu, bạn sử dụng các ngôn ngữ chơi tốt với chúng như Java, C #, PHP, v.v ... Cách dễ nhất để tạo một trang hóa ra là như sau: Bạn sử dụng ngôn ngữ tạo khuôn mẫu (nổi tiếng nhất là PHP, nhưng JSP và ASP là hai ngôn ngữ rất phổ biến khác) để xây dựng trang. Ngôn ngữ cung cấp các cấu trúc gọi ra các mô-đun khác. Trong PHP, điều này thường có trong trang hoặc trong một tệp PHP khác, sử dụng mẫu MVC. Trong JSP, bạn sử dụng scriptlets hoặc Ngôn ngữ biểu thức JSP. Các mô-đun khác này có thể thực hiện công việc nặng nề là kết nối với DB, thực hiện logic và trả về các giá trị cho lớp khung nhìn của bạn. Kết quả cuối cùng là một trang HTML được tạo, được hiển thị trên máy chủ và được gửi đến máy khách.

Khi cơ sở dữ liệu của bạn nằm trên cùng một mạng với trình kết xuất trang của bạn, bạn cũng sẽ có hiệu suất tốt hơn. Khách hàng chỉ phải thực hiện một yêu cầu và nhận một trang - bạn có thể cần thực hiện 10-15 yêu cầu DB trước khi bạn có tất cả thông tin người dùng cần. Độ trễ của mili giây trên mạng của bạn sẽ là vài giây đến vài phút nếu khách hàng phải làm tất cả.

Khi các hệ thống phát triển lớn hơn, sự tách biệt các mối quan tâm và năng lực cốt lõi trở nên quan trọng. HTML là tốt để hiển thị. Javascript tốt cho nội dung động. SQL rất tốt cho việc truy vấn cơ sở dữ liệu và các ngôn ngữ khác rất tốt trong logic nghiệp vụ. Công việc của chúng tôi là các nhà phát triển là sử dụng tất cả các công cụ có sẵn cho chúng tôi để xây dựng một hệ thống có thể bảo trì. Dễ phát triển là một phần rất lớn của một hệ thống tốt. Trong tâm trí của tôi, nó gần như quan trọng như hiệu suất và khả năng sử dụng. Các hệ thống lớn phát triển theo thời gian. Các hệ thống kém đã được viết xấu ngay từ đầu và không bao giờ được cải thiện.


you can't write SQL in Javascript Có thật không?! Bạn đã bao giờ xem các câu hỏi StackOverflow cho Javascript chưa? Tôi sẽ cầu xin khác nhau không may. Được cho đó là điều tồi tệ nhất bạn có thể làm trong mã khách hàng nhưng ...
maple_shaft

... tôi cũng quên mất Node.JS, nhưng sau đó, đó là máy chủ JS hoàn toàn khác.
maple_shaft

Rõ ràng bạn có thể - TIL! Chỉ là ... wow, mặc dù. Nói về việc lạm dụng ngôn ngữ, mặc dù!
Michael K

2
Giao diện REST là cách máy khách hiện truy cập dữ liệu cơ sở dữ liệu thông qua các đối tượng json. Nó không phơi bày mọi thứ và ứng dụng này là một phần của mạng doanh nghiệp tư nhân. Một lợi thế của giao diện là khả năng cho các ứng dụng khác trong doanh nghiệp tận dụng bất kỳ dịch vụ nào họ muốn. Từ góc độ phát triển, tôi có thể để các nhà phát triển giao diện người dùng làm như họ muốn trong html / js / css và sau đó họ có thể ping giao diện RESTful được thiết kế bởi các nhà phát triển java. Tuy nhiên, hầu hết chúng ta đều có bộ kỹ năng pha trộn và sự phân chia đó có thể không cần thiết.
dùng1303881

3
-1: @MichaelK: bạn đang thảo luận với một người đàn ông rơm mà bạn tưởng tượng, nhưng hoàn toàn không liên quan gì đến cuộc sống thực. RESTful không sử dụng HTTP. Không ai cần phải viết SQL trong JS, đó là giao diện RESTful dành cho. Ngoài ra RESTful không có nghĩa, có ánh xạ 1 đến 1 với các truy vấn DB. Câu trả lời của bạn có thể có giá trị vào những năm 1990 nhưng hiện tại chúng tôi đang ở năm 2012.
vartec

0

Các máy khách di động thường bị hạn chế về năng lượng, băng thông và bộ nhớ. Có lẽ tốt hơn để kết xuất các trang cho họ trên máy chủ.

Đối với các máy khách để bàn, bạn có thể xem xét việc gửi js + json để hiển thị trang trên máy khách, làm cho nó có thể cập nhật động, v.v.


Trong thực tế tuy nhiên điều ngược lại chính xác thường đúng. Thực tế, dự án jQuery Mobile hoàn toàn dựa trên ý tưởng kết xuất phía máy khách.
Mũi nhọn

@Pointy: có, đây có thể là cách khác. Người ta phải kiểm tra các trang cụ thể hoạt động như thế nào trên các máy khách cụ thể. Cung cấp một liên kết đến một thay thế (như liên kết phiên bản 'di động' và 'máy tính để bàn') cũng có thể hữu ích cho người dùng.
9000

Điện thoại di động ngày nay được đặc trưng hơn nhiều bởi độ trễ cao hơn băng thông thấp hoặc sức mạnh xử lý. Trong dự án tôi đã làm gần đây, chúng tôi quan tâm nhiều hơn đến kích thước trang sau đó tốc độ kết xuất - điện thoại hiện đại khá tốt.
Michael K

@Pointy dự án jQuery Mobile cũng là một đống mã khủng khiếp không nên sử dụng. Mức độ phổ biến! == giá trị
Raynos

@Raynos Chúng tôi thực sự đang sử dụng Jquery Mobile, với thành công khá tốt. Bạn có biết cái gì chúng tôi không? ;)
Michael K

0

Một lợi thế lớn của kết xuất phía máy chủ là khả năng truy cập - các ứng dụng dựa trên javascript vẫn là một vấn đề lớn đối với những người không có tầm nhìn. Điều đó và có một anh chàng mù tên là "googlebot", người mà bạn có thể muốn phục vụ. Anh ấy cũng không làm javascript.


Điểm hay, mặc dù ứng dụng này không yêu cầu SEO vì nó là riêng tư, tôi cũng đang phát triển một số ứng dụng cá nhân và đó là một sự cân nhắc trong lĩnh vực đó.
user1303881

Googlebot giải thích JS / AJAX trong một thời gian khá lâu: searchenginewatch.com/article/2122137/ trên
vartec

@vartec: Tôi nghĩ rằng quan điểm chính trong bài viết đó là "bây giờ có thể đọc và hiểu một số nhận xét động nhất định được triển khai thông qua AJAX và JavaScript." Sự nghi ngờ của tôi là nó bao gồm disqus và facebook nhưng không phải là thiết lập ajax tùy chỉnh của bạn.
Wyatt Barnett
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.