点击上方蓝字关注“汪宇杰博客”

导语

去年年底我写了一篇《我的 .NET Core 博客性能优化经验总结》,但后来还发现有一处遗漏需要补充。我们一起来看看~

牺牲空间换时间

我们知道软件设计只有高手才能做到又小又快,像我这种普通程序员通常只有两种方案:牺牲时间换空间、牺牲空间换时间。那么在需要追求性能的情况下,可以做一些空间上的牺牲。例如,数据库可以保存冗余数据。

牺牲数据库空间

在我博客中,我需要在文章列表页面显示内容摘要,这个摘要来源于整篇文章的前400字。在我的旧版 .NET Framework 博客里,这个操作每次都是 SELECT 完整文章内容后用 Substring() 截取前400字,由于用了 EF,很难在 SQL 里完成这个截取,因此白白消耗了很多时间和网络传输成本。而在 .NET Core 重写的博客中,我调整了这个设计,在文章表里新加了一列,专门用于存储前400字的文章摘要,而摘要的内容会在新写文章或者编辑文章的时候计算完成并存储到数据库,这样我显示文章列表的时候就不需要去 SELECT 完整的文章内容。虽然这样的设计严格来说肯定不满足数据库的那些个范式,但充分提高了此处的性能。

在企业系统里,这种做法也比较常见。如果有开销比较大的计算才能得出的结果,并且结果不会变,那么不需要每次都去算,而设计成算完就存储在数据库里,以提高性能。

牺牲文件系统空间

我博客中,RSS/ATOM/OPML 等订阅源在以前也需要每次都去数据库取数据计算完成后,输出到客户端。然而这类数据也有个特性,就是几乎不会变。于是我就设计成第一次用户访问的时候,将计算结果生成 XML 文件缓存到临时目录,那么后续用户访问的时候就不需要 hit 数据库了。仅当文章内容有修改的时候,drop 掉缓存的文件,让用户下次请求时重新生成。

本文小结

  1. 在系统设计中,不要过分遵守理论,比如数据库范式,要具体分析自己遇到的业务情况,并做调整,世界上没有可以完美复制的“最佳实践”,只有适合自己业务的才是最佳实践。

  2. 懒,越懒越好!充分分析业务,明确哪些数据不容易变,可以缓存就缓存,文件也好,内存也好,根据需要自己设计。能不要去调用数据库的就尽量不要去用,因为通常系统最慢的环节就是在调用不同的API和数据库通讯上。

其他性能优化事项欢迎参考前篇《我的 .NET Core 博客性能优化经验总结》

我的 .NET Core 博客性能优化经验补充相关推荐

  1. 我的 .NET Core 博客性能优化经验总结

    点击上方蓝字关注"汪宇杰博客" 导语 去年8月,我用 .NET Core 重写了我的博客系统.经过一年多的优化,服务器响应速度从上线时候的 80ms 提高到了现在的 8ms,十倍提 ...

  2. Hexo 个人博客 SEO 优化(3):改造你的博客,提升搜索引擎排名

    Hexo 个人博客 SEO 优化三篇系列文章终于完成了 Hexo 个人博客 SEO 优化(1):搜索引擎原理介绍 Hexo 个人博客 SEO 优化(2):站内优化 Hexo 个人博客 SEO 优化(3 ...

  3. 个人博客 SEO 优化(2):站内优化

    文章首发于我的博客:个人博客 SEO 优化(2):站内优化 对于搜索引擎原理不清楚的可以看第一篇文章:个人博客 SEO 优化(1):搜索引擎原理介绍 SEO 优化可以分为站内优化和站外优化,而站内优化 ...

  4. 个人博客 SEO 优化(1):搜索引擎原理介绍

    文章首发于我的博客:个人博客 SEO 优化(1):搜索引擎原理介绍 写在文章前面: 前段时间接到一个 SEO 优化的私活.为了完成这个活,只能赶鸭子上架,从零开始系统地去学习 SEO 知识.经过几天的 ...

  5. 20个博客SEO优化技巧

    转自:http://lusongsong.com/reed/114.html SEO优化也就是搜索引擎优化,搜索引擎优化也就是博客内容被搜索引擎收录及优先排序,以此增加博客的点击率和曝光度,最终提升博 ...

  6. 常用博客SEO优化技巧

    博客的SEO优化其实并不是特别重要,因为博客的关键在于内容,内容为王,有了优秀而独特的内容,就很容易取得较好的排名.当然,使用一些常用的 SEO优化技巧也可以更好的改善排名.这里我以Z-Blog为例介 ...

  7. 关于 CSDN博客SEO优化的一点思考

    早上在写博客的时候,一不小心想着做SEO优化这个信息,因为新开的这个博客也是为了做SEO优化的. SEO优化: 是指通过对网站进行站内优化和修复(网站Web结构调整.网站内容建设.网站代码优化和编码等 ...

  8. 博客推广优化SEO排名方案大汇总!何必东奔西走这里的博客优化的文章应有尽有!!...

    企业 博客优化推广精品方案很有深度,很有参考价值. 建立博客群 博客地址: ①Donews :http://blog.donews.com/default.html ②新浪:http://blog.s ...

  9. Hugo博客SEO优化

    文章目录 1.页面关键词 2.页面描述 3.Google搜索优化 4.百度搜索优化 5.必应搜索优化 6.参考资料 原文博客链接地址: Hugo博客SEO优化 1.页面关键词 为每篇博客文章设置标题. ...

最新文章

  1. 两个形状不同的长方形周长_借助思维导图玩转小学阶段三种不同计算图形周长的方法!...
  2. Appium使用Python运行appium测试的实例
  3. 远控免杀专题7 ---shellter免杀
  4. 20135213 20135231 信息安全系统设计基础课程第三次实验报告
  5. css3的cursor
  6. matplotlib绘制K线图
  7. 云上持续交付实践系列1 --- java 篇
  8. ios 给网页传值_ios常见的页面传值方式
  9. 初接触RTMP流媒体实时消息传输协议
  10. 两table水平滚动条级联滚动(同步滚动)。 table1放标题,table2放内容。
  11. 如何使非域模式下的组策略对管理员帐号无效
  12. Ubuntu20.04Server双网卡问题
  13. Chrome安装HttpWatch
  14. C/C++ tip: How to detect the operating system type using compiler predefined macros
  15. 3-33在图 3-31中,以太网交换机有6个接口,分别接到5台主机和一个路由器。在下面表中的“动作”一栏中,表示先后发送了4个帧。假定在开始时,以太网交换 机的交换表是空的。试把该表中其他的栏目都填写
  16. 【WIN 07】笔记本重装系统找回预装的office
  17. 美智光电IPO被终止:年营收9.26亿 何享健为实控人
  18. Kinect for Windows SDK v2.0 开发笔记 (十三) 高清面部帧(4) 面部模型构建器
  19. c# ArrayList 和 Hashtable 的使用
  20. python苹果手机照片导入电脑_iphone照片怎么导入电脑?四种方法汇总

热门文章

  1. VS2010插件之NuGet
  2. C# 中打印、预览、打印机设置和打印属性的方法
  3. Membership学习记录
  4. 设置状态栏和标题栏的样式
  5. Animate与transform的使用
  6. Asp.Net MVC4入门指南(9):查询详细信息和删除记录
  7. 从零开始来看一下Java泛型的设计
  8. 使用ABBYY FineReader进行自动图像预处理
  9. python的内建函数详解
  10. php中使用exec,system等函数调用系统命令