2012-08-15 40 views
6

Chúng tôi đang phát triển một ứng dụng JavaFX 2.x, cần cung cấp một số hỗ trợ GIS. Chúng tôi đã đi đến kết luận rằng việc sử dụng GoogleMaps thông qua WebView được nhúng là tùy chọn nhanh nhất. Vấn đề với nó là mỗi khi ứng dụng của chúng ta bắt đầu, các thư viện JavaScript tương ứng được tải xuống. Điều này làm cho việc phát triển trở nên rất khó khăn vì phải mất một vài giây trước khi bất cứ điều gì tương tác có thể được thực hiện trên bảng điều khiển WebView.Caching trong JavaFX WebView

Điều đầu tiên cần lưu ý là có một số loại bộ nhớ đệm như trình duyệt web làm để lưu trữ thư viện và đọc chúng cục bộ khi cần. Làm thế nào điều này có thể đạt được với WebView? Có bất kỳ lựa chọn thay thế để bộ nhớ đệm trong trường hợp của chúng tôi?

Thanx.

Trả lời

8

Thành phần WebView không cung cấp bộ nhớ đệm của tài nguyên web ra khỏi hộp. Tuy nhiên, nó sử dụng ngăn xếp java.net cho truyền thông mạng. Điều này có nghĩa là bạn có thể cài đặt Trình xử lý URL của riêng bạn để nói chuyện với bộ nhớ cache và phục vụ tài nguyên từ bộ nhớ cache đó. Ví dụ, đặt một cái gì đó như khối này trong phương pháp main() của bạn trước khi cuộc gọi khởi động JavaFX:

URL.setURLStreamHandlerFactory(new URLStreamHandlerFactory() { 
    public URLStreamHandler createURLStreamHandler(String protocol) { 
     if ("http".equals(protocol)) { 
      return new URLStreamHandler() { 
       protected URLConnection openConnection(URL u) throws IOException { 
        if (isCached(u)) { 
         return new CachedStreamConnection(u); 
        } 
        return new MyURLConnection(u); 
       } 
      }; 
     } 
     // Don't handle a non-http protocol, so just return null and let 
     // the system return the default one. 
     return null; 
    } 
}); 

Tất nhiên ma quỷ là trong các chi tiết. Bạn nên thực hiện chính sách bộ nhớ cache được trả về bởi tiêu đề HTTP (như ETags) khi lưu trữ tài nguyên trong bộ nhớ cache của bạn. Một xem xét khác là thẻ meta HTML. Here là một tài nguyên tốt trên bộ nhớ đệm.

Bạn cũng có thể xem xét hệ thống quản lý cookie để bổ sung cho hệ thống quản lý bộ nhớ cache này.