I have a VF Page where I gather data from Attachments, deserialize the Attachments into Apex Classes, process the data, and then display the data on the VF page with ContentType="application/vnd.ms-excel"
.
When trying to load the VF Page, I encounter the following error:
Time limit exceeded – Your request exceeded the time limit for processing.
But when checking the Debug Logs, I have my Maximum CPU Time: 1069 out of 10000
.
I suspect this is a Visualforce timeout, and that it is very likely I have to change my data processing in order to create the desired spreadsheet. Are my suspicions correct?
I'm nearly certain that the timeouts occur due to the use of JSON
methods. My guess is that these methods don't count against Maximum CPU Time
but that each Visualforce request has a time out of ~15 seconds.
When I try collecting the data in Execute Anonymous
, I can pull all my desired data without breaching the Maximum CPU Time
Limit (~3000 out of 10000
), but the requests take ~20-30 seconds to come back with a result.
I am trying to prove that JSON
is causing my errors by creating sObject
records for my JSON data in a Dev Org, and even so, I am still running into the same Visualforce Timeout. I am only dealing with < 4000 records concerning only 5 fields in each record, and even when I replace the JSON.deserialize
with SOQL queries
, and I am still timing out. In all of my Debug Logs, I am never using more than 3000
in my Maximum CPU Time
. Is my data processing too intensive though I never breach any Governor Limit? The "Time limit exceeded" error is not an Apex Exception, so I can only surmise this is somehow a Visualforce error. Does this seem logical?
Update
Since I am heavily using Apex, I ended up chopping my code up into steps using @future
methods since they have 60,000 ms of CPU Time (rather than the normal 10,000 ms) and then have the methods save data a JSON attachments along the way. The first thing an @future
methods does is query the Attachment & deserialize the data before continuing processing. The user has to navigate a couple of processing steps, but since @future
methods have a callback when invoked in JavaScript, I can easily display to the User when the next step is available. The final VF Page just queries the data and deserializes it like the @future
methods do, and this is easily within VF Limits.
Best Answer
I have encountered with this issue.
Actually when you are going to hit the CPU limit through Visualforce page it won't show
Maximum CPU Time: 10000 out of 10000
It only shows last method execution time only. But actually you have hit the CPU limit, You can count it manually.
In you your case didn't hit the limit it is the visualforce limit of processing the request and generally happens when generating a PDF, XLS or othe document from visualforce page with huge data.
In case of CPU limit you should get :
System.LimitException: Apex CPU time limit exceeded
Sometimes it happens that page never reload completely it shows processing for hours but no result.