Lợi ích so với Cạm bẫy của việc lưu trữ jQuery cục bộ [đã đóng cửa]


85

Chúng tôi hiện đang lấy các thư viện jQuery và jQueryUI (và jQueryUI CSS) từ google CDN. Tôi thích điều này vì tôi có thể gọi google.load("jquery", "1");
và jQuery 1.xx mới nhất sẽ được sử dụng.

Bây giờ tôi phải kéo các thư viện cục bộ vì bảo mật.

Tôi rất vui khi kéo họ về địa phương nhưng tôi tự hỏi một số lợi ích và cạm bẫy khác cần đề phòng là gì?


5
chúng ta đang nói về những vấn đề bảo mật nào?
Ascherer

Tôi không hỏi. Tôi đoán nó không phải là rất nhiều an ninh nhưng cố gắng băng thông kiểm soát bởi firewall gmail, vv
orolo

Câu trả lời:


109

Lợi ích chính của việc có chúng trên CDN là các tệp có thể được tải xuống song song với các tệp được tải xuống từ trang web của riêng bạn. Điều này làm giảm độ trễ trên mỗi trang. Vì vậy, mặt trái của điều này là một cạm bẫy của việc lưu trữ cục bộ - độ trễ tăng lên . Lý do chính cho điều đó là do các trình duyệt bị hạn chế về số lượng kết nối mà chúng có thể thực hiện cùng một lúc với cùng một miền web. Trong IE6, điều này được mặc định là 2 kết nối đồng thời đến cùng một miền - được chia sẻ giữa tất cả các cửa sổ đang mở của IE !! Trong IE8 +, nó được cải thiện, mặc định là 6, tương ứng với FF / Chrome, tuy nhiên, nếu bạn có nhiều hình ảnh và bạn không sử dụng sprites, bạn sẽ gặp phải độ trễ nặng.

Sử dụng CDN, tôi sẽ luôn đặt phiên bản thư viện rõ ràng thay vì lấy phiên bản mới nhất. Điều này làm giảm nguy cơ các phiên bản mới phá vỡ mã của bạn. Không có khả năng xảy ra với jQuery, nhưng có thể.

Lợi ích chính khác của việc sử dụng CDN là giảm lưu lượng truy cập trên trang web của bạn . Nếu bạn trả cho mỗi GB hoặc bạn đang sử dụng một máy chủ ảo với tài nguyên hạn chế, bạn có thể thấy rằng hiệu suất tổng thể của trang web tăng lên và chi phí lưu trữ giảm xuống khi bạn chuyển một số nội dung của mình lên CDN công cộng.

Đảm bảo rằng bạn cũng đọc câu trả lời khác cho câu hỏi này của @Xaver. Đây là một thủ thuật rất hay


5
Một lợi ích khác của việc đặt phiên bản thư viện một cách rõ ràng là google cung cấp cho nó thời gian lưu trong bộ nhớ cache lâu hơn, Ví dụ: chỉ định 1.9.1 sẽ cung cấp thời gian lưu bộ nhớ cache lâu hơn so với chỉ yêu cầu 1.9 (vì phiên bản jQuery 1.9 mới có thể được phát hành nhưng 1.9.1 sẽ luôn giống nhau).
Barry

uhhh - khởi động lại ? Tôi không thấy câu trả lời nào như vậy, hiện tại cũng không bị xóa. "Thủ thuật rất hay" là gì?
ashleedawg

144

Tôi luôn sử dụng CDN (Mạng phân phối nội dung) của Google. Nhưng chỉ trong trường hợp nó ngoại tuyến:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.2.min.js"><\/script>')</script>

Lấy jQuery của Google CDN và dự phòng về cục bộ nếu cần

Chỉnh sửa : Nếu bạn không cần hỗ trợ IE6 và trang web của bạn có sử dụng một phần https, bạn cũng có thể xóa http:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

4
Tín dụng cho cộng đồng: stackoverflow.com/questions/1014203/…
oucil

24
Xvideos sử dụng giải pháp này ngay bây giờ: P
Shougo Makishima

Tôi phải thiếu một cái gì đó ở đây ... Cách tiếp cận này không giả định rằng jQuery được tải CDN sẽ tải và được thông dịch trước khi dòng tiếp theo ( !window.jQuery...) được diễn giải? <script>thẻ được xử lý không đồng bộ, phải không?
rinogo

2
<script>thẻ được xử lý đồng bộ! Ở dòng thứ hai, jQuery phải được tải rồi nhưng đề phòng nếu không, chúng tôi đưa một số JS vào để tải cục bộ. Các document.writesẽ không bao giờ được thực thi nếu jQuery đã tồn tại.
Xaver

24

Những người khác đã bao gồm các lợi ích. Cạm bẫy:

  • Nếu bạn chỉ bao gồm nội dung từ máy chủ của riêng mình thì đó là một máy chủ cần phải chạy — và không bị tường lửa chặn, v.v. — để làm cho trang web của bạn hoạt động. Kéo tập lệnh từ bên thứ ba và bây giờ đó là hai máy chủ cần được chạy và được bỏ chặn để làm cho trang web của bạn hoạt động.

  • Bất kỳ trang web nào bạn lấy <script>ra đều có thể kiểm soát hoàn toàn trải nghiệm của người dùng trên trang web của bạn. Nếu Google cảm thấy tồi tệ, họ có thể đưa thứ gì đó vào bản sao jQuery của họ để ghi lại các lần nhấn phím của bạn, lấy cắp thông tin cá nhân từ trang bạn đang truy cập để liên kết vào cơ sở dữ liệu theo dõi web của họ, bắt bạn đăng “Tôi yêu Google!” nhận xét cho mọi hình thức, v.v.

Google có thể sẽ không thực sự làm điều đó, nhưng đó là một yếu tố nằm ngoài tầm kiểm soát của bạn và chắc chắn là điều đáng lo ngại với các dịch vụ lưu trữ tập lệnh khác. Đã có những sự cố trước đây trong đó các tập lệnh thống kê đã bị xâm phạm với trình tải phần mềm độc hại.

Trước khi bao gồm bất kỳ tập lệnh nào từ bên thứ ba — ngay cả trên một trang duy nhất trên trang web của bạn — bạn phải tin tưởng 100% vào họ với tất cả chức năng người dùng có thể truy cập được hiển thị trên tên máy chủ đó (bao gồm cả chức năng quản trị mặt web).


21
Google sẽ không làm điều đó ... TÔI YÊU GOOGLE ... phải không? :-p
JasCav

1
Điểm tuyệt vời về vấn đề bảo mật.
Naltroc


1
Điểm tốt: chưa bao giờ nghĩ về cách một tập lệnh CDN từ xa có thể bị tấn công và sau đó bị kéo xuống trang web của tôi. Có lẽ không phổ biến đối với các thư viện lớn như jQuery, jQueryUI, Boostrap, v.v., nhưng cũng giống như đã lưu ý, các thư viện nhỏ hơn, ít được hỗ trợ hơn có thể trở thành nạn nhân, đặc biệt nếu chúng không được cập nhật. Điểm tốt +1
twknab

14

CDN của Google:

  • bộ nhớ đệm, tốt cho hiệu suất, nhiều người dùng hơn có khả năng đã có và tải xuống song song
  • nếu bao giờ, lô hàng cấm cdn đi xuống. bạn đang say mê.
  • nếu một phiên bản mới phá vỡ các plugin hoặc trang web hiện có của bạn, bạn sẽ biết về điều đó có thể quá muộn

Tại địa phương:

  • có thể phát triển mà không cần kết nối với mạng
  • vẫn có thể nhận được một số lợi ích về hiệu suất bằng cách giải nén, ngoài việc giảm thiểu

5
tuy nhiên tải jquery u từ cdn của google được giảm thiểu. Một cộng để sử dụng một cdn là nó là sạch hơn cho cấu trúc thư mục của bạn :)
Ascherer

if a new version breaks your existing plugins or site, you'll know about it possibly too latebạn có thể chỉ định phiên bản trong liên kết CDN để tránh điều đó.
Adam

13

Tôi thích sử dụng phiên bản cục bộ của mình hơn, vì tôi không kiểm soát được những gì họ sẽ cung cấp. Ví dụ: tôi không muốn người dùng của mình bị ảnh hưởng bởi google-analytics hoặc bất kỳ thứ gì tương tự, vì đây là vấn đề pháp lý ở quốc gia của tôi.


9

Lợi ích: (Đặc biệt cho CDN của Google)

  1. Tải xuống song song với tệp của bạn. Các câu trả lời khác giải quyết vấn đề này thêm
  2. Máy chủ của Google có khả năng cung cấp nội dung nhanh hơn
  3. Các thư viện và khuôn khổ chung có thể đã có trên máy của người dùng, vì bộ đệm HTTP cho CDN là phổ biến trên tất cả các trang web
  4. Băng thông của bạn sẽ không phải chuyển sang phục vụ các tệp thư viện lớn

2

Hầu như theo mọi cách bạn nhìn vào nó, sử dụng CDN của Google là một điều tốt.

Hiệu suất sẽ được cải thiện (mặc dù khá nhẹ, trừ khi trang web của bạn thực sự bận rộn) và lượng dữ liệu mà máy chủ của bạn phải truyền tải sẽ giảm xuống (mặc dù jQuery không phải là thứ quá lớn để tải xuống), v.v.

Lý do duy nhất khiến bạn không muốn sử dụng nó là nếu bạn không tin tưởng Google. Bằng cách sử dụng nó, bạn đang cung cấp cho Google một cách hiệu quả cửa sổ thông tin bổ sung vào hồ sơ lưu lượng truy cập trang web của bạn, bao gồm cả kiến ​​thức về các URL mà bạn có thể không muốn công khai (ví dụ: các khu vực an toàn trên trang web của bạn).

Nếu bạn hoang tưởng về bảo mật thì điều này có thể đủ để thuyết phục bạn không sử dụng chúng (xét cho cùng, việc tự lưu trữ nó không chính xác sẽ làm chậm trang web của bạn để thu thập dữ liệu), nhưng nói chung hầu hết mọi người sẽ có quan điểm thực dụng rằng Google đã biết đủ về trang web của họ và việc thêm điều này sẽ không tạo ra nhiều khác biệt.


1

Có lẽ ngày nay tôi là thiểu số, nhưng tôi muốn nói rằng bạn không muốn sử dụng CDN trừ khi bạn thực sự cần. Các yếu tố chính để bắt đầu sử dụng nó là:

  • Người dùng địa lý chéo. Nếu bạn lưu trữ trang web của mình ở Hoa Kỳ nhưng có lượng người dùng Châu Âu hiển thị - CDN sẽ cải thiện thời gian tải.
  • Số lượng lớn người dùng và \ hoặc nội dung lớn, vì vậy một máy chủ chính là không đủ nữa. Người ta có thể nghĩ đến bất kỳ trang web video khiêu dâm nào (hoặc Netflix, nếu bạn muốn). Luồng video là một tải nặng, với CDN sẽ ít tải hơn nhiều trên máy chủ chính.

Nhưng ... vấn đề là những điểm này không thực sự áp dụng được cho 90% các trang web trên thế giới. Tôi cá rằng bạn không phải Facebook với hàng triệu người dùng trực tuyến trên toàn cầu, bạn không phải là Pornhub với hàng trăm GB được chuyển mỗi giây.

Nếu trang web của bạn được nhắm mục tiêu đến người dùng ở thành phố / quốc gia của bạn và dung lượng của một máy chủ là đủ cho lượng người dùng bạn có - tại sao bạn lại muốn có CDN? Nó nhanh hơn cho người dùng trong thành phố của bạn và đơn giản hơn để bạn tìm nạp mọi thứ từ máy chủ chính cục bộ.


Đó là nhiều hơn về CDN nói chung, bây giờ hãy để tôi gần hơn với câu hỏi thực tế về jQuery hoặc bất kỳ thư viện nào khác.

Nếu bạn muốn trang web của mình luôn có thể truy cập và hoạt động mà không cần bảo trì trong hơn một năm, hãy giả sử - đặt nó tại địa phương. Các thư viện ngày nay đang được cập nhật theo một nhịp độ điên cuồng mà bạn có thể không muốn làm theo. Và các phiên bản cũ đang bị xóa cuối cùng. Hơn nữa, toàn bộ thư viện có thể chết (mặc dù có thể không áp dụng cho jQuery).

Từ kinh nghiệm gần đây của tôi - tôi đã cập nhật TinyMCE trên trang web mà tôi duy trì từ 3.xx (ngày 2012) lên 5.xx (ngày xuân 2019). Trang web này đã hoạt động trong 7 (bảy!) Năm mà không có bất kỳ bảo trì nào trong phần logic này. Hồi đó không có khái niệm "minifying" và CDN cũng không phổ biến như bây giờ. Nhưng ngay cả khi chúng là phổ biến - bạn không bao giờ biết điều gì sẽ xảy ra trong 3-5-10 năm tới. Thông thường, bạn muốn trang web của mình vẫn tồn tại ngay cả khi bạn không bảo trì nó, phải không? Tuy nhiên, nếu bạn lấy jQuery từ CDN ngày hôm nay, thì liên kết này có thể (và, có thể, sẽ) đứt sau 5 năm.

Giải pháp với CDN VÀ dự phòng cho phiên bản cục bộ như @Xaver đề xuất có thể là một thỏa hiệp tốt. Nhưng ... có lẽ chỉ cần thoát khỏi liên kết CDN? ;)


0

Đối với tôi, nó thực sự phụ thuộc vào mức độ kiểm soát bạn muốn có. Nếu bạn cũng như tôi và cần phát triển trên local host khi làm việc và du lịch. Có các tệp jquery cục bộ sẽ tốt hơn là có nó được lưu trữ trên google hoặc nơi khác.

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.