分享 pjax 是什么以及为什么推荐大家用

linjunhalida · 2012年05月09日 · 最后由 Lucifer 回复于 2012年09月20日 · 10334 次阅读

http://blog.linjunhalida.com/article/pjax%E6%98%AF%E4%BB%80%E4%B9%88%E4%BB%A5%E5%8F%8A%E4%B8%BA%E4%BB%80%E4%B9%88%E6%8E%A8%E8%8D%90%E5%A4%A7%E5%AE%B6%E7%94%A8

在 2011 年 rails 大会上面, DHH 也提到了 pjax, 并且也提出了疑问, 为什么大家不去用。

这里我做了一个简单的技术分析, 推荐大家采用 pjax。我也觉得 ruby 社区应该多一点技术分享, 让这个社区带来更多的价值。

必须反对你说的两点好处啊。

用户体验是下降而不是提升。首先,慢就是慢,不可能因为你换个呈现方式原来不能容忍的就能容忍了。其次,违背传统使用习惯。所以还是尽量限制在只有点击显示更多之类的地方使用。另外,客户端的开销可能增大了不少,毕竟现在改用 JavaScript 去更新页面了。

减少没多少带宽消耗和服务器消耗。css/js 之类的静态文件在第一次访问后就缓存在浏览器里了。

印象中 pjax 不会减少后台负担。服务器还是要重新生成页面。所以 pjax 只是假象,它做到的就只是用 javascript 重新装载要刷新的部分。没有实际用途。

to @bhuztez

  • 我里面写了, 会有部分内容不再渲染(layout 的部分), 节省了服务器的 loading。
  • 传统使用习惯完全没有部分页面刷新来得好, 用了部分页面刷新之后, 我无法容忍全页面刷新了。
  • css/js 还是会产生一次 http head 请求, 虽然这部分是 nginx 或者 apache 处理的。

理由我博客里面都写清楚了。 希望能够解决你的疑问。

#4 楼 @linjunhalida

部分不再渲染的内容,基本都是可以直接扔到 memcache 里的内容。

CSS/JS 不会产生 HTTP HEAD 请求,因为 Expire 直接设置成无限了。直接就在浏览器缓存里了。

试了下 pjax 好像没成功。。。没有后续研究鸟

试用过,觉得很不错,而且 form 的提交也可以 pjax,在 js 和 css 文件比较多的情况下,客户端相应会快很多,适合 modern browsers.

Cool github 代码浏览时就用的这个吧

通过 AJAX 刷新页面最大的好处是减少页面渲染的时间,比如网站用到了 jQuery,如果切换页面,那么每次打开新页面时,浏览器都必须重新解析和执行 jQuery 代码,而通过 AJAX 刷新可以避免这点。

Pajx 我觉得用来做产品原型不错,但实际用于产品还是太粗糙了。比如加载页面时不切换 title,这不论是对 seo 还是对微博分享都是很不友好的。

这就去学习学习

@bhuztez

  • 丢 memcache 是不错, 不过需要消耗一些流量。
  • 不会产生请求我没有想到。 的确是。

@zfben

  • 记得 pjax 是支持切换 title 的, 代码里面有。

@linjunhalida 楼主的链接貌似已经 404 了啊

个人感觉 pjax 是个不错的东东

vs full reload

  • 减少服务器端渲染模板的时间和工作量,使用 pjax 方式只需要重新渲染被 data-pjax-container 包含的部分即可,不必重新生成 layout 等部分
  • 提升用户体验,局部刷新 vs 整个页面刷新,这个不用多说了

vs Ajax

  • 基本上 0 成本的配置,代码非常少
  • 兼容性,如果浏览器支持 pjax 的话就使用 pjax,如果不支持或者超时的话,还是采用原来的 full reload 方式,不会破坏功能的完整性

但貌似灵活性不如 Ajax,所以它用于一般的页面渲染还不错

上面是使用 gem pjax_rails 得到的结论

感觉还是有很多局限,不是一个完整的解决方案。 只是一个比较快速的方法,我想叫它,偷懒的 ajax :)

其实 现在做 ajax 已经很简单了,似乎它的意义也变小了。

我也打算下一个项目用 PJAX。

封装了 ajax + pushState 的东东

需要 登录 后方可回复, 如果你还没有账号请 注册新账号