2012-10-28 48 views
12

Tôi đang làm việc trên một trang web lớn và chúng tôi đang di chuyển rất nhiều chức năng cho phía máy khách (ngăn xếp Require.js, Backbone và Handlebars). Thậm chí còn có các cuộc thảo luận về việc có thể di chuyển tất cả các kết xuất sang phía máy khách.Tại sao chính xác là hiển thị HTML phía máy chủ nhanh hơn phía máy khách?

Nhưng đọc một số bài viết, đặc biệt là các bài viết về Twitter di chuyển khỏi hiển thị phía khách hàng, đề cập đến phía máy chủ nhanh hơn/đáng tin cậy hơn, tôi bắt đầu có câu hỏi. Tôi không hiểu cách hiển thị các widget HTML khá đơn giản trong JS từ JSON và các mẫu là một trình duyệt hiện đại trên một CPU lõi kép với RAM 4-8 GB là chậm hơn so với việc tạo hàng tá ứng dụng trong ứng dụng phía máy chủ của bạn. Có bất kỳ số liệu đo điểm chuẩn thực tế nào về vấn đề này không? Ngoài ra, có vẻ như phân tích cú pháp các mẫu HTML bởi các công cụ tạo khuôn mẫu phía máy chủ không thể nhanh hơn việc hiển thị cùng một mã HTML từ một mẫu Handlebars, đặc biệt nếu đây là một hàm JS precomp?

+0

Tôi đoán rằng hoạt động DOM chậm hơn thao tác chuỗi. Bạn có thể liên kết với một số bài viết đó không? – Blender

+0

cái này đặc biệt http://code-inside.de/blog-in/2012/07/06/client-side-vs-server-side-html-rendering/ –

Trả lời

8

Có rất nhiều lý do:

  1. Javascript được hiểu ngôn ngữ và là chậm hơn so với phía máy chủ (thường được thực hiện bằng ngôn ngữ biên soạn)
  2. DOM thao tác chậm, và nếu bạn đang thao tác với nó trong JS nó dẫn đến hiệu suất kém. Có nhiều cách để khắc phục điều này như chuẩn bị hiển thị của bạn trong văn bản sau đó đánh giá nó, điều này thực tế có thể giúp bạn gần với hiển thị phía máy chủ.
  3. Một số trình duyệt chỉ là quá chậm, đặc biệt là cũ IE
+0

Tôi sẽ không thực sự lo lắng về các trình duyệt IE cũ. Chúng tôi không hỗ trợ IE dưới IE8. Và tôi sẽ không lo lắng về thiểu số người dùng có máy và kết nối chậm. Tôi tò mò về hiệu năng hoạt động chậm hơn nhiều trên cùng một máy, cùng một trình duyệt, chỉ một tải HTML và một trình duyệt khác tải JSON và hiển thị trong máy khách. Tôi đoán tôi chỉ cần thiết lập một số thử nghiệm. –

+1

Tùy thuộc vào số lượng thao tác DOM bạn đang thực hiện và số lượng JavaScript bạn đang làm. Ví dụ: nếu bạn đang chèn một phần tử DOM DOM, tập lệnh của bạn có thể mất nhiều giây để hiển thị, trong khi có cùng một phần tử DOM được đánh giá một lần (kết xuất máy chủ hoặc văn bản) sẽ mất một phần nghìn giây. Những con số này cho bạn thấy sự khác biệt nhưng con số thực tế phụ thuộc vào trang của bạn, sức mạnh máy và trình duyệt. – albattran

3
  • Hiệu suất của ngôn ngữ biên dịch so với javascript giải thích
  • Caching, ví dụ: - phục vụ tối đa các trang chính xác cùng một người dùng khác đã được yêu cầu, điều này loại bỏ các cần cho mỗi khách hàng để hiển thị nó. Tuyệt vời cho các trang web có lưu lượng truy cập lớn - tức là các trang web tin tức. Micro-caching thậm chí có thể cung cấp gần cập nhật thời gian thực, nhưng phục vụ lưu lượng truy cập đáng kể từ bộ nhớ cache. Không cần phải chờ đợi cho khách hàng render
  • ít dựa dẫm vào người sử dụng với các máy tính cũ hoặc chậm/tê liệt các trình duyệt
  • Chỉ cần lo lắng về render, ít phụ thuộc vào cách trình duyệt khác nhau quản lý DOM (độ tin cậy)

Nhưng đối với giao diện người dùng phức tạp, việc hiển thị các tương tác phía khách hàng sẽ cung cấp trải nghiệm người dùng nhanh hơn.

Điều đó thực sự phụ thuộc vào hiệu suất bạn đang cố gắng tối ưu hóa và cho số lượng người dùng.

+0

Trang web khá lớn (không chắc chắn số lượng người dùng, nhưng nó được lưu trữ trên 60 máy chủ). Hầu hết nội dung được cá nhân hóa. Đó là một ứng dụng quản lý dự án và cộng tác lớn. –

+0

Với sự hợp tác và quản lý dự án, tôi vẫn muốn hiển thị tập lệnh trên máy khách. Sự tương tác đòi hỏi một phản ứng linh hoạt, vì vậy bạn sẽ cần js anyway. –

0

Để chạy mã ở phía máy khách, trước tiên nó phải được tải. Mã phía máy chủ chỉ được tải khi máy chủ khởi động, trong khi mã máy khách phải có khả năng được tải mỗi lần trang. Trong mọi trường hợp, mã phải được hiểu khi tải trang, ngay cả khi tệp đã được lưu trong bộ nhớ cache. Bạn cũng có thể có bộ nhớ đệm của JS phân tích cây trong trình duyệt, nhưng tôi nghĩ rằng những người không phải là tiếp tục tồn tại, vì vậy họ sẽ không sống lâu.

Điều này có nghĩa là không cần biết JavaScript hoạt động nhanh như thế nào (và nó khá nhanh) trong khi người dùng đợi. Nhiều nghiên cứu đã chỉ ra rằng thời gian tải trang ảnh hưởng rất lớn đến nhận thức của người dùng về chất lượng và mức độ liên quan của trang web.

Điểm mấu chốt là bạn có tối đa 500ms để đưa trang của bạn được hiển thị từ bộ nhớ cache trong môi trường nhà phát triển điển hình của bạn.Các thiết bị và mạng chậm hơn sẽ làm cho độ trễ đó hầu như không thể chấp nhận được đối với hầu hết người dùng.

Vì vậy, bạn có thể có 50-100ms để làm mọi thứ trong JavaScript trong khi tải trang, tất cả, tổng số lớn, có nghĩa là hiển thị một trang phức tạp, tốt, không dễ dàng.

Các vấn đề liên quan