Skip to content

Releases: HarperFast/prerender-plugin

v1.10.0 — @harperfast/prerender-browser

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 22:12
9559e34

@harperfast/prerender-browser v1.10.0

Adds a configurable scroll.stepFraction — the scroll increment per settle-loop step, as a fraction of the viewport height.

Why

Live v1.9.0 telemetry showed the render ceiling is CPU-bound in the scroll-settle phase (settle ~9.6s of a 12.2s render; containers at 100% CPU), not the network. The settle scroll pass was hardcoded to half-viewport steps; on tall pages that's dozens of steps per pass and most of the per-render layout/paint CPU. Widening the step cuts both wall-time and CPU → more throughput at the same core count.

Added

  • scroll.stepFraction (default 0.5 — unchanged behavior). 1.0 (full viewport) roughly halves pass time.
  • validate() rejects a non-number / non-positive stepFraction at config load; scrollPass floors pathologically small positive values in-page (defense-in-depth).

Correctness

Default stays 0.5; a wider step skips more per hop, so consumers opt into a larger value and validate that IntersectionObserver-lazy content (e.g. BazaarVoice reviews) still renders. Post-pass networkIdle + DOM-stability gating is unchanged.

Consumers install:
https://github.com/HarperFast/prerender-plugin/releases/download/v1.10.0/harperfast-prerender-browser-1.10.0.tgz

v1.9.0 — @harperfast/prerender-browser

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 21:31
a86be9d

@harperfast/prerender-browser v1.9.0

Per-render phase timing and per-worker CPU telemetry in the worker stats log, to diagnose render-throughput ceilings (network-wait vs in-browser CPU) and right-size CONCURRENCY.

Added to each per-window worker stats log line

  • phaseMs — mean/p50/p95/max for each render phase:
    • navTtfb — main-document TTFB (origin/edge response time; isolates a slow/pinned upstream IP)
    • navTotal — full page.goto incl. waitUntil
    • settle — post-nav scroll / network-idle / DOM-stable loop
    • postProcess — final in-page serialize/flatten
  • cpu — respects the N-workers-per-container topology:
    • workerCores / nodeCores / browserCoresthis worker only (Node process + its own Chrome process tree via /proc, incl. reaped-child CPU)
    • container — whole-pod cgroup usage + utilization, reported separately (shared by all workers, not per-worker)
    • avgConcurrent (Little's law) + coresPerRender — for concurrency tuning (CPU-bound concurrency ≈ limitCores / coresPerRender)

Notes

  • Sampled once per stats window — no per-render overhead.
  • Degrades to null on hosts without procfs/cgroup.
  • No config or API surface changes; drop-in.

Consumers install the tarball asset attached to this release:
https://github.com/HarperFast/prerender-plugin/releases/download/v1.9.0/harperfast-prerender-browser-1.9.0.tgz

v1.8.0 — @harperfast/prerender-browser

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 19:50
de2918e

Per-interval worker stats: throughput/latency(p50/p95)/error-buckets/saturation, workerId + rssMb, sendResult delivery accounting. Stats interval 45s→60s. Observability-only; no render/claim/callback behavior change.

v1.7.0 — @harperfast/prerender-browser

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 19:33
992155e

Claim per capacity: jobClaimLimit defaults to concurrency (was concurrency×2) so a worker no longer over-claims and hoards a burst / holds jobs leased-idle.

prerender-v0.5.0 — @harperfast/prerender

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 20:32
b52d6fe

@harperfast/prerender v0.5.0

Sitemap refresh reliability + identifiable outbound traffic.

  • Fail loudly on a blocked sitemap fetch. fetchLatestSitemap now guards res.ok and validates the parsed shape; a non-sitemap response (e.g. an Akamai 403 "Access Denied" HTML page) throws with the status + a body snippet instead of silently reporting a no-op created: 0 success. parseSitemap extracted to util/sitemap.js.
  • Route all Harper→origin sitemap traffic through the configured staging edge. Whenever staging.ip is set, the sitemap fetch (including the daily scheduled refresh) is pinned to it (Host/SNI preserved), so the security token authenticates. Empty staging.ip → direct fetch.
  • Identifiable User-Agents. Sitemap fetch uses a configurable sitemapUserAgent (default HarperSitemapCrawler/1.0); proxy device UAs now carry HarperProxy/1.0 (was HarperPrerender/1.0).

Consumers install the tarball asset from this release; bump @harperfast/prerender in kohls-pr to pick it up.

prerender-v0.4.0 — @harperfast/prerender

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 19:33
992155e

Spread the render schedule: reschedule relative to completion + deterministic first-render jitter (no more fixed-07:00 daily herd); renderInterval now drives cadence. Server-side claim ceiling (queue.maxClaimLimit). Reschedule keys on target existence.

prerender-v0.3.6 — @harperfast/prerender

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 16:35
6bcd4e3

@harperfast/prerender v0.3.6

Generalizes the 0.3.5 on-demand render into two orthogonal levers for authorized requests, and adds tester-facing debug headers (PR #19).

Request levers (authorized requests only; real crawler traffic is unaffected)

  • Cache freshnessCache-Control: no-cache/no-store skips the served cache (forces a miss). Honored only when authorized.
  • Miss behavior — the configured missHeader value picks what happens on a miss/skip: prerender (render now + wait) or origin (proxy origin). Absent → defaultMissMode (default prerender).

So default (no Cache-Control) = "serve cache, else render now" (warm-on-demand); adding Cache-Control: no-cache = "always render fresh now".

Behavior change vs 0.3.5: the auth header alone no longer forces a full render — it's now warm-on-demand. Add Cache-Control: no-cache for the old always-render behavior.

Debug response headers (emitted only when the debug header is present)

x-harper-cache (hit|miss|stale|skip), x-harper-cache-key, x-harper-url, x-harper-source (cache|rendered|origin), x-harper-route (forwarded mode), x-harper-indexable — alongside the existing x-harper-device-type / -cache-timestamp / -origin / -render-now.

Schema

PrerenderedPage gains an optional isIndexable field (additive; older rows omit it), stored by processJobResult so the serving path can surface x-harper-indexable.

Config

renderNow adds missHeader and defaultMissMode.

prerender-v0.3.5 — @harperfast/prerender

Choose a tag to compare

@harper-joseph harper-joseph released this 08 Jul 15:50
1c76048

@harperfast/prerender v0.3.5

Adds an opt-in on-demand "render now" capability (PR #18).

  • renderNow request header — when enabled and authenticated (header value must match a shared-secret token, sourceable from renderNow.valueEnv), a GET bot request bypasses both the served cache and the origin proxy, forces an immediate one-off render, and long-polls the page cache for the fresh result before responding. Emits x-harper-render-now: hit|timeout.
    • Off by default. Config: renderNow.{enabled, header, token, valueEnv, timeoutMs, pollIntervalMs, fallback} (fallback = origin | stale | error on timeout). A config warning fires if enabled without a token.
    • GET only; respects excludePathPatterns; an unauthorized-but-present header falls through to normal serving.
  • One-off / orphan schedule cleanupRenderQueue.processJobResult now drops a RenderSchedule row that has no owning RenderTarget (on both success and unknown-error paths), so a render-now job renders once instead of being re-claimed after its lease expires.

v1.6.0 — @harperfast/prerender-browser

Choose a tag to compare

@harper-joseph harper-joseph released this 07 Jul 18:19
443ff6b

Adds scroll.topSettleMs (default 300ms): after the scroll/settle phase returns to the top, wait before serializing so scroll-reactive UI (sticky/compact headers that hide the main header on scroll-down and re-reveal it at the top via a throttled handler) settles into its top state. Fixes prerendered pages shipping with a blank header band. 0 disables.

See #16.

v1.5.3 — @harperfast/prerender-browser

Choose a tag to compare

@harper-joseph harper-joseph released this 07 Jul 00:02
84b899d

@harperfast/prerender-browser v1.5.3

Hardening from the v1.5.2 (PR #12) review:

  • URIError-safe URL normalizationdecodeURI no longer throws out of normalizeUrlForCompare / normalizeCanonicalUrl on a malformed %-sequence (falls back to the raw string), so such a URL can't fail its render.
  • Case-insensitive noindex — robots meta directives are matched case-insensitively (NOINDEX / NoIndex) per spec.