2009-05-15 25 views
41

Tôi đang sử dụng IE 8 trên Vista và mỗi lần tôi thay đổi tệp javascript rồi bắt đầu gỡ lỗi, tôi phải nhấn Ctrl + F5 để tải lại javascript của mình. Có cách nào để làm cho nó tự động tải lại javascript khi tôi bắt đầu gỡ lỗi, nhưng không bị mất hiệu suất đạt được khi chỉ cần duyệt mạng?Làm cách nào để buộc IE tải lại javascript?

Vâng vâng tôi biết bạn có thể không thích IE, nhưng hãy nhớ rằng câu hỏi không phải là "Trình duyệt tốt nhất là gì?".

Trả lời

45

Thêm chuỗi ở cuối URL của bạn để ngắt bộ nhớ cache. Tôi thường làm (với PHP):

<script src="/my/js/file.js?<?=time()?>"></script> 

Vì vậy, nó tải lại mỗi khi tôi đang làm việc trên nó, và sau đó lấy nó ra khi nó đi vào sản xuất. Trong thực tế, tôi tóm tắt điều này nhiều hơn một chút nhưng ý tưởng vẫn giữ nguyên.

Nếu bạn kiểm tra nguồn của trang web này, chúng sẽ thêm số sửa đổi vào cuối URL theo cách tương tự để buộc thay đổi khi chúng tôi cập nhật tệp javascript.

+0

Tùy chọn tốt, chỉ có nghĩa là các trình duyệt sẽ _never_ lưu trữ tệp có nghĩa là bạn "mất hiệu suất tăng khi chỉ duyệt mạng". – Alconja

+3

Bạn sẽ mất hiệu suất khi "chỉ duyệt trang web mà bạn hiện đang làm việc". –

+0

Ok, tôi cho rằng bạn muốn sống với điều này. (hãy nhớ rằng người dùng cuối cũng sẽ có vấn đề về bộ nhớ cache, vì vậy không phải là ý tưởng tồi để đảm bảo rằng khi bạn .js tệp thay đổi trình duyệt của người dùng bằng cách nào đó cũng biết để có phiên bản mới nhất). – Alconja

15

Khi bạn làm việc với trang web hoặc tệp javascript bạn muốn tải lại mỗi khi bạn thay đổi. Bạn có thể thay đổi cài đặt trong IE 8 để trình duyệt sẽ không bao giờ lưu vào bộ nhớ cache.

Làm theo các bước đơn giản này.

  1. Chọn Công cụ-> Tùy chọn Internet.
  2. Trong tab Chung, nhấp vào nút Cài đặt trong phần Lịch sử duyệt web.
  3. Nhấp vào nút radio "Mỗi khi tôi truy cập trang web".
  4. Nhấp vào nút OK.
+3

Điều đó không làm điều bạn nghĩ. Xem www.enhanceie.com/redir/?id=httpperf để thảo luận về từng cài đặt. – EricLaw

+0

tôi đã làm điều này nhưng vẫn phải làm mới trang hoặc nhấn F5? –

1

Trong javascript Tôi nghĩ rằng điều đó là không thể, bởi vì trình duyệt hiện đại có một số policy on security trong javascripts .. và xóa bộ đệm ẩn là một bộ nhớ rất vi phạm.

Bạn có thể cố gắng thêm

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 

Trong tiêu đề của bạn, nhưng bạn sẽ phải mất hiệu suất.

26

Ý tưởng chung của Paolo (tức là thay đổi một phần hiệu quả yêu cầu uri) là đặt cược tốt nhất của bạn. Tuy nhiên, tôi khuyên bạn nên sử dụng một giá trị tĩnh hơn như số phiên bản mà bạn cập nhật khi bạn đã thay đổi tệp tập lệnh của mình để bạn vẫn có thể nhận được hiệu suất hoạt động của bộ nhớ đệm.

Vì vậy, hoặc một cái gì đó như thế này:

<script src="/my/js/file.js?version=2.1.3" ></script> 

hoặc có thể

<script src="/my/js/file.2.1.3.js" ></script> 

Tôi thích tùy chọn đầu tiên bởi vì nó có nghĩa là bạn có thể duy trì một tập tin thay vì phải liên tục đổi tên nó (mà cho ví dụ duy trì lịch sử phiên bản nhất quán trong điều khiển nguồn của bạn). Tất nhiên một trong hai (như tôi đã mô tả) sẽ liên quan đến việc cập nhật câu lệnh include của bạn mỗi lần, vì vậy bạn có thể muốn tạo ra một cách năng động để thực hiện nó, chẳng hạn như thay thế một giá trị cố định bằng giá trị động mỗi khi bạn triển khai (sử dụng Ant hoặc bất cứ điều gì).

+0

có hoạt động trong Firefox và Chrome không? – BrianK

+0

@BrianK - sẽ ổn thôi. – Alconja

+0

Tôi sẽ lấy ý tưởng này và thử sự kiện tải trang của tôi (in .Net) để tạo số phiên bản dựa trên thời gian ngày (loại hỗn hợp của cả bạn và ý tưởng của Paolo) vì điều này đang trở thành một cơn đau đầu thực sự. Không nhất thiết đối với cá nhân tôi, nhưng khi tôi cập nhật JS cho người thử nghiệm, họ quên CTRL F5 và sau đó gửi lại lỗi sau khi chúng đã được khắc phục ... (chỉ cần đảm bảo tôi thực hiện điều này trước khi sản xuất!) –

0

Để loại bỏ sự cần thiết phải liên tục nhấn F5 trong tab IE khi phát triển trang web, hãy sử dụng ReloadIt.

enter image description here

Đối với mỗi trang web được hiển thị trong IE, bạn có thể cấu hình một tên tập tin, thư mục, hoặc một tập trong số họ. Nếu bất kỳ thay đổi nào xảy ra trong bất kỳ đường dẫn được cấu hình nào, ReloadIt sẽ làm mới tab IE. Một công cụ đơn giản. Nó chỉ hoạt động.

Điều này sẽ tải lại mọi thứ, không chỉ javascript.

4

Nếu bạn đang tìm cách thực hiện điều này trên trình duyệt CỦA BẠN (a.k.a. không buộc điều này trên người dùng của bạn), thì tôi sẽ KHÔNG đặt mã của bạn để không sử dụng bộ nhớ cache. Như José đã nói, có một mất hiệu suất.

Và tôi sẽ không tắt bộ nhớ đệm trên IE hoàn toàn, vì bạn mất hiệu suất đó cho mỗi trang web bạn truy cập. Bạn có thể nói IE để luôn làm mới từ máy chủ cho một trang web hay duyệt phiên cụ thể:

  1. Mở IE Developer Công cụ
  2. Chọn bộ nhớ cache từ Menu
  3. Nhấn vào để kiểm tra "Luôn Refresh Từ Server"

Hoặc, cho bàn phím-tắt-philes (như bản thân mình) ngoài kia ..

  • F12, Alt + C, mũi tên xuống, Alt + R.

LƯU Ý CÁC CHÚ Ý: Sau khi nói điều này ... Hãy nhớ rằng bất cứ lúc nào bạn phát triển/kiểm tra theo một cách khác hơn so với các trang web sẽ được xem trong sản xuất, bạn có nguy cơ nhận được kết quả khác nhau. Một ví dụ tốt là vấn đề bộ nhớ đệm này. Chúng tôi đã tìm thấy sự cố trong đó IE đang lưu vào bộ nhớ cache các cuộc gọi Ajax của chúng tôi và không cập nhật kết quả từ phương thức GET. Nếu chúng ta HAD vô hiệu hóa bộ nhớ đệm trong IE, chúng ta sẽ không bao giờ thấy vấn đề này trong phát triển, và sẽ triển khai nó để sản xuất như thế này.

+0

Trên "Lưu ý về Thận trọng" của bạn, đây là lý do tại sao nhiều cửa hàng dev có môi trường thử nghiệm đặc biệt, nơi mục tiêu là phản ánh sản xuất nhiều nhất có thể. Ví dụ, nếu bạn phát triển/thử nghiệm trên Windows, nhưng máy chủ sản xuất của bạn là Linux, thì bạn nên có một môi trường thử nghiệm khác chạy trên Linux. – michaelok

+0

Mục 'F12 ...' hoạt động cho tôi, IE 8. Không hoạt động đối với IE11. – youngzy

1

Điều này nên thực hiện thủ thuật cho ASP.NET. Khái niệm này giống như trong ví dụ PHP. Vì URL khác nhau mỗi khi tập lệnh được tải, không phải trình duyệt proxy nào cũng nên lưu trữ tệp. Tôi được sử dụng để đặt mã JavaScript của mình vào các tệp riêng biệt và lãng phí một lượng thời gian đáng kể với Visual Studio cho đến khi tôi nhận ra rằng nó sẽ không tải lại các tệp JavaScript.

 
<script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script> 

Full dụ:

 
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 

    <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script> 
    <script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script> 
    <script type="text/javascript"> 

     $(document).ready(function() { 
           myInit(); 
          }); 

    </script> 
</asp:Content> 

Obvously, giải pháp này chỉ nên được sử dụng trong giai đoạn phát triển, và cần được loại bỏ trước khi gửi bài trang web.

0

Thêm ngày sửa đổi tệp js ở cuối URL của bạn. Với PHP, nó sẽ trông giống như sau:

echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>'; 

Khi tập lệnh của bạn sẽ được tải lại mỗi lần bạn cập nhật.

0

Nếu bạn đang chạy ASP.Net, hãy xem mô-đun Bundling và Minification có sẵn trong ASP.Net 4.5.

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

Bạn có thể khai báo "gói" trỏ đến tệp javascript của mình. Mỗi khi tệp của bạn thay đổi, tệp sẽ tạo hậu tố chuỗi truy vấn mới ... nhưng sẽ chỉ làm như vậy khi tệp thay đổi. Điều này làm cho nó rất đơn giản để triển khai các bản cập nhật, bởi vì bạn thậm chí không phải suy nghĩ về việc cập nhật các thẻ của bạn với các số phiên bản mới.

Nó cũng có thể gộp nhiều tệp .js lại với nhau thành một tệp và thu nhỏ chúng, tất cả trong một bước. Ditto cho css.

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