2010-06-24 54 views
21

Một câu hỏi lý thuyết:
Chúng ta đều biết về việc giảm thiểu và kết hợp các tệp javascript của chuyên gia nhằm giảm yêu cầu HTTP để tăng tốc trang web. Nhưng khi các thư viện javascript phổ biến được sử dụng (ví dụ jQuery), nó không quá ngu ngốc để giả định rằng những thư viện này đã được tải xuống máy khách từ một trang khác.Giảm yêu cầu HTTP hay không?

Vậy điều gì sẽ được ưu tiên hơn? Các chàng trai lớn trong ngành xử lý nó như thế nào?

A) Kết hợp và rút gọn từng tập lệnh thành tập lệnh lớn và phân phối nó từ CDN của riêng tôi.

B) Kết hợp tất cả các tập lệnh "tự viết" vào một tệp và sử dụng các thư viện CDN có sẵn nếu có thể.

Cảm ơn!

+0

Ok guys, Bounty đang BẬT! – Industrial

Trả lời

13
  • "Kết hợp và giảm bớt mỗi kịch bản vào một đồ sộ và phục vụ nó từ CDN riêng tôi"

    Nếu bạn có một CDN, những gì là chúng ta đang nói về? :) Bạn có nghĩa là máy chủ, phải không?

  • "Các chàng trai lớn trong ngành xử lý nó như thế nào?"

    Những người lớn luôn sử dụng máy chủ của riêng họ.

  • "... không quá ngu ngốc để giả định rằng những thứ này đã được tải xuống máy khách từ một trang khác".

    Thật không may.Sự kiện:

    • 40-60% người sử dụng có cache limits are small
    • phiên bản khác nhau một empty cache experience
    • trình duyệt của thư viện đang được sử dụng, bộ nhớ cache chỉ xảy ra nếu chúng phù hợp
    • tài nguyên từ một tên miền mới tạo một tra cứu DNS DNS, chậm chậm
    • + bạn cần phải quản lý phụ thuộc
+4

+1 cho liên kết bộ nhớ cache trống và +1 cho tra cứu DNS – fmark

+5

Trích dẫn thực tế là "40-60% người dùng _Yahoo! Có trải nghiệm bộ nhớ cache trống". Những con số này có lẽ rất khác với bất kỳ trang web nào không phải là Yahoo. Đáng chú ý, yahoo.com là một trang chủ trình duyệt rất phổ biến. Điều này dẫn đến một hồ sơ sử dụng rất khác nhau. Điều này đưa chúng ta đến điểm quan trọng nhất: theo dõi số liệu thống kê của riêng bạn. Bạn sẽ không biết những gì làm việc tốt nhất cho * trang web của bạn * cho đến khi bạn đo lường chính mình. –

+4

"Đáng chú ý, yahoo.com là một trang chủ trình duyệt rất phổ biến" - LoL. Đó là lý do tại sao cơ hội của cùng một người dùng nhấn yahoo trang hai lần một ngày thực sự cao hơn cơ hội của người dùng có chính xác cùng một thư viện với chính xác cùng một phiên bản từ chính xác cùng một CDN trong bộ nhớ cache của mình (và không thay thế bởi nội dung khác từ sau đó). – galambalazs

6

Tôi nghĩ rằng nó phụ thuộc vào bạn trang web:

  • Nếu bạn trang web bao gồm chủ yếu là các trang cùng loại mà cần các kịch bản tương tự tôi sẽ đi cho A)
  • Nếu bạn có rất nhiều các tập lệnh khác với từng trang phụ của trang web của bạn, tôi sẽ truy cập B). Kết hợp các tập lệnh được sử dụng nhiều nhất với nhau trong một tập lệnh. Nếu bạn có các tập lệnh lớn không được sử dụng trên mọi trang, hãy tạo một tập lệnh riêng cho nó.

Cách tốt nhất để thực sự biết phải làm gì là kiểm tra sự kết hợp các kỹ thuật nào giúp bạn tiết kiệm được nhiều lưu lượng truy cập/kết nối nhất.

P .: Cá nhân tôi không thích ý tưởng cho phép người khác phân phát tệp cho trang web của tôi, vì điều gì sẽ xảy ra nếu CDN không thành công nhưng máy chủ của bạn vẫn hoạt động? Nếu đây không phải là vấn đề đối với bạn, hãy cố gắng phục vụ tất cả các thư viện bạn sử dụng từ một CDN đáng tin cậy.

+2

+1 để kiểm tra và sử dụng các chỉ số thực để lựa chọn – Anurag

+5

+1 cho các vấn đề tiềm ẩn về CDN. Tôi thấy những vấn đề đó, tất cả bây giờ và sau đó; những gì còn tồi tệ hơn, là hầu hết khách truy cập sẽ nghĩ rằng trang web của bạn là crap, bởi vì CSS của bạn/JS không thể được nạp. –

3

Tôi nghĩ rằng nó đi xuống đến một vài điều:

  1. bao nhiêu trang sử dụng mã trong trang web của bạn
  2. Chất lượng của các CDN
  3. bao nhiêu mã nó là

Ngoài ra còn có sự khác biệt giữa việc sử dụng các gói Javascript phổ biến, chẳng hạn như jQuery và sử dụng gói cá nhân, mà chỉ những khách truy cập đã truy cập trang web của bạn mới có.

Nâng cao hiệu suất có thể xảy ra từ hai nơi: 1) bộ nhớ cache của trình duyệt và 2) bộ nhớ cache dns, ngay cả khi tệp không được lưu trữ cục bộ, máy chủ dns có tuyến đường giảm thiểu thời gian yêu cầu hoặc thậm chí tạm thời phân phát tập tin.

Tôi khuyên bạn nên sử dụng CDN và lưu trữ tệp cục bộ. Tùy thuộc vào tài nguyên của bạn (phần cứng/băng thông), bạn có thể cần phải sử dụng CDN dù sao đi nữa. Nó sẽ được tốt đẹp để sử dụng máy chủ lịch trình để kiểm tra tình trạng CDN và định tuyến lại đường dẫn khi áp dụng.

Ngoài ra, hãy nhớ rằng một số người dùng chọn tắt bộ nhớ cache của trình duyệt. Vì vậy, giảm thiểu JS của bạn luôn là một lợi thế.Bạn nên tách JS của bạn thành hai tệp: 1) Cần thiết khi tải và 2) Không cần thiết khi tải. Về cơ bản, lấy mã cần thiết ở đó trước tiên, để cải thiện thời gian tải nhận thức. Sau đó tải tất cả các tính năng bổ sung khác (ví dụ: trình chiếu, đổi màu, v.v.).

Điểm cuối cùng là sử dụng tiêu đề Hết hạn vì không có điều nào quan trọng nếu bạn không tối ưu hóa điều đó. Đó là những gì thực sự sẽ làm giảm tốc độ cho khách truy cập quay lại với bộ nhớ cache được kích hoạt. YSlow là một addon Firefox tuyệt vời sẽ giúp đánh giá hiệu suất tải của bạn.


Để trả lời câu hỏi của bạn: Giảm yêu cầu HTTP, nhưng làm đánh giá của riêng bạn về kích thước tập tin của JS.

(Cực đoan) Bạn không muốn một tệp JS 10MB hoặc trang web của bạn sẽ mất quá nhiều thời gian để tải. Bạn cũng không muốn 1000 tệp 10KB vì chi phí HTTP. Một lần nữa, sử dụng điều này để minh họa cho điểm mà bạn muốn cân bằng giữa kích thước và số lượng tệp - và như tôi đã nói trước đó, hãy gói chúng vào hiệu suất cần thiết so với mong muốn.

+4

Đối với điểm kích thước đối tượng: "Chúng tôi thấy rằng nếu kích thước của thành phần lớn hơn 25 KB, trình duyệt của iPhone không lưu vào bộ nhớ cache. Do đó, các trang web được thiết kế riêng cho iPhone sẽ giảm kích thước của mỗi thành phần xuống 25 Kbytes hoặc ít hơn cho hành vi lưu vào bộ nhớ đệm tối ưu. " http://www.yuiblog.com/blog/2008/02/06/iphone-cacheability/ IE6 SP1, phiên bản IE cuối cùng có sẵn cho win2k, có giới hạn về kích thước của tệp javascript lớn nhất mà nó có thể xử lý tốt. IIRC, nếu nó gặp một tệp javascript vượt quá giới hạn, nó sẽ đơn giản cắt bớt nó. –

+2

@ Điểm tốt nhất, phần cứng máy khách cũng nên được xem xét. @Industrial, bạn có thể muốn sử dụng một phiên bản di động của trang web của bạn, mặc dù thường đòi hỏi ít chi phí JS hơn. – vol7ron

+0

@Frank - Cảm ơn rất nhiều thông tin của bạn về iphone và IE6. Chúng tôi chắc chắn sẽ đầu cho một phiên bản di động trên trang web này để bình luận của bạn thực sự tiện dụng! – Industrial

4

Tôi nghĩ cách tốt nhất là sử dụng tệp 'application.js' được rút gọn (chứa tất cả javascript ứng dụng cụ thể) và sau đó sử dụng dịch vụ như API Google AJAX Libraries (tìm thấy here) để tải jQuery, Prototype, v.v.

2

Đặc biệt là câu hỏi của bạn về cách những người lớn của ngành xử lý các kịch bản phía máy khách, bạn luôn có thể xem và xem. stackoverflow.com có ​​vẻ tốt dựa vào phiên bản Google của jquery lib. Khác decidedly nhất không ....

+2

IE8 không thích thư viện jQuery được khai thác tối thiểu của Google cho một trong những hiệu ứng hình ảnh mà tôi đang thực hiện. Vì vậy, không phải lúc nào cũng dựa vào mã được thiết lập ~ vẫn thực hiện kiểm tra chất lượng trong các trình duyệt khác nhau. – vol7ron

3

Omar al Zabir điều hành một trang web được gọi Pageflakes và có một loạt các bài viết về làm thế nào để cải thiện hiệu suất. One of them đặc biệt giải thích cách nén và kết hợp tất cả mọi thứ ở phía máy chủ trước khi gửi cho khách hàng.

Bạn cũng có thể sử dụng hình ảnh css sprites để giảm yêu cầu HTTP. Họ giúp một LOT cho hình ảnh thường được sử dụng.

* Tôi chắc chắn không có một trang web sản xuất lớn, nhưng những điều này chắc chắn đã giúp tiết kiệm chi phí băng thông.

+0

Đúng, đã nhận thức được các sprites, một kỹ thuật thực sự tiện dụng để sử dụng – Industrial

2

Không có lý do cụ thể nào khiến một tập lệnh sẽ nhanh hơn việc chia nhỏ tập lệnh. Điều này xảy ra vì trình duyệt tải xuống đồng thời bị giới hạn, nhưng không phải bởi một.

Tôi nghĩ ý tưởng nên xử lý các tập lệnh giao diện người dùng đồng bộ trước, sau đó là tập lệnh "phản hồi hoạt động của người dùng" (như xác thực, v.v.).

Tất cả những thứ khác được cung cấp bằng nhau, tùy chọn B trông giống như tốt nhất.