php-openapi icon indicating copy to clipboard operation
php-openapi copied to clipboard

My experience using the lib. Inputs for performance improvement

Open SOHELAHMED7 opened this issue 3 years ago • 1 comments

First of all, Thanks for this amazing library.

I am using this library and would like to share experience that will give you data when you refactor code to improve performance

  • When $openapi object is initialised by reading spec file it is taking significant time that can be reduced ($openapi = Reader::readFromJsonFile(realpath('openapi_spec.json'));)
  • When I print_r a Schema object (cebe\openapi\spec\Schema) it takes a lot of time, browser crashes sometimes. (Workaround print_r property directly echo $schema->title)
  • Above issue also occurs when I try to print other object such as MediaType
  • php.ini: max_execution_time & memory_limit are needed to increase. If possible, changes can be made to be within limit of PHP defaults

Note: I have not done concrete profiling. This are just my primary observation while using the lib

I will share further experiences when I go come across any

SOHELAHMED7 avatar Mar 23 '21 08:03 SOHELAHMED7

When $openapi object is initialised by reading spec file it is taking significant time that can be reduced ($openapi = Reader::readFromJsonFile(realpath('openapi_spec.json'));)

I think result shoud be cached. Two ways:

  1. Cache in user space (need example in library documentation)
  2. Cache as vendor feature - need CachebleReader implementation
  3. PSR-6 integration support - accept user defined implementation injection

Last approach is best practice.

Currently, I'm use parsing for build app routing powered by spec with FastRoute (https://github.com/FreeElephants/json-api-php-toolkit/blob/be6041c5f6fd586e19d3bf1ba3b3b4030e260c11/src/FreeElephants/JsonApiToolkit/Routing/FastRoute/CacheableDispatcherFactoryProxy.php for example).

samizdam avatar May 24 '21 16:05 samizdam