PHP çerçeve yükleme optimize

3 Cevap php

Ben optimize etmek için görevli olan PHP ile yazılmış özel bir yerleşik uygulama çerçevesi var. Bu çerçeve, çeşitli işlevsellik sağlamak için MVC "modüller" yükler paylaşılan kod temeli. Her modül görünümleri için kontrolörler ve modelleri ve PHP dosyaları için birden çok PHP sınıfları içeren bir dizin.

Görüntü ve stil dahil olmak üzere hemen hemen tüm istekleri için tüm çerçevesi yükler. Modülleri kendi paketlerini alan olacak şekilde tasarlanmıştır, ve içlerinde görüntüleri, stil, Javascript'leri veya diğer statik dosyalar içerebilir olmasıdır. Sistem sadece modülleri statik dosyaları çekmek için hangi mevcut olduğunu belirlemek için tüm modülleri yüklemek için vardır çünkü bu nedenle, normalde çok basit bir istek ne olacağını hizmet veren yük vardır.

Aşağıdaki gibi herhangi bir URI işleme için genel bir işlemdir:

  1. All base system classes are included
  2. A global exception handler and some global variables are set
  3. A system-wide configuration file is read. (This is a file filled with PHP statements to set config variables)
  4. A connection to the database is made
  5. The modules folder is scanned via opendir() and each module is verified to be valid and free of syntax errors, and then included.
  6. A second configuration file is loaded which sets up configuration for the modules
  7. A new instance of each module is created (calling it's __construct() method and possibly creating other database connections, performing individual startup routines, etc)
  8. The URI is examined and passed off to the appropriate module(s)

Adımlar 1-7 neredeyse her zaman tam olarak aynı olacaktır. Yeni modüller yüklü veya yapılandırma dosyası değiştirilmediği sürece onlar her zaman aynı işlemleri gerçekleştirecektir. Benim sorum, ne sürecini optimize etmek için yapılabilir mi? İdeal olarak, KeepAlive istekleri çalışmasına benzer şekilde çoklu istekleri, taşıma yolu çeşit istiyorum. Tüm modülleri başlatılıyor tüm yükü sadece başka bir isteği sunmak için tekrar aynı yükü olması, sadece () tek bir görüntü veya css dosyası Readfile için bir atık gibi görünüyor.

Böyle bir çerçevenin yükü azaltmak için herhangi bir yolu var mı? (Herkes tüm kodları okuyan olmadan bana yardımcı olursa ben bile bilmiyorum, bu umutsuz bir soru olabilir)

3 Cevap

Genellikle statik içerik sunan dinamik bir web sunucusu iplik bağlamak için kötü bir fikir. Apache, IIS et, Nginx,. al. Zaten bu dosyaları sunmak için gereken her şeyi yapmak. Her statik varlık kamu docroot içinde bir yerde bulunan ve benzersiz bir URL var ise, PHP bunları yüklemeden dahil olma konusunda endişelenmenize gerek olmamalıdır.

Ayrıca, önbellek ilgili başlıkları (ETag'a Son-Modifiye, vb) doğru oluşturulan ediliyor ve her müşteri sadece bir kez, her dosyayı talep etmelidir emin eğer. Ücretsiz önbelleğe == kazanın!

Tüm modülleri her istek için yüklenmesi gereken bir nedeni var mı? Neden kontrolörleri yüklenecek gerektiren modülleri belirlemek ve sadece istenen olanlar yüklemek için izin vermiyor?

Neden 5. adımdan önce adım 8 hareket değil? İlk URL inceleyin, sonra sonuçlarına göre modülleri yükleyecektir.

Başka biri:

Her modül geçerli ve sözdizimi hataları özgür olmak doğrulanmış, ve daha sonra dahil edilir.

Eğer gerçekten including() onlardan önce dosyaları kontrol sözdizimi mı? Eğer öyleyse, neden bu gerekli mi?