我的主要目标是尽可能快地加载多个页面。为此,我想同时利用缓存和一种“特殊技术”,作为后备,它依赖于标准缓存。
结构
在后端,我有以下结构。public_html 中有一个主页面和几个子页面,每个子页面都有各自不同的特定 css 规则。所有最小化文件的创建都是由脚本完成的,因此没有额外的复杂性。为简单起见,我们假设这是结构,尽管它更复杂:
/public_html
/index.php
/style.css ~50kb
/min.css ~100kb
/subjects
/index.php
/style.css ~20kb
/min.css ~10kb
/books
/index.php
/style.css ~20kb
/min.css ~10kb
...
第一个请求
所以当用户第一次进入子页面时,他们会收到这个 html 代码:
<!DOCTYPE html>
<html>
<head>
<link href="/subjects/min.css" rel="stylesheet" type="text/css">
</head>
<body>
All the body here
<link href="/min.css" rel="stylesheet" type="text/css">
</body>
如您所见,用户在一个小文件中的页眉中加载了该页面所需的所有 css 代码。请注意,这比使第一个请求加载更快的要/subjects/min.css
小得多。/min.css
然后,在正确加载完整的 html 和 css 后,/min.css
将开始加载。该文件包含所有子页面样式。
请注意,将放在tag中是合适的<link>
<body>
,即使它不起作用,也没有问题,因为已经加载了特定于页面的样式。为什么我在这里加载这个?继续阅读:
以下请求
对于该会话的第二个和后续请求,用户将收到以下 html 代码:
<!DOCTYPE html>
<html>
<head>
<link href="/min.css" rel="stylesheet" type="text/css">
</head>
<body>
All the body here
</body>
/min.css
应该已经从第一个请求缓存。但是,如果由于某种原因它不是,它现在将加载完整的最小化样式,就像在任何普通网站中一样。这将是后备情况。
这是一个有效的方案吗?为什么我以前没有见过这样的事情?它是否包含任何逻辑错误?
这些是我可以看到的主要问题,与好处相比还不够强大:
- 它给代码增加了一些额外的复杂性。
- 在一切都已经加载之后,需要提出一个额外的请求。这会在服务器上增加一点开销,但它是一个静态文件。
关于评论的注释:
浏览器会发出更少的请求。确实如此,这样浏览器会执行一个额外的请求。但是,它是在加载 html 和 css 之后,所以这不会对 html 产生很大影响。
缓存。是的,我正在尽我所能去抓文件。
<link>
但是,如果它在内部,可以针对缓存提出一点<body>
,因为我不知道缓存的行为是否不同,我只在问题中假设是。