Yii 片段缓存
片段缓存提供了网页片段的缓存。
步骤1 - 将一个名为 actionFragmentCaching() 的新函数添加到SiteController。
public function actionFragmentCaching() { $user = new MyUser(); $user->name = "cached user name"; $user->email = "cacheduseremail@gmail.com"; $user->save(); $models = MyUser::find()->all(); return $this->render('cachedview', ['models' => $models]); }
在上面的代码中,我们创建了一个新用户并显示了一个 缓存 视图文件。
第2步 - 现在, 在 views / site 文件夹中创建一个名为 cachedview.php 的新文件。 **
<? php if ($this->beginCache('cachedview')) { ?> <?php foreach ($models as $model): ?> <?= $model->id; ?> <?= $model->name; ?> <?= $model->email; ?> <br/> <?php endforeach; ?> <?php $this->endCache(); } ?> <?php echo "Count:", \app\models\MyUser::find()->count(); ?>
我们在一对beginCache()和endCache()方法中包含了内容生成逻辑。如果在缓存中找到内容,则beginCache()方法将呈现它。
第3步 - 转到URL http:// localhost:8080 / index.php?r = site / fragment- caching 并重新加载页面。以下将是输出。
请注意,beginCache()和endCache()方法之间的内容已被缓存。在数据库中,我们有13个用户,但仅显示12个用户。
页面缓存
页面缓存提供缓存整个网页的内容。页面缓存由 yii \ filter \ PageCache支持 。
第1步 - 修改 SiteController 的 behavior() 函数。
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'only' => ['logout'], 'rules' => [ [ 'actions' => ['logout'], 'allow' => true, 'roles' => ['@'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'logout' => ['post'], ], ], [ 'class' => 'yii\filters\PageCache', 'only' => ['index'], 'duration' => 60 ], ]; }
上面的代码缓存索引页面60秒。
第2步 - 转到URL http:// localhost:8080 / index.php?r =站点/索引 。然后,修改索引视图文件的祝贺消息。如果您重新加载页面,您将不会注意到任何更改,因为该页面已被缓存。等一会儿,然后重新加载页面。
HTTP缓存
Web应用程序也可以使用客户端缓存。要使用它,你可以为控制器动作配置 yii \ filter \ HttpCache 过滤器。
Last-Modified标题使用时间戳来指示页面是否被修改。
步骤1 - 要启用发送Last-Modified标头,请配置yii \ filter \ HttpCache :: $ lastModified属性。
public function behaviors() { return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['index'], 'lastModified' => function ($action, $params) { $q = new \yii\db\Query(); return $q->from('news')->max('created_at'); }, ], ]; }
在上面的代码中,我们仅为索引页启用了HTTP缓存。当浏览器第一次打开索引页时,页面在服务器端生成并发送到浏览器。第二次,如果没有消息被创建,服务器将不会重新生成页面。
Etag头部提供了一个表示页面内容的散列。如果页面改变了,哈希值也会改变。
第2步 - 要启用发送Etag头,请配置 yii \ filters \ HttpCache :: $ etagSeed 属性。
public function behaviors() { return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['index'], 'etagSeed' => function ($action, $params) { $user = $this->findModel(\Yii::$app->request->get('id')); return serialize([$user->name, $user->email]); }, ], ]; }
在上面的代码中,我们只为 索引 操作启用了HTTP缓存。它应该根据用户的名称和电子邮件生成Etag HTTP头。当浏览器第一次打开索引页时,页面在服务器端生成并发送到浏览器。第二次,如果名称或电子邮件没有更改,服务器将不会重新生成该页面。
下一章:Yii 别名
别名可帮助您不要在项目中硬编码绝对路径或URL。别名以@字符开头。要定义一个别名,你应该调用 Yii :: setAlias() 方法 -// an alias of a file pathYii::setAlias('@al ...