记录一次有关于实现新闻下一篇功能的代码优化
2016-11-13 21:03
399 查看
在web开发中,经常会有一个需求需要实现,那就是下一篇。比如,当我们阅读某一篇新闻时,一般在新闻详情页末尾会有,下一篇,标题是XXX。
然而在实现这个功能的时候,我虽然实现了,但是确实一种效率非常低的方法,幸好有经理帮我指出错误,并为我提供了解决方法。
话不多说,先附上我的烂代码:
//实现下一篇功能
$newslist = News::listNews('', 1, 99999999);
//---获取id数组
$newsidarr = array();
foreach ($newslist as $key => $value) {
$newsidarr[$key] = $value['id'];
}
//---获取下一篇id
$nextid = 0;
foreach ($newsidarr as $k => $v) {
if($id == $v){
if($k < (count($newsidarr)-1)){
$nextid = $newsidarr[$k + 1];
}
}
}
//---获取下一篇信息
if($nextid){
$nextinfo = News::getNews($nextid);
$next = '<a href="news_info.php?id='.$nextid.'">下一篇: '.$nextinfo["title"].'</a>';
}else{
$next = '<a href="javascript:;" style="background-color:#bbb;">已经是最后一篇了</a>';
}
这段代码虽然实现了功能,但是确实错误狠多。首先我在调用listNews方法的时候不应该用一串9来调取所有的新闻。因为还是存在多余这么多新闻的可能的。
第二个就是我的方法问题了。当我这样现获取所有的id做一个数组,然后跟当前id进行比对,获取下一篇新闻的id的方法是效率很低的,它不仅要去查一个表的所有数据获取id,还要把所有的id进行遍历再进行比对获取下一篇的id。当新闻很多的时候,这样的代码简直就是灾难。
优化方法:
因为新闻是按id排序的,所以我们可以写一个方法。将当前新闻id作为传入参数。然后select的时候查询比当前id大的id并加上limit 1,然后返回所查询到的id。这样便能完美的解决问题了。
然而在实现这个功能的时候,我虽然实现了,但是确实一种效率非常低的方法,幸好有经理帮我指出错误,并为我提供了解决方法。
话不多说,先附上我的烂代码:
//实现下一篇功能
$newslist = News::listNews('', 1, 99999999);
//---获取id数组
$newsidarr = array();
foreach ($newslist as $key => $value) {
$newsidarr[$key] = $value['id'];
}
//---获取下一篇id
$nextid = 0;
foreach ($newsidarr as $k => $v) {
if($id == $v){
if($k < (count($newsidarr)-1)){
$nextid = $newsidarr[$k + 1];
}
}
}
//---获取下一篇信息
if($nextid){
$nextinfo = News::getNews($nextid);
$next = '<a href="news_info.php?id='.$nextid.'">下一篇: '.$nextinfo["title"].'</a>';
}else{
$next = '<a href="javascript:;" style="background-color:#bbb;">已经是最后一篇了</a>';
}
这段代码虽然实现了功能,但是确实错误狠多。首先我在调用listNews方法的时候不应该用一串9来调取所有的新闻。因为还是存在多余这么多新闻的可能的。
第二个就是我的方法问题了。当我这样现获取所有的id做一个数组,然后跟当前id进行比对,获取下一篇新闻的id的方法是效率很低的,它不仅要去查一个表的所有数据获取id,还要把所有的id进行遍历再进行比对获取下一篇的id。当新闻很多的时候,这样的代码简直就是灾难。
优化方法:
因为新闻是按id排序的,所以我们可以写一个方法。将当前新闻id作为传入参数。然后select的时候查询比当前id大的id并加上limit 1,然后返回所查询到的id。这样便能完美的解决问题了。
相关文章推荐
- 关于“假导出Excel功能实现,按CSV格式快速导出功能代码参考”的一篇回复
- PHP开发中关于分页功能实现的代码实例一则
- 一篇关于如何优化JAVA代码及提高效率的文章
- MyFlag Step12:后台代码编写、客户端具体功能实现与界面优化
- PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(二)
- myflag step 13:后台代码编写、客户端具体功能实现与界面优化
- 转载的一篇关于如何优化JAVA代码及提高效率的文章
- 记录一次bug解决过程:else未补全导致数据泄露和代码优化
- QT实现记录上一次用户名和密码功能
- 第六周(1) 后台代码编写与客户端具体功能实现以及界面优化
- 收藏一篇关于 用两个栈实现一个队列功能的帖子
- Python实现日志自动记录功能(一个思路代码,详细可以自己扩展)
- 关于AVL实现的代码记录
- JAVA_WEB项目之Lucene检索框架实现增删查改的代码优化以及分页功能实现
- MyFlag Step11:后台代码编写、客户端具体功能实现与界面优化
- 转载的一篇关于如何优化JAVA代码及提高效率的文章
- 关于Android用代码实现开启Wifi功能
- 关于SalesLine上Inquiries->Explosion 功能的代码一步实现
- PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(一)
- 第七周(1) 后台代码编写、客户端具体功能实现与界面优化