实现资源预加载 通过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应用的路由级数据预加载。

js 实现预加载效果

// 预请求并缓存数据
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触发非关键资源的延迟预加载,避免阻塞首屏渲染。

js 实现预加载效果

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实现图片滚动效果

js实现图片滚动效果

使用CSS动画实现图片滚动 通过CSS的@keyframes和animation属性实现无缝滚动效果。将图片容器设置为横向排列,通过动画平移位置。 <style> .scroll-c…

vue实现旋转效果

vue实现旋转效果

使用CSS动画实现旋转 在Vue中可以通过CSS的@keyframes或transform属性实现旋转效果。在组件的<style>部分定义旋转动画: .rotate { animat…

vue实现无线加载

vue实现无线加载

无限滚动加载的实现 在Vue中实现无限滚动加载(Infinite Scroll)可以通过监听滚动事件或使用现成的库完成。以下是两种常见方法: 使用原生滚动事件监听 通过监听滚动事件判断是否到达页面底…

vue实现弹窗效果

vue实现弹窗效果

使用 Vue 实现弹窗效果 组件化弹窗实现 创建独立的弹窗组件 Modal.vue,通过 v-if 或 v-show 控制显示状态: <template> <div class…

vue实现点击效果

vue实现点击效果

实现点击效果的方法 在Vue中实现点击效果可以通过多种方式完成,以下是几种常见的实现方法: 使用v-on或@click绑定事件 通过v-on:click或简写@click绑定点击事件,触发方法或直…

vue实现联动效果

vue实现联动效果

Vue 实现联动效果的方法 联动效果通常指一个组件的值变化时,另一个组件的值或状态随之变化。以下是几种常见的实现方式: 使用 v-model 和计算属性 通过 v-model 绑定数据,结合计算属性…