Recently Browsing 0 members
No registered users viewing this page.
Hey Ryan, hey friends,
we, Mobile Trooper a digital agency based in Germany, use ProcessWire for an Enterprise-grade Intranet publishing portal which is under heavy development for over 3 years now. Over the years not only the user base grew but also the platform in general. We introduced lots and lots of features thanks to ProcessWire's absurd flexibility. We came along many CMS (or CMFs for that matter) that don't even come close to ProcessWire. Closest we came across was Locomotive (Rails-based) and Pimcore (PHP based).
So this is not your typical ProcessWire installation in terms of size.
Currently we count:
140 Templates (Some have 1 page, some have >6000 pages)
~ 15k Users (For an intranet portal? That's heavy.)
~ 195 431 Pages (At least that's the current AUTOINCREMENT)
I think we came to a point where ProcessWire isn't as scalable anymore as it used to be. Our latest research measured over 20 seconds of load time (the time PHP spent scambling the HTML together). That's unacceptable unfortunately. We've implemented common performance strategies like:
We're running on fat machines (DB server has 32 gigs RAM, Prod Web server has 32gigs as well. Both are running on quadcores (xeons) hosted by Azure.
We have load balancing in place, but still, a single server needs up to 20 sec to respond to a single request averaging at around about 12 sec.
In our research we came across pages that sent over 1000 SQL queries with lots of JOINs. This is obviously needed because of PWs architecture (a field a table) but does this slow mySQL down much? For the start page we need to get somewhere around 60-80 pages, each page needs to be queried for ~12 fields to be displayed correctly, is this too much? There are many different fields involved like multiple Page-fields which hold tags, categories etc.
We installed Profiler Pro but it does not seem to show us the real bottleneck, it just says that everything is kinda slow and sums up to the grand total we mentioned above.
ProCache does not help us because every user is seeing something different, so we can cache some fragments but they usually measure at around 10ms. We can't spend time optimising if we can't expect an affordable benefit. Therefore we opted against ProCache and used our own module which generates these cache fragments lazily.
That speeds up the whole page rendering to ~7 sec, this is acceptable compared to 20sec but still ridiculously long.
Our page consists of mainly dynamic parts changing every 2-5 minutes. It's different across multiple users based on their location, language and other preferences.
We also have about 120 people working on the processwire backend the whole day concurrently.
What do you guys think?
Here are my questions, hopefully we can collect these in a wiki or something because I'm sure more and more people will hit that break sooner than they hoped they would:
- Should we opt for optimising the database? Since >2k per request is a lot even for a mysql server, webserver cpu is basically idling at that time.
- Do you think at this point it makes sense to use ProcessWire as a simple REST API?
- In your experience, what fieldtypes are expensive? Page? RepeaterMatrix?
- Ryan, what do you consider as the primary bottleneck of processwire?
- Is the amount of fields too much? Would it be better if we would try to reuse fields as much as possible?
- Is there an option to hook onto ProcessWires SQL builder? So we can write custom SQL for some selectors?
Thanks and lots of wishes,
Pascal from Mobile Trooper
I'd like to participate to a documentation about the page flow in PW. I am still a beginner and still have difficulties to see the big picture but I could help to the writing.
What is the flow when a page is displayed or created ? It would be fine to draw a scheme with every stage in which one can add hooks. Something to describe the flow in time.
May be it exists.
What do you think ?
I recently started making a blog using Processwire and since i'm completely new, I struggle with a few things.
I'm trying to make a comment section in my blog post, so I followed the tutorial and pasted the two code lines in my template.
18 echo $page->comments->render(); 19 echo $page->comments->renderForm();
but now I have this error on my page :
Error: Call to a member function render() on null (line 18 of C:\wamp64\www\processwire\site\assets\cache\FileCompiler\site\templates\Post.php)
Am I missing something?
Thanks for your help.
Hi im new to this forum and i need some help with a booking system that i have trying to implement under Processwire. I hope that i can explain as much as i can what my problem is.
Here is the orginal script https://github.com/olejon/phpmyreservation
I downloaded the script and got some help to fix it because it was all messed up. I have attached a file "ReservationSystem.rar" and it should work out of the box. Also attached the database file "Phpmyreservation.sql".
The thing is the script works great as it is now but when i install a blank version of processwire and import the script to the template folder it wont work. I have tried many things but cant get it to work just error after error etc. Please ask me if you need some more information about this. I know you are the experts so thats why im asking you.
I'm building a site and i noticed that loading time is very slow when we enter the site address for the first time. It takes about 1 minute or more just to start loading files and displaying the content.
However, after that period it's very fast and everything is ok. Once the page(s) is/are loaded, i can refresh them quickly and without any delay.
any one faced like this problem? and what can i do to resolve it.
hosted type: VPS
this message appear in admin dashboard: " Warning: your server locale is undefined and may cause issues. Please add this to /site/config.php file (adjust “en_US.UTF-8” as needed): setlocale(LC_ALL,'en_US.UTF-8');"
The site: http://almanassah.net