-
-
Notifications
You must be signed in to change notification settings - Fork 615
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[question] why do you call parse_content for each page in get_pages? #93
Comments
It should only be called once per page in get_pages(). We need it to convert the content to HTML for the excerpt. |
ok, but where will be the excerpt used? I can't find any usage of the excerpt in the core, only a hint in the documentation, that this could be accesed by the page variable. |
@NeoBlack makes a good point. Moving excerpts into a plugin would be better all around. In fact the excerpt could be done in a Twig filter. I actually developed a filter called first_paragraph which I believe to be better than excerpt because it won't cut mid sentence. I just inform my client that the first block is the intro, and they get it. I can also add the |
I am sure the newly added issue #97 based on this issue |
@NeoBlack page.excerpt is useful, if use Pico for blogging. So I can have a list of posts and brief text of them on main(for example) page. |
@Frodox thanks for your hint, I think a plugin for the excerpt is the best way to improve the performance and use it only if really necessary.
|
You should look at https://github.com/Circa75/dropplets/blob/master/dropplets/functions.php they do exactly the same - and with caching. 👍 |
**Note:** This changelog only provides basic information about the enormous changes introduced with Pico 1.0.0-beta.1. Please refer to the UGPRADE section of the docs for details. ``` * [Security] (9e2604a) Prevent content_dir breakouts using malicious URLs * [New] Pico is on its way to its first stable release! * [New] Provide pre-bundled releases * [New] Heavily expanded documentation (inline code docs, user docs, dev docs) * [New] New routing system using the QUERY_STRING method; Pico now works out-of-the-box with any webserver and without URL rewriting; use `%base_url%?sub/page` in markdown files and `{{ "sub/page"|link }}` in Twig templates to declare internal links * [New] Brand new plugin system with dependencies (see `PicoPluginInterface` and `AbstractPicoPlugin`); if you're plugin dev, you really should take a look at the UPGRADE section of the docs! * [New] Introducing the `PicoDeprecated` plugin to maintain full backward compatibility with Pico 0.9 and Pico 0.8 * [New] Support YAML-style meta header comments (`---`) * [New] Various new placeholders to use in content files (e.g. `%site_title%`) * [New] Provide access to all meta headers in content files (`%meta.*%`) * [New] Provide access to meta headers in `$page` arrays (`$page['meta']`) * [New] The file extension of content files is now configurable * [New] Add `Pico::setConfig()` method to predefine config variables * [New] Supporting per-directory `404.md` files * [New] #103: Providing access to `sub.md` even when the `sub` directory exists, provided that there is no `sub/index.md` * [New] #249: Support the `.twig` file extension for templates * [New] #268, 269: Now using Travis CI; performing basic code tests and implementing an automatic release process * [Changed] Complete code refactoring * [Changed] Source code now follows PSR code styling * [Changed] Replacing constants (e.g. `ROOT_DIR`) with constructor parameters * [Changed] Paths (e.g. `content_dir`) are now relative to Pico's root dir * [Changed] Adding `Pico::run()` method that performs Pico's processing and returns the rendered contents * [Changed] Renaming all plugin events; adding some new events * [Changed] `Pico_Plugin` is now the fully documented `DummyPlugin` * [Changed] Meta data must start on the first line of the file now * [Changed] Dropping the need to register meta headers for the convenience of users and pure (!) theme devs; plugin devs are still REQUIRED to register their meta headers during `onMetaHeaders` * [Changed] Exclude inaccessible files from pages list * [Changed] With alphabetical order, index files (e.g. `sub/index.md`) are now always placed before their sub pages (e.g. `sub/foo.md`) * [Changed] Pico requires PHP >= 5.3.6 (due to `erusev/parsedown-extra`) * [Changed] Pico now implicitly uses a existing `content` directory without the need to configure this in the `config/config.php` explicitly * [Changed] Composer: Require a v0.7 release of `erusev/parsedown-extra` * [Changed] #93, #158: Pico doesn't parse all content files anymore; moved to `PicoParsePagesContent` plugin, but still impacts performance; Note: This means `$page['content']` isn't available anymore, but usually the new `$page['raw_content']` is suitable as replacement. * [Changed] #116: Parse meta headers using the Symfony YAML component * [Changed] #244: Replace opendir() with scandir() * [Changed] #246: Move `config.php` to `config/` directory * [Changed] #253: Assume HTTPS if page is requested through port 443 * [Changed] A vast number of small improvements and changes... * [Fixed] Sorting by date now uses timestamps and works as expected * [Fixed] Fixing `$currentPage`, `$nextPage` and `$previousPage` * [Fixed] #99: Support content filenames with spaces * [Fixed] #140, #241: Use file paths as page identifiers rather than titles * [Fixed] #248: Always set a timezone; adding `$config['timezone']` option * [Fixed] A vast number of small bugs... * [Removed] Removing the default Twig cache dir * [Removed] Removing various empty `index.html` files * [Removed] Moving Pico's excerpt feature to `PicoExcerpt` plugin ```
**Note:** This changelog only provides basic information about the enormous changes introduced with Pico 1.0.0-beta.1. Please refer to the UGPRADE section of the docs for details. ``` * [Security] (9e2604a) Prevent content_dir breakouts using malicious URLs * [New] Pico is on its way to its first stable release! * [New] Provide pre-bundled releases * [New] Heavily expanded documentation (inline code docs, user docs, dev docs) * [New] New routing system using the QUERY_STRING method; Pico now works out-of-the-box with any webserver and without URL rewriting; use `%base_url%?sub/page` in markdown files and `{{ "sub/page"|link }}` in Twig templates to declare internal links * [New] Brand new plugin system with dependencies (see `PicoPluginInterface` and `AbstractPicoPlugin`); if you're plugin dev, you really should take a look at the UPGRADE section of the docs! * [New] Introducing the `PicoDeprecated` plugin to maintain full backward compatibility with Pico 0.9 and Pico 0.8 * [New] Support YAML-style meta header comments (`---`) * [New] Various new placeholders to use in content files (e.g. `%site_title%`) * [New] Provide access to all meta headers in content files (`%meta.*%`) * [New] Provide access to meta headers in `$page` arrays (`$page['meta']`) * [New] The file extension of content files is now configurable * [New] Add `Pico::setConfig()` method to predefine config variables * [New] Supporting per-directory `404.md` files * [New] #103: Providing access to `sub.md` even when the `sub` directory exists, provided that there is no `sub/index.md` * [New] #249: Support the `.twig` file extension for templates * [New] #268, 269: Now using Travis CI; performing basic code tests and implementing an automatic release process * [Changed] Complete code refactoring * [Changed] Source code now follows PSR code styling * [Changed] Replacing constants (e.g. `ROOT_DIR`) with constructor parameters * [Changed] Paths (e.g. `content_dir`) are now relative to Pico's root dir * [Changed] Adding `Pico::run()` method that performs Pico's processing and returns the rendered contents * [Changed] Renaming all plugin events; adding some new events * [Changed] `Pico_Plugin` is now the fully documented `DummyPlugin` * [Changed] Meta data must start on the first line of the file now * [Changed] Dropping the need to register meta headers for the convenience of users and pure (!) theme devs; plugin devs are still REQUIRED to register their meta headers during `onMetaHeaders` * [Changed] Exclude inaccessible files from pages list * [Changed] With alphabetical order, index files (e.g. `sub/index.md`) are now always placed before their sub pages (e.g. `sub/foo.md`) * [Changed] Pico requires PHP >= 5.3.6 (due to `erusev/parsedown-extra`) * [Changed] Pico now implicitly uses a existing `content` directory without the need to configure this in the `config/config.php` explicitly * [Changed] Composer: Require a v0.7 release of `erusev/parsedown-extra` * [Changed] #93, #158: Pico doesn't parse all content files anymore; moved to `PicoParsePagesContent` plugin, but still impacts performance; Note: This means `$page['content']` isn't available anymore, but usually the new `$page['raw_content']` is suitable as replacement. * [Changed] #116: Parse meta headers using the Symfony YAML component * [Changed] #244: Replace opendir() with scandir() * [Changed] #246: Move `config.php` to `config/` directory * [Changed] #253: Assume HTTPS if page is requested through port 443 * [Changed] A vast number of small improvements and changes... * [Fixed] Sorting by date now uses timestamps and works as expected * [Fixed] Fixing `$currentPage`, `$nextPage` and `$previousPage` * [Fixed] #99: Support content filenames with spaces * [Fixed] #140, #241: Use file paths as page identifiers rather than titles * [Fixed] #248: Always set a timezone; adding `$config['timezone']` option * [Fixed] A vast number of small bugs... * [Removed] Removing the default Twig cache dir * [Removed] Removing various empty `index.html` files * [Removed] Moving Pico's excerpt feature to `PicoExcerpt` plugin ```
In get_pages for each page the function parse_content will be called, in my little test environment with some hooks, the method get_pages is called 5 times which calls parse_content 5 times for all 20 pages, so with every request parse_content will be called 100 times.
Can we cache the calls (Singleton) or better, call parse_content only, if the parsed_content property is used.
The text was updated successfully, but these errors were encountered: