2012-03-10 33 views
9

Tôi đang cố gắng cải thiện tốc độ tải trang đầu cho người dùng và tôi thấy rằng jQuery đang làm chậm sự kiện DomContentLoaded xuống hơn 100 mili giây.jQuery có làm chậm việc hiển thị các trang web bằng 100 mili giây hay không?

Tôi đang đo điểm chuẩn trên Windows 7 với Chrome 17 bằng máy tính có ổ i5 2,5Ghz, ổ SSD và 8GB RAM. Thử nghiệm được chạy trên máy tính cục bộ của tôi. Tôi lo ngại rằng tốc độ chậm tôi thấy trên máy của mình sẽ còn chậm hơn trên các máy tính và trình duyệt cũ hơn.

Đây có phải là hình phạt tiêu chuẩn cho việc sử dụng jQuery hay không hoặc có cách nào để tăng tốc hiệu suất mà tôi bị thiếu không?

Đây là mã mà tôi đang sử dụng:

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript"> 
      console.time("DOMContentLoaded"); 
     </script> 
    </head> 
    <body> 
     <h1>Hello World</h1> 

     <script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script> 

     <script type="text/javascript"> 
      document.addEventListener("DOMContentLoaded", ready, false); 

      function ready() { 
       console.timeEnd("DOMContentLoaded"); 
      } 
     </script> 
    </body> 
</html> 

Trên giao diện điều khiển, thời gian mà tôi thấy là khoảng ~ 100ms.

Khi tôi xóa dòng tải jQuery, thời gian xấp xỉ ~ 1ms.

Tôi cũng đã thử đoạn code trên bằng cách sử dụng CDN của Google:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

Kết quả là phần lớn giống nhau.

Luôn có hình phạt 100ms để sử dụng jQuery không? Có cái gì đó mà tôi đang thiếu? Cảm ơn!

+0

Cố gắng đặt mã bên trong DOM sẵn sàng với jQuery: '$ (sẵn sàng);' – gdoron

+1

Xin chào gdoron - độ trễ 100ms này dường như chỉ đơn giản là tải jQuery, mà không thực sự chạy javascript khác. Nó xuất hiện mà sẽ chỉ giúp cho javascript bổ sung. – Chris

+2

Bài viết gần đây này có thể liên quan đến sở thích của bạn: "[Dừng trả thuế jQuery] (http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax)" của @ [ Sam Saffron] (http://stackoverflow.com/users/17174/sam-saffron) – Piskvor

Trả lời

-3

Sự chậm lại mà bạn thấy là do trình duyệt phải tải xuống thư viện jQuery trước tiên. Đây là "hình phạt" bạn nhận được khi bạn bao gồm bất kỳ javascript bên ngoài nào. Nó không liên quan gì đến jQuery.

Bạn có thể giảm thiểu điều này bằng cách sử dụng trình tải tập lệnh như require.js.

+0

Nó có một cái gì đó để làm với jquery mặc dù. Ngay cả khi bạn tải toàn bộ nội dung dưới dạng tệp cục bộ, vẫn có thời gian phân tích cú pháp cho jquery, tối thiểu là có thể. – jdi

+0

Hi blockhead - trong các thử nghiệm, tôi đã tải jQuery cục bộ. Tôi cũng đã thử tải nó ra khỏi Google CDN và đo thời gian tải trang tiếp theo khi thư viện đã được lưu trữ. – Chris

4

Bạn sẽ thấy một lần truy cập nhỏ bất cứ khi nào tải thư viện JS lớn như jQuery. Cá nhân, tôi cho rằng 100ms không nhiều, bạn phải ghi nhớ TẤT CẢ các yếu tố dẫn đến điều này:

  1. Bạn đang định thời gian tải, cần có thời gian.
  2. Kết nối mạng của bạn phát một yếu tố (có tài liệu phân tích cú pháp, yêu cầu, chờ phản hồi). Độ trễ của kết nối của bạn phải được xác định trong (sử dụng http://http://pingtest.net/ để kiểm tra độ trễ của bạn và trừ thời gian chờ từ 100ms + để có ý tưởng tốt hơn về lần truy cập thực tế).
  3. Điều khiển bộ nhớ cache thích hợp trên máy chủ web của bạn có thể tất cả trừ # 2, cấu hình máy chủ đó để tệp chỉ hết hạn mỗi tháng một lần. Tiêu đề này sau đó sẽ được chuyển với tệp để trình duyệt của người dùng chỉ tải nó mỗi tháng một lần. Bạn sẽ vẫn phải chịu yêu cầu nhỏ khi tải trang đầu tiên, nhưng ít nhất thì các yêu cầu trang tiếp theo sẽ kéo nó từ bộ nhớ cache cục bộ giảm thời gian này.
  4. Có phân tích cú pháp thời gian thực hiện; Tệp ENTIRE jQuery cần phải được phân tích cú pháp và được thi hành. Việc giảm thiểu chỉ làm giảm kích thước và do đó băng thông cần thiết để chuyển nó (tương đương với thời gian dựa trên tốc độ kết nối) ... giảm thiểu rất ít để giảm thời gian phân tích cú pháp (động cơ JS hiện đại như V8 bay qua nhận xét và khoảng trắng như thể chúng thậm chí không có).

Hãy nhớ rằng hầu hết các trang sẽ không có nhiều JS tùy chỉnh (dựa trên jQuery) làm thư viện thực, vì vậy ngay cả một trang tương tác mạnh sẽ chỉ thấy một vài chục phần nghìn giây trên những gì bản thân thư viện đã áp đặt.

Đối với những người có máy/trình duyệt cũ; có thể họ đang gặp phải hiệu suất kém trên mỗi trang họ truy cập. Web là một nơi năng động, bạn phải theo kịp nếu bạn muốn có trải nghiệm tốt. Chỉ có rất nhiều bạn có thể làm cho luddites.

+0

Hi Gregory - trên điểm 2 và 3, tôi nên lưu ý rằng tôi đã chạy thử nghiệm cục bộ và sử dụng ổ đĩa cứng SSD, do đó độ trễ sẽ tối thiểu. – Chris

+0

Tại địa phương từ một ổ SSD chắc chắn có được khá gần với không có chi phí. Nhận được kết quả tương tự từ CDN của Google, tôi nghĩ rằng, chứng minh khá tốt rằng do phân tích/thực thi, bạn có thể sẽ không nhận được bất kỳ tốt hơn ... Tôi vẫn đứng bởi đoạn cuối cùng của tôi :) –

+0

Tôi đoán là sự chậm trễ là do để phân tích cú pháp jQuery. Bạn có thể muốn xem tải trang bằng cách sử dụng webpagetest.org hoặc HTTPWatch để xem sự chậm trễ này thay vì dựa vào javascript để làm việc đó cho bạn (có thể giới thiệu các vấn đề khác với thời lượng nhỏ mà chúng tôi đang nói) –

1

jQuery là tệp 92K. Bạn phải tải nó và phân tích nó.

Tôi đã lưu trữ ví dụ của bạn tại studio831.com/jquery_test/index.html, cdn.html và dom_ready.html.

Bạn có thể xem thời gian cần thực hiện để tải xuống. Bạn cũng có thể sử dụng các công cụ dành cho nhà phát triển của Chrome để xem bảng phân tích thời gian tải xuống mất bao lâu.

+1

Tất cả đều thực hiện chính xác như vậy đối với tôi khi jquery đã được lưu trữ. Nhiều lần tải lại thực hiện như nhau về mặt thời gian đang được chi tiêu chỉ phân tích cú pháp jquery. – jdi

+0

yep, như mong đợi. –

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