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 1
一般的分页的套路基本是固定的,看看大家都是怎么写的记住就行了,遇到高级,谁都不可能写得顺风顺水的,别没事就质疑自己能力,这世界上的天才远没有你想的那么多,大牛也多是写的多了经历的多了。
|
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 1
别灰心,没有人能一步到位的,慢慢来
|
27
Tink 2015-07-26 22:34:05 +08:00
嗯嗯,我也不会写,都是用框架自带的
|
29
jyjmrlk 2015-07-26 22:44:44 +08:00
|
30
scourgen 2015-07-26 22:46:06 +08:00 7
分页还真不是简单能写好的,简直是一个细思恐极的话题。
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 1
分页是有套路的,任何人熟悉一下都能写好,要想锻炼自己完全可以把精力放在更有创造力的事情上,分页的时候直接按照套路来就可以了。
|
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 1
我也不会写分页。我也要看先别人的写法,才可以改造。楼主不要灰心。有些东西我们无法创造,但是我们可以站在巨人的肩膀上成功。
|
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 2015-07-27 14:57:18 +08:00
分页的轮子造了不计其数个……
|
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 2
既然大家有兴趣,就简单和大家说一下我的经验吧,但肯定不是完整的方案,因为每个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/ |