DEV Community

flfljh
flfljh

Posted on

ArkWeb Page Preloading and Caching - Enhancing User Experience

Introduction

In web application development, page loading speed and fluency directly impact user experience. The ArkWeb framework provides powerful page preloading and caching capabilities that help developers improve application responsiveness and efficiency. This article details how to implement page preloading, resource preloading, cache mode configuration, and cache clearing in the ArkWeb framework, with comprehensive code examples demonstrating these techniques.

Page Preloading

Preloading Upcoming Pages

Preloading pages reduces user wait time and enhances application continuity. Use the prefetchPage method in ArkWeb:

```javascript
Web({ src: "https://www.example.com" })
    .onPageEnd(() => {
        // Preload next page when current page finishes loading
        this.controller.prefetchPage("https://www.example.com/next-page", {
            mode: 'Preload', // Set preloading mode
            onProgressChange: (progress) => {
                // Monitor preloading progress
                console.log(`Preloading progress: ${progress}%`);
            },
            onComplete: () => {
                // Callback when preloading completes
                console.log('Preloading completed successfully.');
            },
            onError: (error) => {
                // Error handling callback
                console.error('Preloading failed:', error);
            }
        });
    });
```
Enter fullscreen mode Exit fullscreen mode

Preloading Page Resources

Preload specific resources like images, CSS, or JavaScript files:

```javascript
Web({ src: "https://www.example.com" })
    .onPageEnd(() => {
        // Preload image resource
        this.controller.prefetchResource({
            url: "https://www.example.com/assets/logo.png",
            method: "GET",
            headers: [{ key: "Content-Type", value: "image/png" }]
        }, {
            mode: 'Preload',
            onProgressChange: (progress) => {
                console.log(`Resource preloading progress: ${progress}%`);
            }
        });
    });
```
Enter fullscreen mode Exit fullscreen mode

Page Caching

Configuring Cache Mode

Proper cache settings reduce network requests and accelerate page loading. ArkWeb offers multiple cache modes:

```javascript
Web({ src: "https://www.example.com" })
    .cacheMode(CacheMode.Default) // Use default cache mode
    .onCreate(() => {
        // Further configure caching strategy during component creation
        this.controller.setCacheMode(CacheMode.Online, (error) => {
            if (error) {
                console.error('Failed to set cache mode:', error);
            } else {
                console.log('Cache mode set to Online successfully.');
            }
        });
    });
```
Enter fullscreen mode Exit fullscreen mode

Clearing Cache

Clear unnecessary cache to free storage space and maintain performance:

```javascript
Web({ src: "https://www.example.com" })
    .onPageEnd(() => {
        // Clear all cached data
        this.controller.removeCache(true, (error) => {
            if (error) {
                console.error('Failed to remove cache:', error);
            } else {
                console.log('Cache removed successfully.');
            }
        });
    });
```
Enter fullscreen mode Exit fullscreen mode

Complete Example

Demonstrates page preloading, resource preloading, cache configuration, and cache clearing:

```javascript
import { webview } from '@ohos.web.webview';
import { CacheMode } from '@ohos.web.webview';

@Entry
@Component
struct WebComponent {
    controller: webview.WebviewController = new webview.WebviewController();

    build() {
        Column() {
            // Page preloading
            Web({ src: "https://www.example.com" })
                .onPageEnd(() => {
                    this.controller.prefetchPage("https://www.example.com/next-page", {
                        mode: 'Preload',
                        onProgressChange: (progress) => {
                            console.log(`Preloading progress: ${progress}%`);
                        },
                        onComplete: () => {
                            console.log('Preloading completed successfully.');
                        },
                        onError: (error) => {
                            console.error('Preloading failed:', error);
                        }
                    });
                });

            // Resource preloading
            Web({ src: "https://www.example.com" })
                .onPageEnd(() => {
                    this.controller.prefetchResource({
                        url: "https://www.example.com/assets/logo.png",
                        method: "GET",
                        headers: [{ key: "Content-Type", value: "image/png" }]
                    }, {
                        mode: 'Preload',
                        onProgressChange: (progress) => {
                            console.log(`Resource preloading progress: ${progress}%`);
                        }
                    });
                });

            // Cache configuration
            Web({ src: "https://www.example.com" })
                .cacheMode(CacheMode.Default)
                .onCreate(() => {
                    this.controller.setCacheMode(CacheMode.Online, (error) => {
                        if (error) {
                            console.error('Failed to set cache mode:', error);
                        } else {
                            console.log('Cache mode set to Online successfully.');
                        }
                    });
                });

            // Cache clearing button
            Button("Clear Cache")
                .width("100%")
                .height(50)
                .onClick(() => {
                    this.controller.removeCache(true, (error) => {
                        if (error) {
                            console.error('Failed to remove cache:', error);
                        } else {
                            console.log('Cache removed successfully.');
                        }
                    });
                });
        }
    }
}
```
Enter fullscreen mode Exit fullscreen mode

Summary

The ArkWeb framework offers rich APIs to optimize web application performance. Effectively utilizing page preloading, resource preloading, cache configuration, and cache clearing can significantly enhance user experience. During development, select appropriate optimization strategies based on application requirements and user needs.

Top comments (0)