refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

refactor: extract ResponseCache class for Web Page Caching - #7644

Merged
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache
Jul 5, 2023
Merged

refactor: extract ResponseCache class for Web Page Caching#7644
kenjis merged 13 commits into
codeigniter4:4.4from
kenjis:refactor-PageCache

Conversation

@kenjis

@kenjiskenjis commented Jun 30, 2023

Copy link
Copy Markdown
Member

Description

  • extract ResponseCache class
    • to make it easier to extend the page caching
  • fix incorrect type definitons for request

Checklist:

  • Securely signed commits
  • Component(s) with PHPDoc blocks, only if necessary or adds value
  • Unit testing, with >80% coverage
  • User guide updated
  • Conforms to style guide

@kenjiskenjis added refactor Pull requests that refactor code 4.4 labels Jun 30, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

The service returns the same object. Does it make sense to create an additional property?

@kenjis
kenjis marked this pull request as draft June 30, 2023 09:50
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 54ed30f to 715723dCompareJune 30, 2023 11:09
@kenjiskenjis added breaking change Pull requests that may break existing functionalities bug Verified issues on the current code behavior or pull requests that will fix them labels Jun 30, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch 2 times, most recently from 911db4e to dba3d1aCompareJune 30, 2023 11:23
@iRedds

Copy link
Copy Markdown
Collaborator

I'd like to suggest a change.

  1. Renaming a class and methods.
  • rename class PageCache to ResponseCache
  • rename method cachePage to make
  • rename method getCachedResponse to get
  1. Move the CodeIgniter::$cacheTTL property to the new page caching class. That is, all functionality will be processed by one class.
    The Controller::cachePage() method could then look like this.
protectedfunctioncachePage(int$time)
{
Services::pagecache()->ttl($time);
}
  1. I don't know if it makes sense for the generateCacheKey method to be public.

@kenjis

Copy link
Copy Markdown
MemberAuthor

Thank you for your comment.

What about the namespace? Should be in CodeIgniter\HTTP?

@kenjiskenjis added the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 1, 2023
@iRedds

Copy link
Copy Markdown
Collaborator

What about the namespace? Should be in CodeIgniter\HTTP?

I think the namespace should stay the same.

@kenjiskenjis changed the title refactor: extract PageCache class for Web Page Cachingrefactor: extract ResponseCache class for Web Page CachingJul 3, 2023
@kenjis
kenjisforce-pushed the refactor-PageCache branch from 0da0753 to 80465c6CompareJuly 3, 2023 03:43
Comment threadsystem/CodeIgniter.php Outdated
Comment on lines 530 to 532
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for considering my suggestion, but in this snippet, I meant a slightly different approach.

Suggested change
if ($this->pageCache->getTtl() > 0) {
$this->pageCache->make($this->request, $this->response);
}
$this->pageCache->make($this->request, $this->response);

and then the decision on the need to cache the Response is made by the caching class.

publicfunction make($request, ResponseInterface$response): bool
{
if ($this->ttl === 0) {
return ; // bool (false or true)
}

This is how I see the implementation, but I don't know if my approach is correct or not.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If $ttl is 0, there is no need to cache it, so that seems a little better.

Done.

@iRedds

Copy link
Copy Markdown
Collaborator

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

It seems to me that the current documentation is sufficient, since in fact nothing has changed for the end developer.

kenjis added 9 commits July 3, 2023 13:46
Fixes the following errors:
------ ------------------------------------------------------------------
Line system/CodeIgniter.php
------ ------------------------------------------------------------------
529 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::cachePage() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
685 Parameter #1 $request of method
CodeIgniter\Cache\PageCache::getCachedResponse() expects
CodeIgniter\HTTP\CLIRequest|CodeIgniter\HTTP\IncomingRequest,
CodeIgniter\HTTP\Request|null given.
------ ------------------------------------------------------------------
@kenjis
kenjisforce-pushed the refactor-PageCache branch from d748ef1 to cd5b817CompareJuly 3, 2023 04:46
@kenjis

Copy link
Copy Markdown
MemberAuthor

Added changelog.

@kenjiskenjis removed the docs needed Pull requests needing documentation write-ups and/or revisions. label Jul 3, 2023
@kenjis

Copy link
Copy Markdown
MemberAuthor

I have a little doubt, but it seems to me that there is no point in caching the response for the CLI.

Indeed, I am not sure if there is a use case.
However, it is a feature that currently exists, so it cannot be removed all of the sudden.

@kenjis
kenjis marked this pull request as ready for review July 3, 2023 05:24
Comment threadtests/system/CodeIgniterTest.php
Comment threaduser_guide_src/source/changelogs/v4.4.0.rst Outdated
Comment threadsystem/Cache/ResponseCache.php Outdated
Co-authored-by: MGatner <mgatner@icloud.com>
@kenjis
kenjis requested a review from paulbalandanJuly 4, 2023 22:41
@kenjis
kenjis merged commit 0d15487 into codeigniter4:4.4Jul 5, 2023
@kenjis
kenjis deleted the refactor-PageCache branch July 5, 2023 01:52
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking changePull requests that may break existing functionalitiesbugVerified issues on the current code behavior or pull requests that will fix themrefactorPull requests that refactor code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@kenjis@iRedds@MGatner@paulbalandan