
1 jjplay 2015-07-26 19:04:53 +08:00 勤能补拙 |
2 tobyxdd 2015-07-26 19:08:50 +08:00 看是多高级的分页 |
3 ghostcat 2015-07-26 19:10:58 +08:00 我一般找现成的代码……读别人的代码学习 |
4 qwe321 2015-07-26 19:14:01 +08:00 我写的分页代码也是很鸡肋 |
5 qw7692336 2015-07-26 19:14:57 +08:00 via Android 框架自动完成的分页 |
6 luban 2015-07-26 19:16:27 +08:00 手两天写不好太正常 |
7 Wangxf 2015-07-26 19:17:25 +08:00 确实天赋太差,努力做一个好的码农吧,慢慢来吧,也许是某个环节点知识点没疏通 |
8 learnshare 2015-07-26 19:29:03 +08:00 多写多积累 |
9 Syec 2015-07-26 19:35:31 +08:00 多看看别人的代码 |
10 htfy96 2015-07-26 19:39:08 +08:00 到底是哪个分页…… |
11 br00k 2015-07-26 19:41:54 +08:00 多高级的分页? |
12 sneezry 2015-07-26 19:44:34 +08:00 via iPhone 一般的分页的套路基本是固定的,看看大家都是怎么写的记住就行了,遇到高级,谁都不可能写得顺风顺水的,别没事就质疑自己能力,这世界上的天才远没有你想的那么多,大牛也多是写的多了经历的多了。 |
13 likai 2015-07-26 19:50:39 +08:00 玩PHP我最怕的就是分页和时间转换了 |
14 anubiskong 2015-07-26 19:57:12 +08:00 小事情比你想的复杂很多. 不信你写个登陆注册 |
15 loading 2015-07-26 20:15:12 +08:00 via Android 分页不就是 sql 需要看下例子吗? |
16 darkmatter OP @tobyxdd 也就是一般的分页。 |
17 darkmatter OP @luban 我怎么觉得很不正常。 |
18 darkmatter OP @Wangxf 从别的行业转来,想做个程序员。 |
19 wohenyingyu01 2015-07-26 20:19:23 +08:00 我也是一个程序员,但是我听不懂什么叫分页 |
20 breeswish 2015-07-26 20:22:42 +08:00 pagination? paging? … 说来生成 pagination 的 上一页,下一页,第一页,最后一页,前几页,后几页…确实要写不少东西 |
22 lincanbin 2015-07-26 21:29:19 +08:00 @loading 我觉得这里的分页应该是指分页的导航输出。 https://github.com/lincanbin/Carbon-Forum/blob/master/common.php#L374 我这里写了一个,如果考虑的情况比较多,不是像V2EX这样简单的上一页下一页,写起来还是挺繁琐的。 |
23 laoyuan 2015-07-26 21:50:13 +08:00 分页我每隔一两年就重新写一次 |
25 yakczh 2015-07-26 21:53:39 +08:00 google的那种分页,就是当前页在中间的样式 |
26 gseven0312 2015-07-26 22:33:18 +08:00 别灰心,没有人能一步到位的,慢慢来 |
27 Tink PRO 嗯嗯,我也不会写,都是用框架自带的 |
29 yuanji 2015-07-26 22:44:44 +08:00 |
30 scourgen nbsp; 2015-07-26 22:46:06 +08:00 分页还真不是简单能写好的,简直是一个细思恐极的话题。 1.如何自动根据查询语句去生成一个 count sql,算出有多少条信息,需要分多少页? 2.有没有不用计算一共有多少条也能分页的办法? 3.如何保证「1」的语句在不同的情况下都能正常运行? 4.如果你用了 distinct 的话,如何保证效率? 5.如果查询语句里有 union 之类的操作的话,该怎么办? 6.如果信息刷新很频繁,如何解决「第x页的最后一条内容被顶到x+1页的第一条」这个问题? 7.如何在实现以上几点的情况下做cache? 8.如何在实现「7」的基础上尽量提高命中率? |
31 bombless 2015-07-26 23:03:26 +08:00 分页是有套路的,任何人熟悉一下都能写好,要想锻炼自己完全可以把精力放在更有创造力的事情上,分页的时候直接按照套路来就可以了。 |
32 gzxultra 2015-07-26 23:04:35 +08:00 我以为是内核kernel的分页。。。果然最近kernel源码看多了。。。被拖走 |
33 zjqzxc 2015-07-27 00:43:22 +08:00 @scourgen 貌似6的问题大多数人都避而不谈。。被顶到下一页第一个问题不大,一会儿工夫被顶到下一页最后一个这种情况应该就比较悲剧了。 |
35 msg7086 2015-07-27 08:22:01 +08:00 gem install will_paginate |
36 vikeria 2015-07-27 08:28:08 +08:00 via Android 喵的,我第一反应是操作系统内存管理的分页,我愣了一下,卧槽,我好像也没写过,当即伤感了一会…… |
37 Ouyangan 2015-07-27 09:32:32 +08:00 哈哈写了三天,能用了... |
38 cheng007 2015-07-27 09:33:22 +08:00 @vikeria 哈哈,我的第一感觉也是,操作系统的内存管理的分页,话说这玩意,虚拟内存地址到物理地址的映射 我也没写过,只看过 |
39 aivier 2015-07-27 09:40:50 +08:00 嗯,作为一个前端不会分页查询好像也没什么不对啊 =_= |
40 ZHenJ 2015-07-27 10:10:17 +08:00 我的分页是用地址栏参数导航的。。。比你更菜,放心 |
41 zhuangzhuang1988 2015-07-27 10:21:55 +08:00 这还要写?? 库里不是都提供了么??? |
42 server 2015-07-27 10:28:24 +08:00 10年 我的第一份工作 领导linux不会装 php(php5.2.x) iconv ,愣是让我把程序里的iconv 改成了mbstring, 这找谁说理去。 |
43 flydogs 2015-07-27 10:46:23 +08:00 分页很难的,要考虑sql的优化 最近就在烦这事 |
44 loading 2015-07-27 11:15:10 +08:00 via Android |
45 Felldeadbird 2015-07-27 11:50:22 +08:00 我也不会写分页。我也要看先别人的写法,才可以改造。楼主不要灰心。有些东西我们无法创造,但是我们可以站在巨人的肩膀上成功。 |
46 billwang 2015-07-27 13:37:06 +08:00 分页一般都是copy改,很多东西网上都有轮子了,不用自己造。 |
47 linxy 2015-07-27 13:45:40 +08:00 我认真的找出了自己写内核时关于分页一些笔记,翻出了自己的小内核代码… 写了几百字!! 看到有人说是网页的分页…… 又默默地删了…… |
49 caryxiao 2015-07-27 13:53:35 +08:00 多写写,多想想就熟了 |
50 raincious 2015-07-27 14:15:18 +08:00 @loading 所以当俺给自己的模板引擎加了个Pagination产生器之后,瞬间感觉生活美好了很多…… https://github.com/raincious/facula/blob/wip/src/Facula/Unit/Paging/Compiler/Operator/Pager.php#L250 虽然代码本身是烂的一塌糊涂 不过就算产生了Pagination Links,缓存仍然是一个问题,所以请教下 @scourgen,如何较好的处理分页内容的缓存(问题7)? |
53 fengyqf 2015-07-27 14:37:05 +08:00 找现成的代码直接用吧,码农不是经常自称“搬砖”吗,该搬砖的时候就得当搬运工。 |
54 v3exhao 2015-07-27 14:38:21 +08:00 参考别人的,多加练习 |
55 realpg PRO 分页的轮子造了不计其数个…… |
56 dreamtrail 2015-07-27 15:02:29 +08:00 分页本来就不容易写完美,所以我都是用现成的分页模块 |
58 ybh37 2015-07-27 16:53:30 +08:00 自己从前写到后就好了,后续不管用谁写的分页,都差不多…… |
59 vincenttone 2015-07-27 17:00:07 +08:00 学而不思或者思而不学,不仅仅是当不了程序员那么简单。 |
60 zouxcs 2015-07-27 18:02:13 +08:00 是内存的分页么 |
61 scourgen 2015-07-28 00:16:30 +08:00 既然大家有兴趣,就简单和大家说一下我的经验吧,但肯定不是完整的方案,因为每个case有很多需要注意的点和分支剧情,也要考虑到每个业务的具体场景,讲完整是不可能的。 @zjqzxc @TangMonk「6」这个问题可以用这个思路,比如内容是以时间排序的,那么就在每次查询的时候自动多带一个参数,也就是用户访问的时间点,并且在翻页的过程中记住这个时间点,在每页的查询语句里设置内容创建的时间要早于这个时间,这样用户不管翻多少页,由于有这个limit在,只要不删数据(即使删数据也可以用每页cache的方法,做到不影响其他页),总的结果集是固定的,所以每页的内容就是固定的。在用户重新进入第一页的时候,这个时间重新计算,这样就可以既不影响翻贴用户的阅读体验,又能够保证用户想看新内容的时候能够看的到。 当然如果你是做APP之类的瀑布流信息展现方式的话,就用Last_ID之类的方案好了,不过其实瀑布信息流也不应该叫做分页。 @raincious 「7」和「8」这两个问题和业务场景结合的很深,但总的来说是一个平衡问题,在以下两者之间取得一个平衡: 1.以每页为cache单位,这样内容一旦增加(例如新增了一条信息在第一页),那所有的cache都应该被清空重建。这个策略在数据刷新很频繁的时候效率最低,在数据变更不频繁的时候效率最高。 2.以每条内容为cache单位,这样一旦有新数据出现,不会有任何旧的cache被重建,只要每条数据不删不改,cache是可以一直用下去的,所以在数据刷新很频繁的时候效率较高,但这样cache会分布的很散,所以在数据刷新不频繁的时候效率会较低(分支剧情:如果你可以用redis的hmget的话当我没说)。 两者你都无法接受的话,就可以考虑结合他们的优势,去做group cache,比如每页20条数据,你每10条数据做一个cache,这样悲观情况下取3次就能拿到整页的内容,乐观情况下2次即可,具体group里放数据的数量要根据你的使用场景去订。分支剧情:但如果这样做的话,就要考虑如果数据删除的话,会造成cache不对齐,那这时候你就可以考虑在每个group里前后多加x条数据,这样即使数据有改动,只要不是太频繁,就能做到现有的cache的重复利用。不过这个分支剧情貌似走的人比较少,对逻辑的严密性也比较高,在此只是提一下就不展开了。 随便写写,一定有错,求别抬杠,求别黑,谢谢。 |
62 final0pro 2015-07-28 05:42:46 +08:00 real time pagination like facebook and twitter is difficult to implement. You can find more information here: http://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/ |