You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Scully SSR下Particle JS异常,求仅浏览器端渲染方案

解决Angular Scully渲染Particle JS路由超时问题

以下是几个可行的方案,核心思路是让Particle JS仅在浏览器端初始化,避免阻塞Scully的Puppeteer抓取流程:

方案1:延迟初始化Particle JS结合平台判断

在组件的AfterViewInit钩子中,不仅通过isPlatformBrowser判断浏览器环境,还添加延迟执行逻辑,给Scully足够时间完成静态页面渲染,再启动粒子动画。

组件代码示例:

import { Component, AfterViewInit, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import * as particlesJS from 'particles.js';

@Component({
  selector: 'app-creative-hand',
  templateUrl: './creative-hand.component.html',
  styleUrls: ['./creative-hand.component.scss']
})
export class CreativeHandComponent implements AfterViewInit {
  isBrowser = isPlatformBrowser(this.platformId);

  constructor(@Inject(PLATFORM_ID) private platformId: Object) { }

  ngAfterViewInit(): void {
    if (this.isBrowser) {
      // 延迟1秒初始化,避免阻塞Scully的抓取流程
      setTimeout(() => {
        particlesJS('particles-js', {
          // 你的Particle JS配置参数
          particles: {
            number: { value: 80 },
            size: { value: 3 }
            // 其他配置...
          }
        });
      }, 1000);
    }
  }
}

同时在模板中用*ngIf控制粒子容器仅在浏览器端渲染:

<div *ngIf="isBrowser" id="particles-js" class="particle-container"></div>

方案2:禁用目标路由的JavaScript执行

修改Scully配置文件scully.<你的项目名>.config.ts,给/web/creativeHand路由添加disableJavaScript: true,让Scully抓取时不执行页面JS,避免Particle JS的计算导致超时。

配置示例:

import { ScullyConfig } from '@scullyio/scully';

export const config: ScullyConfig = {
  projectRoot: "./src",
  projectName: "your-project",
  outDir: './dist/static',
  routes: {
    '/web/creativeHand': {
      disableJavaScript: true
    }
  }
};

此方案需要配合方案1的组件初始化逻辑,确保用户在浏览器访问时能正常加载粒子动画。

方案3:延长Scully的渲染等待时间

在Scully配置中给目标路由设置renderDelay,延长Puppeteer的等待时长,结合延迟初始化,确保页面有足够时间完成渲染。

配置示例:

export const config: ScullyConfig = {
  // 其他基础配置
  routes: {
    '/web/creativeHand': {
      renderDelay: 5000 // 延长等待5秒
    }
  }
};

注意事项

  • 确保Particle JS的依赖仅在浏览器端加载,可通过动态import的方式引入:
    if (this.isBrowser) {
      import('particles.js').then(particles => {
        setTimeout(() => particles.default('particles-js', yourConfig), 1000);
      });
    }
    
  • 检查粒子容器的CSS样式,避免出现布局偏移导致Scully误判页面未加载完成。

内容的提问来源于stack exchange,提问作者Aashish Bhagwat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:42:37