ما مقدار الحصول على قائمة من الدلائل تؤثر على أداء PHP

StackOverflow https://stackoverflow.com/questions/5035446

سؤال

سؤال بسيط جدا هذه المرة، لدي أساسا مجموعة من المجلدات وبعضها يحتوي على ملفات وأود أن أواد التحميل التلقائي كلما قمت بتشغيل البرنامج النصي مواقعي.ومع ذلك، لا أريد أن أحصل على تحديد الملفات التلقائي التلقائي لأنني أريد أن تكون العملية ديناميكية وأريد أن أكون قادرا على إنشاء وحذف ملفات مختلفة على الطاير. لذلك بالطبع هو أسهل الحل هو الحصول على قائمة بالمجلدات في الدلائل وبناء المسارات إلى ملفات التحميل التلقائي، إذا كانت الملفات موجودة ثم يتضمن البرنامج النصي لهم. لكن سؤالي هو كم سيؤثر ذلك على أداء البرنامج النصي الخاص بي؟في الواقع إطارا أرغب في إطلاق سراحه لاحقا في الأداء هو القضية تماما. أي أفكار؟

هل كانت مفيدة؟

المحلول

You should consider simply letting PHP autoload your classes.

If that won't work, then you're pretty much left with the directory-scanning solution, and you shouldn't really care about performance penalties. If you want the functionality, you'll put up with the costs.

Generally you shouldn't stress overmuch about performance in PHP anyways. If it becomes an issue when your framework is complete, revisit it. Chances are you'll find whatever performance gains/losses you incur now are rendered moot by implementing a good caching system in your framework.

See Premature Optimization.

نصائح أخرى

It depends on your disk speed, file system, and the size of the directory. No matter what, having to dynamically load the directory to get the list of files will take longer than loading a static list; how much of an increase is acceptable depends on your requirements.

If it's an option, caching that list could help.

Autoloading is great although it's not "free", the performance hit is not noticeable. Of course you can measure this and refactor if needed.

Here's my autoloader:

spl_autoload_register(
    function ($className) {
        $possibilities = array(
            APPLICATION_PATH.'beans'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'controllers'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'helpers'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'models'.DIRECTORY_SEPARATOR.$className.'.php',
            APPLICATION_PATH.'views'.DIRECTORY_SEPARATOR.$className.'.php'
        );
        foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $k => $v) {
            $possibilities[] = $v.DIRECTORY_SEPARATOR.$className.'.php';
        }
        foreach ($possibilities as $file) {
            if (file_exists($file)) {
                require_once($file);
                return true;
            }
        }
        return false;
    }
);

It depends.

Try your approach and measure. You can always add caching later. Or resort to autoload.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top