preload
This commit is contained in:
103
preload.php
Normal file
103
preload.php
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require __DIR__ . '/vendor/autoload.php';
|
||||||
|
$app = require __DIR__ . '/bootstrap/app.php';
|
||||||
|
|
||||||
|
$classesToPreload = [
|
||||||
|
// Core/HTTP
|
||||||
|
\Illuminate\Http\Request::class,
|
||||||
|
\Illuminate\Http\Response::class,
|
||||||
|
\Illuminate\Routing\Router::class,
|
||||||
|
\Illuminate\Foundation\Application::class,
|
||||||
|
|
||||||
|
// Database/Eloquent
|
||||||
|
\Illuminate\Database\Eloquent\Model::class,
|
||||||
|
\Illuminate\Database\Eloquent\Builder::class,
|
||||||
|
\Illuminate\Database\Query\Builder::class,
|
||||||
|
\Illuminate\Database\Eloquent\Relations\Relation::class,
|
||||||
|
\Illuminate\Database\Eloquent\Collection::class,
|
||||||
|
|
||||||
|
// Container/Support
|
||||||
|
\Illuminate\Container\Container::class,
|
||||||
|
\Illuminate\Support\Collection::class,
|
||||||
|
\Illuminate\Support\Str::class,
|
||||||
|
\Illuminate\Support\Arr::class,
|
||||||
|
\Illuminate\Support\Facades\Facade::class,
|
||||||
|
|
||||||
|
// Common middleware
|
||||||
|
\Illuminate\Cookie\Middleware\EncryptCookies::class,
|
||||||
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
|
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||||
|
\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class,
|
||||||
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
|
||||||
|
// Auth related
|
||||||
|
\Illuminate\Auth\AuthManager::class,
|
||||||
|
\Illuminate\Auth\SessionGuard::class,
|
||||||
|
\Illuminate\Auth\EloquentUserProvider::class,
|
||||||
|
|
||||||
|
// Queue related
|
||||||
|
\Illuminate\Queue\Worker::class,
|
||||||
|
\Illuminate\Queue\QueueManager::class,
|
||||||
|
\Illuminate\Queue\Jobs\Job::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
function preloadClass($class) {
|
||||||
|
if (class_exists($class, false)) {
|
||||||
|
// Already loaded
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!class_exists($class)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rc = new ReflectionClass($class);
|
||||||
|
// Preload methods and their static variables
|
||||||
|
foreach ($rc->getMethods() as $method) {
|
||||||
|
if ($method->isPublic() && !$method->isAbstract()) {
|
||||||
|
$method->getStaticVariables();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preload parent classes
|
||||||
|
$parent = $rc->getParentClass();
|
||||||
|
if ($parent) {
|
||||||
|
preloadClass($parent->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preload interfaces
|
||||||
|
foreach ($rc->getInterfaces() as $interface) {
|
||||||
|
preloadClass($interface->getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function preloadDirectory($dir, $pattern) {
|
||||||
|
if (!is_dir($dir)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new RecursiveIteratorIterator(
|
||||||
|
new RecursiveDirectoryIterator($dir)
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($iterator as $file) {
|
||||||
|
if ($file->isFile() && preg_match($pattern, $file->getPathname())) {
|
||||||
|
require_once $file->getPathname();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preload framework classes
|
||||||
|
foreach ($classesToPreload as $class) {
|
||||||
|
preloadClass($class);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preload application directories
|
||||||
|
preloadDirectory(__DIR__ . '/app/Http/Controllers', '/\.php$/');
|
||||||
|
preloadDirectory(__DIR__ . '/app/Models', '/\.php$/');
|
||||||
|
preloadDirectory(__DIR__ . '/app/Jobs', '/\.php$/');
|
||||||
|
preloadDirectory(__DIR__ . '/app/Providers', '/\.php$/');
|
||||||
|
|
||||||
|
// Free memory
|
||||||
|
gc_collect_cycles();
|
||||||
Reference in New Issue
Block a user