Fragement Cache 是大家常用的Rails 內建 Cache 機制,不過昨天看到石鍋拌飯先生寫的
rails缓存机制的几个问题,裡面提到一些 Fragement Cache 的問題,這裡做一下筆記。
1. read_fragment 實做方式效率不佳
在
def read(name, options = nil) #:nodoc:
File.open(real_file_path(name), 'rb') { |f| f.read } rescue nil
end
每次判斷 fragment 都得 open file 一次,的確會損耗效率。解決方式是用 File.exist? 來判斷即可。
2. expire_fragment 使用 regular expression 效率不佳
不算問題啦,假設 expire_fragment 使用 regular expression ,根據內建的實做方式,他會一個一個目錄下去用 regular expression ,然後 regular expression 通常執行速度不佳,所以就....
解決方式有兩個,第一個就是不要在 expire_fragment 使用 regular expression,另外就是使用 backend script 來 expire cache 即可。
3. expire_cache 的時間點簡單講就是 controller read_fragment 的到 cache ,但是當 render 的時候卻剛剛好被 expire 掉了,就會出現 nil object error 。因為發生機率比較低,解決方式只能說視情況而定。
當然也可以照著原作者的講法,在 view 當中判斷 Model obj 是不是存在,不過這個作法就比較 dirty。
分享到:
相关推荐
在使用Rails基准测试器时,可以指定不同的选项来进行性能测试,例如通过-perf选项来启用或覆盖默认的日志记录级别,通过-nocache选项关闭Rails缓存以排除缓存对测试结果的影响,以及通过-path选项来指定测试脚本的...
12. **缓存**:利用Rails的缓存机制,如Action Cache、Fragment Cache和低级别的Redis或Memcached,减少数据库查询,提高响应速度。 13. **部署与持续集成(CI/CD)**:使用Heroku、Capistrano等工具进行部署,配合...
3. **应用程序缓存**:在应用层面上实现缓存机制,如使用Rails框架内置的ActiveRecord来管理对象缓存,减少数据库的查询次数。 4. **Web服务器缓存**:在Web服务器级别实现缓存功能,比如使用Nginx等反向代理服务器...
本文将深入探讨这些常见问题,并提供解决策略,帮助开发者提高代码质量和调试效率。 1. **路由错误**:Rails的路由系统是其强大功能的一部分,但也是许多初学者的痛点。当出现“未定义路由”错误时,检查`config/...
Ruby On Rails(简称Rails)是一种使用Ruby语言编写的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提高开发效率,强调简洁和生产力。本项目是基于Rails构建的一个洗衣管理系统,旨在帮助用户...
Rails 4引入了许多新特性与改进,旨在提高开发效率和应用程序的安全性。 - **版本更新**:Rails 4发布于2013年6月,是Rails 3的重大升级。 - **主要特点**: - **安全性增强**:内置安全功能,如防止跨站脚本攻击...
在Ruby on Rails框架中,Markdown是一种常用的轻量级标记语言,用于编写易读易写的文本,然后转换成结构化的HTML(超文本标记语言)...这使得开发者和作者可以专注于内容创作,而不必担心格式问题,提高了工作效率。
这有助于保持开发环境的一致性,避免“在我的机器上工作”问题,并简化部署流程。 3. **Image Cache**:在Web开发中,图片缓存通常用于提高用户体验和降低服务器负载。Rails应用可以通过配置Rails的Asset Pipeline...
### Ruby 命令集合(一些有用的命令) 在Ruby编程语言的世界里,Rails是一个非常流行的Web应用框架。本文将详细介绍一些常用的Rails命令...通过学习并熟练掌握这些命令,可以大大提高开发效率,使项目更加健壮和稳定。
2. Rails:提供了一套完整的开发工具,包括路由、数据库迁移、测试框架等,大大提高了开发效率。 3. ActiveRecord:Rails中的ORM(对象关系映射)库,负责数据库操作,使得开发者能以面向对象的方式操作数据。 4. ...
"Second Level Cache - ActiveRecord的write-through和read-through缓存库"是一个针对Ruby on Rails框架中ActiveRecord的高效解决方案,它提供了write-through和read-through缓存策略来优化数据存取。 ActiveRecord...
Rails.cache = Readthis::Cache.new ``` 6. **扩展与定制** Readthis提供了自定义序列化器和过期策略的选项,可以根据项目需求进行定制。例如,你可以选择使用JSON或Marshal作为序列化方式。 7. **最佳实践** ...
此外,考虑到性能和扩展性,可能采用了缓存策略,如Rails内置的Action Cache和Page Cache,以及Redis或Memcached等外部缓存解决方案。数据库方面,MySQL、PostgreSQL或SQLite可能是常见的选择,它们与Rails有良好的...
Cache_fu** - **功能**:对象缓存和查询缓存,提高应用性能。 **5. bbcodeizer** - **用途**:BBCode解析器,支持自定义修改以适应项目需求。 **6. acts_as_taggable** - **用途**:支持用户自定义标签的保存...
在Ruby on Rails框架下,一种常用的缓存库是IdentityCache,它提供了对ActiveRecord模型对象的高效缓存,包括对Blob(二进制大对象)级别的支持。本篇文章将深入探讨IdentityCache以及它如何为ActiveRecord提供强大...
通过配置`config.cache_store = :redis_cache_store`,Rails会利用Redis的高性能特性,将HTTP请求的结果存储起来,减少对数据库的访问,从而提升应用程序的响应速度。此外,Redis还支持多数据库选择,可以在不同缓存...
本手册将详细介绍如何在自己的系统上搭建一个完整的Redmine环境。 1. 引言 Redmine的搭建涉及多个步骤,包括安装必要的软件栈、配置数据库以及最后的Redmine应用安装。这个过程可能对新手来说有些复杂,但通过遵循...