Conversation
|
Hint: the debug code (to be removed) shows how the calls are reduced: ZMS/Products/zms/_zreferableitem.py Lines 537 to 545 in e8eb17b
|
| request.get('getLinkObj_counter', 0) | ||
| ob.id if ob is not None else None, | ||
| ref_params, | ||
| '\n\t'.join(traceback_stack) |
There was a problem hiding this comment.
@zmsdev: the traceback stack now shows the last 3 function calls ending with the call of getLinkObj(). The example shows 8 Linkobjects that induce each about 8 function calls for creating the rendering. 51 of 66 functions calls are delivered from the new request-buffer.
Test Custom-Linkcontainer using getLinkObj() for rendering@zmsdev: a typical user-test scenario reveals that a linkcontainer of e.g. 8 custom-linkelements[*] calls 52x getLinkObj() without the buffering-optimisation in the function
[*] custom-linkcontainer
Test Standard-ZMSLinkContainerIf we test the rendering of 8 standard ZMSLinkElements aggregated by the standard ZMSLinkContainer, we will get 16+1 calls of getLinkObj, means 2x each Link plus 1x for aquired. Without optimisation the standard_html creates 74+1 calls (80% less redundancy).
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:00bcad5a-bce7-4b83-948d-fc5bead41d67, Target-ID=e5 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0ba6aba3-0217-4d94-8d2f-df21bcc766b6, Target-ID=e12 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:0dd5fb6f-bfb4-4307-96f8-6add09df52a6, Target-ID=e60 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:44b58809-bfe4-4759-b86b-c30ff5ae6ae9, Target-ID=e57 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:4c17e3a2-fb35-4b5e-99cc-67bfe44347e4, Target-ID=e65 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:664eedeb-3fff-470e-91ea-d1e5036e3834, Target-ID=e138 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:93bb8004-aad3-41cb-aea6-b72d986c3e8f, Target-ID=e22 (ZMSFolder), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:9c704923-ca1d-4c3d-9045-07d4adddb706, Target-ID=e63 (ZMSDocument), ref_params={}
[ZMSLinkElement:getLinkObj] uid:bdafd639-6fc2-45e2-a96f-bcb66ddf7da7, Target-ID=e132 (ZMSFlexbox ACQUIRED), ref_params={}
|
…s-publishing/ZMS into fix_redundant_link_processing




Ref:
The function getLinkObj is called very often to process a link with in zmslinkelement.py. To minimize these calls (which hits the catalog) a cache for getRefObj() in the request buffer is introduced.
Tracing the calls back it reveales that getRefObj() in zmslinkelement.py:195 will be called 18 times within ZMSLinkElement (from getObjProperty, getType, isActive, isVisible, initObjChildren, getPageExt, renderShort, etc.), and each time it resolved the link from scratch via getLinkObj().
The fix adds request-buffering to getRefObj() using the same fetchReqBuff/storeReqBuff pattern already used by getInternalLinkDict. The cache key is 'getRefObj.%s' % self.get_uid(), so each ZMSLinkElement resolves its reference object once per HTTP request instead of 12-18 times.