实现资源预加载 通过HTML的标签直接声明需要预加载的资源,浏览器会在页面加载早期阶段优先获取这些资源。适合预加载关键C…">
当前位置:首页 > JavaScript

js 实现预加载效果

2026-01-30 16:13:49JavaScript

使用<link rel="preload">实现资源预加载

通过HTML的<link>标签直接声明需要预加载的资源,浏览器会在页面加载早期阶段优先获取这些资源。适合预加载关键CSS、字体、脚本等静态资源。

<link rel="preload" href="critical.css" as="style">
<link rel="preload" href="font.woff2" as="font" crossorigin>

通过JavaScript动态创建预加载标签

利用DOM API动态生成<link><script>标签,实现更灵活的预加载逻辑。可监听资源加载状态。

const preloadResource = (url, as) => {
  const link = document.createElement('link');
  link.rel = 'preload';
  link.href = url;
  link.as = as;
  document.head.appendChild(link);
};
preloadResource('hero-image.webp', 'image');

使用fetch()实现数据预请求

对动态数据或API结果进行预获取,利用fetch()cache控制缓存行为。适合SPA应用的路由级数据预加载。

// 预请求并缓存数据
fetch('/api/data', { cache: 'force-cache' })
  .then(response => response.json())
  .then(data => window.preloadedData = data);

图片预加载技术

通过Image对象提前加载图片资源,避免页面渲染时的延迟。可结合Promise实现批量预加载。

const preloadImages = (urls) => {
  return Promise.all(
    urls.map(url => new Promise((resolve) => {
      const img = new Image();
      img.src = url;
      img.onload = resolve;
    }))
  );
};
preloadImages(['img1.jpg', 'img2.jpg']);

监听load事件触发二级预加载

在页面主资源加载完成后,通过window.onload触发非关键资源的延迟预加载,避免阻塞首屏渲染。

window.addEventListener('load', () => {
  // 预加载非首屏需要的资源
  preloadResource('lazy-module.js', 'script');
});

使用Intersection Observer实现可视区预加载

对即将进入视口的元素进行资源预加载,适用于懒加载内容的优化。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      preloadResource(entry.dataset.src, 'image');
      observer.unobserve(entry.target);
    }
  });
});
document.querySelectorAll('[data-src]').forEach(el => observer.observe(el));

Service Worker缓存预加载

通过Service Worker在后台预取并缓存资源,实现离线可用性或二次访问加速。

// Service Worker脚本中
self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open('precache').then(cache => 
      cache.addAll(['/styles.css', '/app.js'])
    )
  );
});

js 实现预加载效果

标签: 加载效果
分享给朋友:

相关文章

css3制作立体效果

css3制作立体效果

使用 transform 属性实现立体旋转 通过 transform-style: preserve-3d 和 rotateX/Y/Z 实现 3D 空间变换: .container { t…

vue懒加载实现难吗

vue懒加载实现难吗

Vue懒加载的实现难度 Vue懒加载的实现并不复杂,尤其是借助现代工具和库的支持。懒加载的核心思想是按需加载资源,通常用于路由或组件,以提升页面初始加载速度。以下是常见的实现方法和注意事项:…

vue加载动画实现

vue加载动画实现

Vue 加载动画实现方法 使用 CSS 动画或过渡 在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画: .loading-spinner { width: 40p…

vue实现框架效果

vue实现框架效果

Vue实现框架效果的方法 使用Vue实现框架效果可以通过多种方式完成,包括使用Vue Router、动态组件或第三方UI库。以下是几种常见的方法: 使用Vue Router实现布局框架 Vue Ro…

h5实现左右滚动效果

h5实现左右滚动效果

使用CSS实现横向滚动 在HTML5中实现左右滚动效果,可以通过CSS的overflow-x属性配合white-space或flex布局实现。以下是一个基础示例: <div class="s…

vue实现预加载

vue实现预加载

vue实现预加载的方法 在Vue中实现预加载可以通过多种方式优化用户体验,以下是几种常见方法: 使用Webpack的魔法注释 通过import()语法结合Webpack的/* webpackPre…