jensroland/chain-lightning
最新稳定版本:v1.0.0
Composer 安装命令:
composer require jensroland/chain-lightning
包简介
Parallel dependency loading for ES modules with intelligent caching
README 文档
README
PHP server adapter for Chain Lightning - cache-efficient parallel dependency loading for ES modules.
Installation
composer require jensroland/chain-lightning
Quick Start
<?php use ChainLightning\ChainLightning; $cl = new ChainLightning('./dist/.chain-lightning/manifest.json', $_SERVER['HTTP_USER_AGENT'] ?? ''); ?> <!DOCTYPE html> <html> <head> <?= $cl->headScripts() ?> </head> <body> <?= $cl->component('search-component') ?> <search-component></search-component> </body> </html>
Integration with Skybolt
Chain Lightning works best with Skybolt for optimal caching:
<?php use Skybolt\Skybolt; use ChainLightning\ChainLightning; // Skybolt handles CSS and Service Worker caching $sb = new Skybolt('./dist/.skybolt/render-map.json'); // Chain Lightning uses Skybolt for cache-aware decisions $cl = new ChainLightning('./dist/.chain-lightning/manifest.json', $_SERVER['HTTP_USER_AGENT'] ?? '', $sb); ?> <!DOCTYPE html> <html> <head> <?= $sb->css('src/css/main.css') ?> <?= $sb->launchScript() ?> <?= $cl->headScripts() ?> </head> <body> <?= $cl->component('search-component', inlineDeps: true) ?> <search-component></search-component> </body> </html>
When integrated with Skybolt:
- First visit: Chunk dependencies are inlined via data URLs
- Repeat visits: Dependencies are loaded from Service Worker cache (~5ms)
API Reference
use ChainLightning\ChainLightning; $cl = new ChainLightning($manifestPath, $userAgent = '', $skyboltInstance = null); // Convenience method - renders all head scripts $cl->headScripts(); // Individual head scripts (if you need more control) $cl->importMap(); // Render <script type="importmap"> $cl->manifestScript(); // Render manifest data script $cl->clientScript(); // Render client runtime script // Render component with preloads $cl->component('name'); $cl->component('name', inlineDeps: true); // Inline chunk deps on first visit // Utility methods $cl->getComponentUrl('name'); // Get component URL $cl->getModuleUrl('specifier'); // Get module URL from import map $cl->getManifest(); // Get raw manifest data // HTTP 103 Early Hints $hints = $cl->getEarlyHints(['comp1', 'comp2']); foreach ($hints as $hint) { header("Link: <{$hint['href']}>; rel={$hint['rel']}; as={$hint['as']}", false); }
Requirements
- PHP 8.1+
- Vite build with
@skybolt/chain-lightningplugin
Vite Configuration
// vite.config.js import { defineConfig } from 'vite' import { chainLightning } from '@skybolt/chain-lightning/vite' export default defineConfig({ build: { manifest: true, rollupOptions: { input: { 'search-component': 'src/components/search-component.js', 'counter-component': 'src/components/counter-component.js' } } }, plugins: [ chainLightning({ components: ['search-component', 'counter-component'] }) ] })
How It Works
See the main Chain Lightning documentation for details on:
- The waterfall problem Chain Lightning solves
- Build-time dependency analysis
- Import map generation
- Versioning strategy
License
MIT
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-12-01