X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/506bcbac0420a46997ad531961d543e62c011513..5b78246d11948e93f54ae32dd800e9adaf55a546:/doc/plugins/write/external.mdwn diff --git a/doc/plugins/write/external.mdwn b/doc/plugins/write/external.mdwn index 735f7a20e..3612dd9c3 100644 --- a/doc/plugins/write/external.mdwn +++ b/doc/plugins/write/external.mdwn @@ -78,6 +78,9 @@ example, make an RPC call to `inject`. Pass it named parameters "name" and "Ikiwiki::rcs_update" and "call" is the RPC call ikiwiki will make whenever that function is run. +If the RPC call is memoizable, you can also pass a "memoize" parameter, set +to 1. + ## Limitations of XML RPC Since XML RPC can't pass around references to objects, it can't be used @@ -86,3 +89,34 @@ use XML RPC for `cgi` or `formbuilder` hooks (which are passed CGI and FormBuilder perl objects), or use it to call `template()` (which returns a perl HTML::Template object). +Also. the `getopt` hook doesn't work, as ARGV is not available to the external +plugin. + +## Performance issues + +Since each external plugin is a separate process, when ikiwiki is +configured to use lots of external plugins, it will start up slower, and +use more resources. One or two should not be a problem though. + +There is some overhead in using XML RPC for function calls. Most plugins +should find it to be pretty minimal though. In one benchmark, ikiwiki was +able to perform 10000 simple XML RPC calls in 11 seconds -- 900 per second. + +Using external plugins for hooks such as `sanitize` and `format`, which +pass around entire pages, and are run for each page rendered, will cause +more XML RPC overhead than usual, due to the larger number of calls, and the +large quantity of data conversion going on. In contrast, `preprocess` hooks +are called generally rarely, and pass around minimal data. + +External plugins should avoid making RPC calls unnecessarily (ie, in a loop). +Memoizing the results of appropriate RPC calls is one good way to minimise the +number of calls. + +Injecting a replacement for a commonly called ikiwiki function +could result in a lot more RPC calls than expected and slow +eveything down. `pagetitle`, for instance, is called about 100 times +per page build. Memoizing injected functions whenever possible is a very +good idea. + +In general, use common sense, and your external plugin will probably +perform ok.