Автозагрузка пользовательских функций

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 файл D

Добавлено через 05:47 сек.
просто интересно, где этот предел конфорта, будет ли сильно нагружаться машина или размеры php файла не имеют значение, что то я по этому поводу не могу найти точного ответа в гугле.

7. Тимофей (19.07.2011 / 11:11)
Денис Одинец (19 Июля 2011 / 11:04)
7. orel, тогда можно весь код движка перенести в 1 файл D
+1 D
а по сабжу норм фишка klass

8. Lugaro (19.07.2011 / 11:23)
8. Денис Одинец, Это будет ещё хуже, и вот что будет делаться каждый рас с этим огромным куском
wiki:
1 лексический анализ исходного кода и генерация лексем,
2 синтаксический анализ полученных лексем,
3 генерация байт-кода,
4 выполнение байт-кода интерпретатором

Добавлено через 02:57 сек.
Нужно разбивать всё на модули и при запуске модуля грузить только нужные компоненты, вот их и можно в одну кашу кэшировать.
Всё это было бы проще делать если бы у движка была одна точка входа

9. delete (19.07.2011 / 11:27)
11. .::lugaro::., ну а если так или иначе это весь кусок кода разделен на несколько файлов и все равно подключается к одному файлу. Например как у ротора smile

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, эт я так, просто к месту спросил smile

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/
у всех разные эротические фантазии D

Добавлено через 06:36 сек.
p.s в смысле анализ не похожесть кода (php функции) а названия пользовательских функций хотя бы.

21. Вантуз-мен (19.07.2011 / 17:25)
тут много чего можно напридумывать, анализ кода и названий это все жрет время, так что такого не будет как выход всем функциям делать проверку
if (!functions_exists(...)){

В кэш будет писаться только названия файлов которые там есть, чтобы каждый раз не искать в папке
а выводится будет напрямую, то есть каждый файл подключаться, если файлов много можно самому их группировать

22. delete (19.07.2011 / 17:34)
24. Vantuz, ыы а я то думал D уж стал верить что это первые шаги к mvc, но все равно полезный мод ибо каждый кодыр пытается вносить свои дополнения в файл с функциями и часто бывает что заменяя один файл другим, мы убиваем модуль другого кодера. Теперь такого не будит да и руками больше не прейдется дорабатывать functions

23. Вантуз-мен (19.07.2011 / 17:36)
25. Денис Одинец, функции сами по себе такие их не перепишишь, не переназначишь и не отключишь, в отличии от классов

24. Vizor (19.07.2011 / 17:52)
22, сразу видно линуксятник E

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
а кода одинаково.
Плюс возможности куда ширеsmile
позаимчтвую идейку, если ты не противsmile

33. Антон (20.07.2011 / 02:54)
я против этой фишки

34. ramzes (20.07.2011 / 03:03)
Гг, так не используй))
можешь еще в гаагский суд жалобу накатать

35. delete (20.07.2011 / 03:15)
36. Borland.Delphi, да эта фишка как полезна так и без полезна, она лишь для тех кто не хочет ковырятся самостоятельно в файле с пользовательскими функциями. Плюс инклуды на несколько единиц замедлят генерацию страниц. Но это не так много, а кто экономит на спичках, тех ... не буду на ночь кошмары рассказывать D

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)
удобное нововведение, хорошая идея klass
реализацию единственное продумать нужно.
я считаю нужно просто ручное обновление кэша этих функций, ну или сравнивать например хэши файлов, если изменен - перекэшировать. или по времени последнего изменения

Добавлено через 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. Дмитрий, аха если бы они еще знали что такое класс...
+ тут не все так просто.
Класс очень сложно объявляется D
Те товарисчи, что не умеют класс создавать и так всё равно будут пихать свой код в includes/functions.php

44. Studentsov (20.07.2011 / 17:47)
Да и добавлена эта фича будет в версию 2.*, а в бесплатной не будет. Так что особо ничего не изменится в любом случае

URL: https://visavi.net/topics/23374