分类 教程 下的文章

最近沉迷 SSR,因为考虑到了一些需求:

  • SEO
  • Social sharing

当然了,谷歌牛逼,都能直接解析 SPA 了,但问题我主要还是一个用户体验上:用户点击一个 url,SPA 就 404 了,但一个体验很好的网站,显然希望是能够加载出来的。下面是Vuejs的SSR网站对SEO问题的解释:

Better SEO, as the search engine crawlers will directly see the fully rendered page.

Note that as of now, Google and Bing can index synchronous JavaScript applications just fine. Synchronous being the key word there. If your app starts with a loading spinner, then fetches content via Ajax, the crawler will not wait for you to finish. This means if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary.

所以就开始了迁移,从 React SPA 迁移到 nextjs。

nextjs 很多大坑,比如说:

  • getInitialProps 只能在pages这个目录下用
    • _app.js 里不建议用 getInitialProps
  • 关于 router:
    • Link 其实是客户端 routing,
    • router ( useRouter 和 withRouter )的话, push就是服务端 routing,
    • router 不能像 react-router 那样带state (我看某个 issue 这么些的,想和各位确认一下)
  • PM2 部署
    • 还是需要用express做一个中间层
    • 也有用koa2做中间层的,但我没再折腾了
    • 如果不用,直接pm2 start next start也行,但我还是希望用到ecosystem.config.js这个文件写配置
  • Webpack配置的坑:
  • next.config.jsde 问题
    • 首先是不要用.env,而要用这个配置文件里的env
  • 一些迷
    • 反正就是总会出现一些迷一样的 error,反正还有点搞不清

现在有很多云服务供应商,比如AWS、阿里云,提供消息队列服务。我一直有个困惑,所以就去提问了,有几个回复很不错。

Q:
首先,大家使用消息队列的原因有很多,其中一个常见的原因是稍后处理耗时任务,比如发邮件,短信等。这个是很基本的,就不多说了。
那么,这个处理的核心是,快速把任务加入到队列里, 比如保存在 mysql 或者 redis,缩短用户的响应时间,然后快速把 response返回给用户。
所以,快速,就是关键。毕竟发送邮件需要好几百 ms,写入到 redis 也许 10ms 就够了。但现在很多云服务推出消息队列的功能,我猜测,你要调用 他们的api 的,这个 api 肯定是 http 请求啊,这个请求会很耗时吧。这样使用一个云端消息队列有何意义呢?和在 localhost 或者内网搭建消息队列相比,云服务的消息队列有什么更值得使用的理由?

网友回复摘要:

- 阅读剩余部分 -

部署好了,有一个专门的数据库,然后用cron来每10分钟执行一次。
crontab是这样写的:
*/10 * * * * /usr/bin/php /path/to/queue/script > /dev/null 2>&1

终于把worker部分写完了,当然了,应该再做一些处理,比如即便有很多人留言,我也可以只请求一次Server酱或者发送一次邮件,毕竟这个小脚本每5分钟运行一次。也要加一个done_at的列,好知道什么时候已经处理过了这个job

好,这里有一个重要话题:耗时。

- 阅读剩余部分 -