Автозагрузка пользовательских функций
1.
Вантуз-мен (19.07.2011 / 09:33)
Сегодня вечером выпущу новую фишку, в движке rotorcms в папке includes/functions можно будет ложить какие-то пользовательский функции или группы функций в эту папку и они автоматически будут подхватываться движком
Список файлов будет кэшироваться на некоторое время, поэтому нужно будет очищать кэш после загрузки новых файлов
Это сделано чтобы пользователи не изменяли файл includes/functions.php который очень часто меняется
2.
Вантуз-мен (19.07.2011 / 10:05)
ну там да в dcms там при каждом обновлении страницы проверяет папку с функциями, а я один раз проверяю и весь список файлов ложу в кэш, то есть при обновлении страницы из кэша берется список файлов и они уже подключаются
3.
evlbd (19.07.2011 / 10:48)
И еще сделать , что бы после обновления в роторе, зашёл в админку и обновил кэш.
4.
delete (19.07.2011 / 10:52)
а каков предел размера php сценария (размера самого файла), если например почти все функции и и классы загранать в один файл, машина не будет тупить?
5.
orel (19.07.2011 / 10:55)
Vantuz, и ещё загружать все файлы с функциями в 1 кэш файл, а его подгружать из кэша, так думаю будет удобней
Добавлено через 01:26 сек.
6.
Денис Одинец, думаю с этим проблем не будет точно
6.
delete (19.07.2011 / 11:04)
7.
orel, тогда можно весь код движка перенести в 1 файл
Добавлено через 05:47 сек.
просто интересно, где этот предел конфорта, будет ли сильно нагружаться машина или размеры php файла не имеют значение, что то я по этому поводу не могу найти точного ответа в гугле.
7.
Тимофей (19.07.2011 / 11:11)
Денис Одинец (19 Июля 2011 / 11:04)
7. orel, тогда можно весь код движка перенести в 1 файл
+1
а по сабжу норм фишка
8.
Lugaro (19.07.2011 / 11:23)
8.
Денис Одинец, Это будет ещё хуже, и вот что будет делаться каждый рас с этим огромным куском
wiki:
1 лексический анализ исходного кода и генерация лексем,
2 синтаксический анализ полученных лексем,
3 генерация байт-кода,
4 выполнение байт-кода интерпретатором
Добавлено через 02:57 сек.
Нужно разбивать всё на модули и при запуске модуля грузить только нужные компоненты, вот их и можно в одну кашу кэшировать.
Всё это было бы проще делать если бы у движка была одна точка входа
9.
delete (19.07.2011 / 11:27)
11.
.::lugaro::., ну а если так или иначе это весь кусок кода разделен на несколько файлов и все равно подключается к одному файлу. Например как у ротора
10.
Lugaro (19.07.2011 / 11:30)
12.
Денис Одинец, Ну я тебе отвечал на твою идею "весь движок одним файлом", а это разные вещи даже с тем что сейчас есть ))
11.
delete (19.07.2011 / 11:36)
13.
.::lugaro::., почему разные, поключается файл с функциями к модулю. А этому модулю нужны не все функции что там а лишь 2 к примеру. Не разумние ли взять сейчас файл функцион и раздлить его на десятки отдельных файлов. По одной функции на файл. И подключать лишь те функции которые будут нужны конкретному модулю в конкретную единицу времени. Естетвенно все кешируется.
12.
Lugaro (19.07.2011 / 11:42)
14.
Денис Одинец, Что ты уже не туда городишь, то ты говоришь про движок одним файлом а теперь про разделение. Я тебе отвечал на твою первую идею
13.
delete (19.07.2011 / 11:46)
15.
.::lugaro::., ну я просто выясняю крайние точки. Первый вопрос был о том, что будет если все функции и классы обьеденить в один файл (ядро). Ты ответил что будет плохо. А теперь спрашую каково будет если теперь файлов будет много, по одному на функцию, и тож самое хочу услышать, хорошо это или нужна золотая середина.
14.
orel (19.07.2011 / 11:49)
8.
Денис Одинец, причём тут весь код движка в 1 файл, я говорю про функции, всеравно они все хоть по одному файл но подключаются, так просто всё в одном файле.
15.
delete (19.07.2011 / 11:53)
17.
orel, эт я так, просто к месту спросил
16.
Lugaro (19.07.2011 / 11:54)
16.
Денис Одинец, Если подключаемых компонентов очень много то это скажется на производительности, но в любом случае это лучше чем весь скрипт одним файлом
17.
delete (19.07.2011 / 12:02)
19.
.::lugaro::., я хотел в своем движке сделать такую фишку. Что функции разнесены по разным файлам, у каждого модуля свой кеш. И свой файл с описанием (типа манифеста). Там будет указано, какая именно бд сейчас должна быть к нему подключена (у меня SQLite и каждого модуля свой файл бд), какие нужны сейчас функции. Тоесть по сути подключается лиш то что нужно. Так и безопасней и нагрузка меньше и можно заниматься улучшением конкретных функций, не тратя время на адаптацию к этим изменениям и других модулей.
18.
Вантуз-мен (19.07.2011 / 13:33)
Ограничений там не будет, ну если только в самом php есть какие-то ограничения
В этих файлах в основом будет хранится только функции, ну по желанию конечно можно и другое подключать, вот к примеру в есть мод для ротора миничат
http://visavi.net/load/zip.php?id=1132 там функции подключаются отдельно chat/includes/functions.php (4.7 Kb)
и в файлах они подключены вручную, а сейчас можно этот файл кинуть в папку includes/functions.php и они будут как бы продолжением файла основных функций, и ничего прописывать не нужно и изменять проще, автор мода может выпустить поправки в функциях и нужно всего лишь заменить файл
Добавлено через 03:57 сек.
Функцию очистки кэша я сделаю, но в некоторых случаях придется вручную очищать кэш, например если какие-то компоненты будут требовать функций которые еще не прокэшированы, но по идее конфликтов не должно быть
Добавлено через 07:41 сек.
Также вот к примеру админ сайта захотел для себя сделать какое-то дополнение, он может кидать все свои функции или какой-то контент в переменных, константах или блоках в папку с пользовательскими функциями и при новом обновлении движка без боязни сможет обновлять основной файл не думая что там что-то удалится из его кода
У меня к примеру тоже есть некоторые доп. функции которые я использую только для этого сайта, а в составе ротора они даже не нужны
19.
ктулху (19.07.2011 / 16:19)
А я бы папку назвал includes/functions.d/
20.
delete (19.07.2011 / 16:22)
21.
Vantuz, а принцип работы каков? просто будит чтение файлов которые вы добавите и эти новые участки кода будут писаться в кэше, который потом мы и подключим? а если кто то бросит 2 файла с разным названием, но одинаковым содержанием, модуль недопустит этого, есть ли анализатор похожести кода? а то код в кеше будет запасано одно и тоже по неск.раз.
Добавлено через 01:42 сек.
ShiftBHT (19 Июля 2011 / 16:19)
А я бы папку назвал includes/functions.d/
у всех разные эротические фантазии
Добавлено через 06:36 сек.
p.s в смысле анализ не похожесть кода (php функции) а названия пользовательских функций хотя бы.
21.
Вантуз-мен (19.07.2011 / 17:25)
тут много чего можно напридумывать, анализ кода и названий это все жрет время, так что такого не будет как выход всем функциям делать проверку
if (!functions_exists(...)){
В кэш будет писаться только названия файлов которые там есть, чтобы каждый раз не искать в папке
а выводится будет напрямую, то есть каждый файл подключаться, если файлов много можно самому их группировать
22.
delete (19.07.2011 / 17:34)
24.
Vantuz, ыы а я то думал
уж стал верить что это первые шаги к mvc, но все равно полезный мод ибо каждый кодыр пытается вносить свои дополнения в файл с функциями и часто бывает что заменяя один файл другим, мы убиваем модуль другого кодера. Теперь такого не будит да и руками больше не прейдется дорабатывать functions
23.
Вантуз-мен (19.07.2011 / 17:36)
25.
Денис Одинец, функции сами по себе такие их не перепишишь, не переназначишь и не отключишь, в отличии от классов
24.
Vizor (19.07.2011 / 17:52)
22, сразу видно линуксятник
25.
delete (19.07.2011 / 18:14)
27.
Mr. V, признаком хорошего тона является значек подчеркивания, а к точкам не однозначное отношение)))
26.
roma4o (19.07.2011 / 18:18)
Очень даже неплохо)
27.
ramzes (19.07.2011 / 18:26)
массовые инклуды?
28.
Вантуз-мен (19.07.2011 / 20:45)
30.
ramzes, ну там что много файлов чтоли будет,в самом движке их не будет вообще, а так там не много файлов я думаю подключат
29.
Miks (19.07.2011 / 23:41)
Да.. Вещь хорошая. А то я устал постоянно в этот файл в ручную вносить изменения.
30.
ramzes (20.07.2011 / 00:03)
31.
Vantuz, я так понял, подключается все что найдено и записано без разбора?
31.
Вантуз-мен (20.07.2011 / 00:16)
33.
ramzes, в определенной папке да
32.
ramzes (20.07.2011 / 00:25)
Не выгодно.
Выгоднее парсить, кешировать на неделю в один файл.
20 инклудов хуже чем 1
а кода одинаково.
Плюс возможности куда шире
позаимчтвую идейку, если ты не против
33.
Антон (20.07.2011 / 02:54)
я против этой фишки
34.
ramzes (20.07.2011 / 03:03)
Гг, так не используй))
можешь еще в гаагский суд жалобу накатать
35.
delete (20.07.2011 / 03:15)
36.
Borland.Delphi, да эта фишка как полезна так и без полезна, она лишь для тех кто не хочет ковырятся самостоятельно в файле с пользовательскими функциями. Плюс инклуды на несколько единиц замедлят генерацию страниц. Но это не так много, а кто экономит на спичках, тех ... не буду на ночь кошмары рассказывать
36.
Антон (20.07.2011 / 09:26)
37, ты чё такой злой?
я и не и спользую, потому что на своих системах уже давно сижу
37.
Вантуз-мен (20.07.2011 / 10:53)
39.
Borland.Delphi, ну вот ты же не написал что тебе нравится не нравится, замечание какие-то ты сидишь на своих системах и против , как ты написал, наших нововведений, это что нормально по-твоему
Добавлено через 01:48 сек.
35.
ramzes, если что позже перепишем, там по идее ничего пользователям менять не нужно будет, пока так сойдет
38.
Антон (20.07.2011 / 11:02)
40, я просто высказал своё мнение, с точки зрения кода. И помимо этого я наблюдаю за другими системами.
39.
KOZZ (20.07.2011 / 11:52)
удобное нововведение, хорошая идея
реализацию единственное продумать нужно.
я считаю нужно просто ручное обновление кэша этих функций, ну или сравнивать например хэши файлов, если изменен - перекэшировать. или по времени последнего изменения
Добавлено через 00:47 сек.
а вообще проще наверное сделать специальный файл для юзерских функций и его инклудить, и не париться
40.
Studentsov (20.07.2011 / 14:18)
Пусть мододелы в класс свои функции запихивают, а подгружать autoload-ом. Зачем париться?
41.
Саня (20.07.2011 / 14:38)
44.
Дмитрий, аха если бы они еще знали что такое класс...
+ тут не все так просто.
42.
ramzes (20.07.2011 / 14:47)
Классы плохо.
по многим причинам.
класс и автолоад и сам модификатор дописать может.
Сама идея кстати не нова. Вспомнил откуда знакома. CSS таким макаром генерируют из набора файлов, в некоторых движках обьемных
43.
Studentsov (20.07.2011 / 15:57)
sanzstez (20 Июля 2011 / 14:38)
44. Дмитрий, аха если бы они еще знали что такое класс...
+ тут не все так просто.
Класс очень сложно объявляется
Те товарисчи, что не умеют класс создавать и так всё равно будут пихать свой код в includes/functions.php
44.
Studentsov (20.07.2011 / 17:47)
Да и добавлена эта фича будет в версию 2.*, а в бесплатной не будет. Так что особо ничего не изменится в любом случае
URL:
https://visavi.net/topics/23374