Dokumentacja apc.enable_cli
, które kontrolują, czy APC powinna być aktywowana w trybie CLI mówi (cytowanie):
głównie do testowania i debugowania. Ustawienie to włącza APC dla wersji PHP CLI . W normalnych okolicznościach, nie jest idealny do tworzyć, wypełniać i zniszczyć pamięci podręcznej APC na każde żądanie CLI, ale dla różnych scenariuszy testowych warto móc włączyć APC dla wersji PHP CLI łatwo.
Może APC zapisze kody operacji w pamięci, ale ponieważ plik wykonywalny PHP zginie na końcu skryptu, pamięć zostanie utracona: nie będzie trwała między wykonaniem skryptu.
Tak więc pamięć podręczna kodu w APC jest bezużyteczna w trybie CLI: nie będzie optymalizować niczego, ponieważ PHP będzie musiało ponownie skompilować kod źródłowy do kodu opcodu przy każdym uruchomieniu pliku wykonywalnego PHP.
Właściwie APC nie „optymalizacji”: standardowym sposobem wykonywania skryptu PHP jest tak:
- odczytać pliku i skompilować go pod rozkazy
- wykonać opcodes
Co APC jest sklep w opcodes w pamięci, więc wykonanie skryptu PHP staje:
- przeczytać opcodes z pamięci (znacznie szybciej niż kompilacji kodu źródłowego)
- wykonać opcodes
Ale to oznacza, że musisz mieć pewne miejsce w pamięci do przechowywania opcodes. Kiedy PHP działa jako moduł Apache, Apache jest odpowiedzialny za utrzymywanie tego segmentu pamięci ... Gdy PHP jest uruchamiane z CLI, nie ma tam nic, co by zatrzymywało segment pamięci, więc jest niszczone pod koniec wykonywania PHP.
(nie wiem dokładnie jak to działa, ale jest coś w tym, co najmniej w zakresie zasad, nawet jeśli moje słowa nie są bardzo „techniczny” ^^)
Albo przez "optymalizacja" oznacza coś innego niż pamięć podręczna opcode, np. dyrektywa konfiguracyjna apc.optimization? Jeśli tak, ta została usunięta w APC 3.0.13
z dokumentacji PHP APC jest wolny, otwarte i solidne ramy do buforowania i optymalizacji kodu PHP pośredni. Zgadnij Zastanawiam się nad optymalizacją kodu pośredniego. Planuję wykonanie skryptu CLI tylko raz, a następnie będzie on działał przez kilka dni, wykonując kod wewnątrz pętli. Więc APC tak naprawdę nie przyspiesza samego wykonania, tylko czas potrzebny na rozpoczęcie wykonywania? – Matic
http://pecl.php.net/package-info.php?package=APC&version=3.0.13 mówi "Przestarzałe i usuń optymalizator apc"; Nigdy nie słyszałem, żeby APC (przynajmniej w ostatnich wersjach) robił jakąkolwiek "optymalizację", jak to, co mógłbyś pomyśleć o kompilerze, który możesz zrobić, gdy programujesz w C. Nie sądzę, że to zmniejszy czas wzięty, aby zacząć wykonywanie, ponieważ PHP będzie musiało być skompilowane do opcode'a (to właśnie na tej części APC pozwala na ogromny zysk ... Kiedy może zachować te kody w pamięci pomiędzy wykonaniami skryptu - co nie wydaje mi się może to zrobić w CLI). –
Po prostu, aby było jasne, używanie APC w trybie CLI jest nadal bardzo przydatne do buforowania obiektów generowanych przez użytkownika. W skrypcie, nad którym pracuję, używamy apc_store() i apc_fetch(), aby wykorzystać buforowanie obiektów użytkowników APC w długo działającym zadaniu cron. – rinogo