BlogReworkPro - 一个 SEO 友好的 SPA,相关 React 全家桶, FLASK,服务端渲染 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dtysky
V2EX    程序员

BlogReworkPro - 一个 SEO 友好的 SPA,相关 React 全家桶, FLASK,服务端渲染

  •  1
     
  •   dtysky
    dtysky 2016-10-14 12:59:27 +08:00 4598 次点击
    这是一个创建于 3351 天前的主题,其中的信息可能已经有所发展或是发生改变。

    BlogReworkPro - Rework the BlogRework

    各位别 DD= =,真扛不住。

    Preview

    地址:
    dtysky|一个行者的轨迹

    Github 工程在此:
    BlogReworkPro

    重构BlogRework,这是此 Blog 迎来的第四次重构了,和上一次的间隔比预期要早一些,不过这种事早点没啥坏处。这次重构主要是重写了前端、修了一些后端的 BUG ,跟进 ES6 ,用 Eslint 和 Flow 约束代码规范,上了 React 最佳实践全家桶并且实现了完美的服务端渲染,加了 Memory Cache ,样式换成了 less , DOM 语义化也做了,构建工具也换成了 gulp ,也就是说,上一次遗留的 Feature 基本都搞定了。这次重构对个人的能力提升显著,还是很值得的。

    系列教程:
    [ React/Flask ] BlogReworkPro-Rework the BlogRework
    [ React/Redux/Router/Immutable ] React 最佳实践的正确食用姿势
    [ React/Redux ] 深入理解 React 服务端渲染
    [ Flask/React ] 此博客服务端的缓存实现
    [ Less ] 实现可选参数以及各种 autoprefixer


    基础架构

    1. 添加了一些 Bash 和 Npm 脚本,并采用了新的以环境变量为基础的配置文件,二者配合使得开发发布更加轻松和工程化。
    2. 跨域访问控制。
    3. 正确使用了 Forever.js 使得进程守护更加完备。

    后端

    1. 在生产环境下,使用 tornado 的 wsgi 框架来替代 Flask 自己的 server ,增强性能和稳定性。
    2. 使用 virtualenv 构建独立的 python 来隔离系统原生的 python ,屏蔽系统差异(虽然不如 docker ),详见install.sh
    3. 增强了日志管理器,使其更加完善,详见Back/utils/logger
    4. watchdog.observers.Observer替换为watchdog.observers.polling.PollingObserver,消去了一些 BUG 。
    5. 修复了一些写入数据库时的对比 BUG 。
    6. 实现了 Memory cache ,详见此文章: [ Flask/React ] 此博客服务端的缓存实现

    前端

    1. 上了 React + Redux + React-router + Immutable 全家桶,详见此文章: [ React/Redux/Router/Immutable ] React 最佳实践的正确食用姿势
    2. Less 带我飞,取代了原生 CSS ,详见此文章: [ Less ] 实现可选参数以及各种 autoprefixer
    3. 完全使用 ES6 语法,并使用 Eslint 和 Flow 来进行代码规范化约束,详见Front/.eslintrc
    4. 将回调基本全部用 Promise 替换,回调地狱 Bye~
    5. 消除了 Jquery ,改用 superagent 来做 ajax 请求,比如Front/src/action/source.js,消去了 JS 动画库的依赖,完全使用 CSS3 动画替代。
    6. 用 Katex 替换了 MathJax 来做 Tex 解析,自己写了自动渲染文章的转换器,详见Front/src/utils/renderWithKatex
    7. DOM 结构语义化。
    8. 用 Gulp 替换了 Grunt 来构建 Task ,详见Front/gulpfile.js
    9. 重绘了一些 SVG 图标,使其完美化,比如playstation.svg
    10. 增强了主题,优化了很多细节,使其更加有设计感,比如pagenation,文章列表的样式。
    11. 将一些资源进行打包或者内嵌,对图片进行压缩,减少向服务端的请求次数,使得渲染更加流畅,比如字体和小图标这种就打入了两个文件并内嵌为 base64 ,用 webpack 实现自动内嵌。
    12. 完美的服务端渲染,详见此文章: [ React/Redux ] 深入理解 React 服务端渲染
    13. 实现了 Memory cache ,详见此文章: [ Flask/React ] 此博客服务端的缓存实现

    彩蛋

    1. 404 页面: 任意一个找不到的页面
    2. 打开控制台。
    10 条回复    2016-10-14 21:06:23 +08:00
    wyntergreg
        1
    wyntergreg  
       2016-10-14 13:02:43 +08:00
    竟然是少女风,差评!
    okampfer
        2
    okampfer  
       2016-10-14 13:24:06 +08:00
    Nice! 很清新的简洁风!

    “ I wish I can become a poet, a novelist, a game designer and a cute lolita.”, UP 主是妹纸?
    huiyadanli
        4
    huiyadanli  
       2016-10-14 13:50:05 +08:00
    光从外观看,没有很大的改变呐。。
    dtysky
        5
    dtysky  
    OP
       2016-10-14 14:26:50 +08:00
    @okampfer

    HAHAHA


    @huiyadanli

    主要是工程上的改进
    其实样式也有很大变化吧,只是结构没变
    fy
        6
    fy  
       2016-10-14 15:48:41 +08:00
    卧槽我技术路线与 LZ 很相似,也是 Web 和游戏开发

    Web 方面倒是混成了设计以外的全栈,不过技能树是 Tornado VueJS 全家桶 Webpack ,回调也是 async/await 来做,完美错开 LZ 这次实践用的技术。

    游戏开发方面已经歪到脚本解释器了。。。。就不谈了。

    有机会和 LZ 认识一下,交♂易几发
    bugmenein
        7
    bugmenein  
       2016-10-14 15:56:03 +08:00
    强制背景音乐不开心
    Vamwere
        8
    Vamwere  
       2016-10-14 16:01:25 +08:00
    龙凰马上来肛你了
    dtysky
        9
    dtysky  
    OP
       2016-10-14 16:07:00 +08:00
    @fy
    会了一套框架学另一个很容易吧
    有机会交♂易


    @bugmenein
    移动端不会,包容包容 LZ 的安利心 233


    @Vamwere
    反过来还差不多吧 www
    chux0519
        10
    chux0519  
       2016-10-14 21:06:23 +08:00
    可以,很丝滑。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1076 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:15 PVG 02:15 LAX 10:15 JFK 13:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86