`
wiisola
  • 浏览: 87400 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

#001_实例变量做查询缓存

阅读更多
看了Kevin Yang对初学者的建议,终于决定开始学习Railscasts了,目前一共有99个例子,暂且希望能每天坚持学习至少一个,并以文字的形式表述出来。

User.find(session[:user_id])

以上代码每次都会向数据库发起一条查询请求,为了提高性能,只需要多加一个或标记,就可以在已赋值的情况下不再发起查询请求。
@current_user ||= User.find(session[:user_id])


不过,论坛中的某位高人说了:
hideto 写道
看起来不错,但是实际上有问题:
实例变量的作用域是一次请求,即一次请求结束后@current_user这个实例变量就没了,下次请求时会照样调用User.find(session[:user_id])
即每次请求都会查询数据库。

所以这个视频中作者Ryan Bates在script/console中反复调用@current_user ||= User.find(session[:user_id])然后log中显示只查询数据库一次,
这是完全没有意义的!还好后来作者在后面的网页评论中作出了自我批评,但是想不通后面紧跟着一位“chineseGuy”在这里溜须拍马个不亦乐乎,
估计他根本没看懂这部视频,幸庆的是这位国人没有在留言时把自己的名字写成“chineseGay”。

而最重要的是,Rails目前已经内建支持查询缓存,见ActiveRecord源码包里的query_cache.rb。
这样,即使一次请求里调用current_user方法多次,查询缓存仍然会让你只接触数据库一次。

另外,我推荐这种@current_user获取方式:http://hideto.iteye.com/blog/100820
其中logged_in?、require_login、editable?等辅助方法也很有用


所以,其实该例是没有意义的..囧
分享到:
评论

相关推荐

    java缓存设计代码

    - 该类声明了一个`HashMap`成员变量`cacheMap`用于存储缓存数据。 - **版权信息**: - 版权所有者不详,但明确声明了版权归属。 - 创建日期为2008年11月28日,作者为Deepblue。 - **版本信息**: 当前版本为1.0。 ...

    内存缓存技术

    - **静态缓存**:通过将缓存对象声明为静态成员变量,可以在整个应用运行期间保持缓存状态。 - **组件化缓存**:将缓存注册为一个具有`singletion`属性的组件,可以确保在整个应用中只有一个缓存实例,从而减少资源...

    winform简单缓存类实例

    首先,我们看到`Form3`类中定义了一个`Cache`类型的成员变量`cache`,它是`System.Web.Caching.Cache`类的实例。这个类通常在ASP.NET中用于网页缓存,但在WinForm应用中同样适用,因为它提供了内存中的数据缓存功能...

    jQuery性能优化指南.pdf

    **定义:** 将频繁使用的jQuery对象存储到变量中,以减少重复查找DOM的开销。 **实例:** 错误示范: ```javascript $("#traffic_light input.on").bind("click", function(){}); $("#traffic_light input.on").css...

    Activiti数据库总结说明参考.docx

    - **ACT_HI_*:** 表示history,用于存储历史数据,如结束的流程实例、变量、任务等。 - **ACT_GE_*:** 通用数据表,用于存储多种类型的数据。 #### 数据表详解 ##### ACT_GE_BYTEARRAY (二进制数据表) **描述:**...

    先进先出缓存算法

    1. **`struct cache`** - 这个结构体代表了缓存中的单个条目,包含了一个整型变量`b`用于存储数据,以及两个指针`pb`和`pq`,分别用于链接前后的缓存条目,形成链表结构。 2. **`struct hiha`** - 定义了更高层次...

    一个简易实现ASP.NET网页静态数据Static Data 进行缓存Cache 的程序例子

    在这个名为"LookUpDataCacheExample"的压缩包文件中,很显然包含了一个演示如何将静态数据进行缓存的实例。下面我们将详细讨论ASP.NET中的缓存机制以及如何应用到静态数据上。 ASP.NET 提供了多种缓存策略,包括...

    mapgis_igserver地图查询实例开发篇.pdf

    ### MapGIS K9 IMS 地图查询实例开发篇知识点概览 #### 一、二次开发简介 ##### 1.1 二次开发概述 - **WebGIS的熟悉与神秘**: WebGIS因其广泛的应用而为人所熟知,但同时也因其复杂的功能和技术门槛而显得神秘莫测...

    ASP.NET 页面/数据库缓存实例

    - 实例中可能通过实际的数据库查询和页面渲染过程,演示了如何结合网页缓存和数据库缓存提高应用程序性能。例如,对于频繁查询但很少变动的数据,可以将其存储在数据库缓存中;而对于计算复杂或耗时的页面内容,...

    Twig Cache Extension:用于Twig的模板片段缓存类库

    首先创建一个新的`Extension`实例,然后将其添加到你的Twig环境配置中: ```php use Twig\Extension\CacheExtension; use Twig\Environment; $loader = new Twig\Loader\FilesystemLoader('path/to/templates'); $...

    MysqL缓存的解决方案

    "MySQL缓存的解决方案" MySQL 缓存是提高数据库性能的一种重要手段,它可以减少数据库的读写次数,从而提高系统的整体性能。以下将对 MySQL 缓存的解决方案进行详细的介绍。 缓存的必要性 缓存的主要目的是减少...

    以文件形式缓存php变量的方法

    特别是在使用PHP进行开发时,合理地利用缓存能够显著减少数据库查询次数,提高页面加载速度,从而改善用户体验。本文将详细介绍一种在PHP中通过文件来缓存变量的方法。 ### 文件缓存的原理 文件缓存是一种常见的...

    facebook_performance_caching-dc

    全局变量缓存通过抽象层自动实现缓存功能,避免了不必要的APC和Memcached请求。虽然这种方式仍然存在函数调用的成本开销,但在大多数情况下,这种方式已经足够高效。 #### APC (Alternative PHP Cache) APC是一种...

    uclinux内核的存储管理_v0.1

    每个CPU都维护着一个`per_cpu_pageset`实例,用以确保内存分配的公平性和效率。 ##### 1.3.3 zone `zone`是内存分区的基本单元,每个`zone`包含了一段连续的物理内存。 ```c struct zone { /* ... */ }; ``` `...

    ajax使用实例

    ### AJAX使用实例详解 在现代Web开发中,异步JavaScript和XML(Asynchronous JavaScript and XML,简称AJAX)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这项技术对于提升用户体验至关重要,...

    MySQl数据库管理

    这样,当相同的查询再次被执行时,可以从缓存中快速获取结果,而不是重新执行查询。 ##### 5.13.2 查询高速缓冲SELECT选项 通过调整SELECT语句中的选项,可以控制哪些查询结果被缓存。这有助于优化性能。 ##### ...

    100种以上JS源代码文件_实例实用

    1. **基础语法**:JS源码通常会涵盖基本的语法结构,如变量声明(var、let、const)、数据类型(字符串、数字、布尔、对象、数组、null、undefined)、控制流(条件语句、循环)、函数定义和调用等。 2. **DOM操作*...

    清除BIEE缓存

    ### 清除BIEE缓存 #### 背景介绍 在企业级数据分析与报告领域,Oracle Business Intelligence Enterprise Edition (BIEE) 是一种广泛采用的解决方案。随着时间的推移,BIEE 会产生大量的缓存数据,这些数据不仅占用...

Global site tag (gtag.js) - Google Analytics