`

Fragment Cache Part 2

阅读更多
上次介紹了如何使用最基本的 Fragment Cache,現在來加上一些小小的小 trick。上次介紹在 View 裡面要這樣使用Fragment Cache


<% cache do %>
我們要 cache 的 content
<% end %>
Cache 會出現在 RailsRoot/tmp/cache/你的host/你的controller/你的action.cache 這個檔案裡面。假設上面的 action 是在 lala controller 的 haha action ,那們上面的寫法跟 下面的寫法效果是一樣的
<% cache(:controller => 'lala' , :action => 'haha' ) do %>
我們要 cache 的 content
<% end %>
簡單講,就是最上面的 cache do 寫法算是預設值,寫不寫好像沒差,當這個頁面只有這裡需要 cache 時,這樣寫就很方便。不過如果這個 haha action 會依照後面接的 id 的不同顯示不同的內容時,你可以很直覺的加上 :id 這個選項
<% cache(:controller => 'lala' , :action => 'haha' , :id => params[:id] ) do %>
我們要 cache 的 content
<% end %>
Cache 會出現在 RailsRoot/tmp/cache/你的host/你的controller/你的action/這個頁面的id.cache 這個檔案裡面。簡單講,又多了一層以 action 為名的目錄,目錄裡面每個 id 都有自己的 cache file。這樣的作法可以簡單依照變數的不同區分 cache file 。

不過?

但是老實說,到目前為止,這個 fragment cache 用途還是不大。我們一個 Action 只能使用一個 Partial Cache,那如果同一個頁面有兩個以上的地方要 cache 呢?Partial Cache 的概念就是一個網站有很多個 block 可以被許多頁面共用。假設某個頁面有兩個部份要 cache ,一個是 RSS ,另外一個是 Info 這個地方。那我們依照 Rails 聖經本的方法,使用 part 變數供我們使用
<% cache(:controller => 'lala' , :action => 'haha' , :id => params[:id] , :part => 'rss' ) do %>
我們要 cache 的 rss content
<% end %>
<% cache(:controller => 'lala' , :action => 'haha' , :id => params[:id] , :part => 'info' ) do %>
我們要 cache 的 info content
<% end %>
如此,相關的 Cache 會產生在 RailsRoot/tmp/cache/你的host/你的controller/你的action/這個頁面的id.part=rss.cache 還有 RailsRoot/tmp/cache/你的host/你的controller/你的action/這個頁面的id.part=info.cache 這兩個 file 裡面。仔細看就知道,他的命名機制就是 id. part=part_name.cache 這樣的寫法。很簡單吧。

到現在 Partial Cache 才從還好變成好用的階段。read_fragment 或是 exprie_fragment 都是使用
:controller => 'lala' , :action => 'haha' , :id => params[:id] , :part => 'info' 
這樣的命名機制來操作,不難吧。

還有嗎?

到現在為止,我還沒看過 :part 還不夠的情況,不過如果真的覺得用 controller , action , id , part 都不夠區分你的 cache ,還有最後一招
<% cache(:controller => 'lala' , :action => 'haha' , :id => params[:id] , :part => 'rss' , :part2 => 'rss'
, :part3 => 'rss' .... ) do %>
我們要 cache 的 rss content
<% end %>
簡單講,其實 :part 只是聖經本這樣寫,所以在 Rails Fragment Cache 機制裡,id 以後的 fragment 命名方式不限制,而且數量不限制,只要你不嫌打字太累,你大可以用幾百層去命名你的 cache 。出來的 cache file 命名規則是這樣 ailsRoot/tmp/cache/你的host/你的controller/你的action/這個頁面的id.part=rss&part2=rss&part3=rss.cache。總之隨便你怎麼命名 :p
分享到:
评论

相关推荐

    fragment-cache, 重前端元素的部分和异步缓存的WordPress插件.zip

    fragment-cache, 重前端元素的部分和异步缓存的WordPress插件 fragment-缓存 fragment 缓存是一个用于部分和异步前端元素缓存的WordPress插件。 它目前支持缓存导航菜单。小部件和库。高速缓存构建在临时 API ( 。随...

    FragmentDemo2

    FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2FragmentDemo2...

    activity与fragment以及fragment与fragment之间的通信

    Fragment1通过调用Activity的方法,Activity再将消息传递给Fragment2。这种方式简单易懂,但增加了Activity的负担,可能导致Activity变得复杂。 2. **使用EventBus或RxBus**:EventBus是一种发布/订阅事件总线,...

    Fragment内嵌套Fragment

    2. **创建内嵌套Fragment** - 在XML布局文件中,可以通过`&lt;fragment&gt;`标签直接添加子Fragment,指定其类名和ID。 - 或者在代码中,使用`FragmentManager`的`beginTransaction()`方法,通过`add()`、`replace()`等...

    关于Fragment里面嵌套fragment

    2. **代码中动态添加嵌套Fragment**: 在父Fragment的`onCreateView()`或`onActivityCreated()`方法中,使用`FragmentManager`和`FragmentTransaction`来添加子Fragment。 ```java NestedFragment ...

    fragment中嵌套fragment

    2. **在主Fragment中添加布局**:在主Fragment的布局XML文件中,为子Fragment预留一个占位符,通常是一个`FrameLayout`或其他容器控件,用于在运行时插入子Fragment。 3. **在代码中添加子Fragment**:在主Fragment...

    graphql-ruby-fragment_cache:graphql-ruby插件,用于缓存部分响应

    GraphQL :: FragmentCache GraphQL::FragmentCache具有缓存响应片段的能力,可的能力:您可以将任何字段标记为已缓存,并且永远不会再次解析(至少在缓存有效时)。 例如,以下代码为每个帖子缓存title : class ...

    fragment activity与fragment相互传值 fragment与fragment跳转

    2. **通过setArguments()和getArguments()**: 这是最常用的方法,创建Fragment时,可以使用Bundle对象通过setArguments()将数据添加到Fragment的初始化参数中。在Fragment的onCreate()或onCreateView()方法中,通过...

    ViewPager+Fragment,Fragment嵌套Fragment实现页面活动

    2. `Fragment`基础: - 创建`Fragment`:继承自`Fragment`类,实现必要的方法如`onCreateView`,在这个方法中返回`Fragment`的布局视图。 - 添加`Fragment`:通过`FragmentManager`的`beginTransaction`方法开始一...

    Fragment实现分页导航

    2. 在使用ViewPager时,确保不要过度加载页面,以免影响性能。 3. 为了提高用户体验,可以在页面切换时添加动画,通过ViewPager的`setPageTransformer()`方法可以设置页面转换效果。 4. 在处理数据刷新或动态加载时...

    多个fragment嵌套,返回上级fragment例子

    2. **从AFragment到BFragment的跳转**: - 要从AFragment打开BFragment,我们需要在AFragment的代码中执行一系列操作。首先,创建一个BFragment实例,然后使用FragmentManager和FragmentTransaction来替换当前显示...

    ViewPager+Fragment导航滑动点击切换,替换某个Tab的Fragment资源

    ViewPager+Fragment导航栏支持滑动和点击切换...如有tab1,tab2两个导航按钮,分别对应tab1fragment和tab2fragment,点击某个按钮触发,将tab2的tab2fragment替换tab3fragment.,以后每次点击tab2显示tab3fragment

    fragment嵌套fragment

    2. **在Parent Fragment中添加布局**:在Parent Fragment的布局XML文件中,添加一个可以容纳子Fragment的容器,通常是`&lt;FrameLayout&gt;`。 3. **在Parent Fragment中添加子Fragment**: - 在Parent Fragment的`...

    viewpager+fragment左右滑动实现动态加载数据。动态刷新fragment

    在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其适用于创建带有多个视图的复杂界面。`ViewPager`允许用户通过水平滑动来浏览相邻的`Fragment`,而`Fragment`则用于...

    Android Fragment的使用-一个Fragment影响另外一个fragment。

    Android Fragment的使用。 功能:用一个Activity来管理两个Fragment,并且在其中一个Fragment中,点击按钮,影响到第二个Fragment。Activity中用list来管理Fragment。fragment布局采用垂直排列。

    Fragment回调接口

    2. `onCreate(Bundle savedInstanceState)`:Fragment创建时调用,可以在这里初始化数据和视图。 3. `onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)`:用于创建Fragment...

    Fragment嵌套Fragment实现多tab页面

    2. **设置ViewPager**:ViewPager是一个可以左右滑动查看多个页面的组件。在Activity中,你需要初始化一个ViewPager对象,并通过`PagerAdapter`(通常是`FragmentPagerAdapter`或`FragmentStatePagerAdapter`)来...

    fragment 与 activity 通信, fragment 与fragment通信

    fragment 与 fragment 通信 fragment 向 activity 传值 activity 向 fragment 传值 代码是自己手敲的

    点击切换Fragment并滑动切换Fragment

    在Android应用开发中,Fragment是UI组件的一种,它允许开发者在一个Activity中添加多个视图,增强了界面的灵活性和可交互性。"点击切换Fragment并滑动切换Fragment"的主题涉及到两个核心概念:用户交互触发的...

    Android在Fragment中实现监听触摸事件

    "Android在Fragment中实现监听触摸事件" Android在Fragment中实现监听触摸事件是指在Android应用程序中,如何在Fragment中监听触摸事件。Fragment是Android应用程序中的一个组件,它可以在Activity中使用,但是它并...

Global site tag (gtag.js) - Google Analytics