讨论:几个效率等问题和众兄弟探讨

countstars 2004-01-14 04:04:59
1. 使用include还是function效率高?

将公用HTML代码分多个文件进行include好还是function一下return $str好?include可能include好几

次,而function只需要include一次,初始化一次,虽然要执行很多次。不过我还是不知道哪个效率高点




2. 单文件读取好还是分文件读取好?

我习惯,而且很喜欢使用单个index.php文件来包含,如:

<?php

//index.php
require "header.php";
case aa:
require "xx.php";
break;
case bb:
require "xxx.php";
break;

......

default require "xxxx.php";
require "footer.php";

?>

这样的好处是文件重用性非常好,感觉很好控制,但是每次载入页面都是读取index.php文件,虽然可能

读取的内容都不多,不过要是10000人同时访问,那么执行效率如何?

另一种方法是分文件。比如:

<?php

//index.php
require "header.php";
require "main.php";
require "footer.php";

?>

<?php

//login.php
require "header.php";
require "login_main.php";
require "footer.php";

?>

.........


这样的分散文件来组成整个系统,但是这样就多了好多require等重复代码。显然要是10000人同时访问

这些文件,其实还是10000人同时require一次header.php和footer.php,不过感觉上比单个index.php分

散,我现在还是不知道哪个效率高点,哪个更好一点。


3. 权限问题。

目前不知道有什么好的权限控制方法,我所知道的是“组”的概念和“权限”概念。
我看了一下FB论坛的数据库设计,发现有一张“用户组”的表和一张“权限表”,两张表内容基本相同

,请问这样做的好处是什么?为什么还要开辟另外一张权限表?这两张用途上有什么不同?

附两张表:

CREATE TABLE fb_permissions (
permissionid int(4) unsigned NOT NULL default '0',
userid int(10) unsigned NOT NULL default '0',
usergroupid int(10) unsigned NOT NULL default '0',
forumid int(3) NOT NULL default '0',
canview enum('y','n') NOT NULL default 'y',
cancreatetopic enum('y','n','c') NOT NULL default 'y',
canpost enum('y','n') NOT NULL default 'y',
cancreatepoll enum('y','n') NOT NULL default 'y',
canupload enum('y','n') NOT NULL default 'y',
canvote enum('y','n') NOT NULL default 'y',
canmovetopic enum('y','n') NOT NULL default 'y',
canlock enum('y','n') NOT NULL default 'y',
candeletetopic enum('y','n') NOT NULL default 'y',
canedittopic enum('y','n') NOT NULL default 'y',
caneditpost enum('y','n') NOT NULL default 'y',
candeletepost enum('y','n') NOT NULL default 'y',
canrate enum('y','n') NOT NULL default 'y',
candistillate enum('y','n') NOT NULL default 'y',
canannounce enum('y','n') NOT NULL default 'y',
cansetpermissions enum('y','n') NOT NULL default 'y',
ismoderator enum('y','n') NOT NULL default 'y',
PRIMARY KEY (permissionid)
) TYPE=MyISAM;

CREATE TABLE fb_usergroup (
usergroupid int(3) unsigned NOT NULL default '0',
groupname varchar(20) NOT NULL default '',
title varchar(255) NOT NULL default '',
canview enum('y','n') NOT NULL default 'y',
cancreatetopic enum('y','n','c') NOT NULL default 'y',
canpost enum('y','n') NOT NULL default 'y',
cancreatepoll enum('y','n') NOT NULL default 'y',
canupload enum('y','n') NOT NULL default 'y',
canvote enum('y','n') NOT NULL default 'y',
canmovetopic enum('y','n') NOT NULL default 'n',
canlock enum('y','n') NOT NULL default 'n',
candeletetopic enum('y','n') NOT NULL default 'n',
canedittopic enum('y','n') NOT NULL default 'n',
caneditpost enum('y','n') NOT NULL default 'n',
candeletepost enum('y','n') NOT NULL default 'n',
canrate enum('y','n') NOT NULL default 'n',
candistillate enum('y','n') NOT NULL default 'n',
caneditprofile enum('y','n') NOT NULL default 'n',
candeleteuser enum('y','n') NOT NULL default 'n',
canannounce enum('y','n') NOT NULL default 'n',
cansetpermissions enum('y','n') NOT NULL default 'n',
canadmin enum('y','n') NOT NULL default 'n',
PRIMARY KEY (usergroupid)
) TYPE=MyISAM;


4. 使用数据库效率高还是使用文本读取效率高。

比如论坛分类,是直接放在文件里好,还是放在数据库里效率高?如果分类比较固定,而不是随时修改

和添加,是不是文件比较好?比如:

<?php

//forum.php
$ForumClassId1 = 1;
$ForumClassOrder1 = 2;
$ForumClassName1 = "测试分类一";
$ForumClassAdmin1 = "会员一";
$ForumClassInfo1 = "分类说明一";

$ForumClassId2 = 2;
$ForumClassOrder2 = 1;
$ForumClassName2 = "测试分类二";
$ClassAdmin2 = "会员二";
$ForumClassInfo2 = "分类说明二";
//............

?>

数据库的好处是添加修改比较方便,但是要是不是频繁修改和添加呢?


暂时就这些,呵呵,我写的代码不多,经验还很不足,请各位兄弟多指点。
...全文
70 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pwtitle 2004-01-14
  • 打赏
  • 举报
回复
1、function在调用的时候每次都要在内存中copy一份出来。效率不好

2、为防止多次include和require,一定要使用 include_once 和require_once。强烈建议忘记 include和 require 我一般的用法是在/下写个config.php,里面define变量。require_once("files")....。然后调用。这样方便的多。即使损失一点效率也是值的得。

3、文件系统的效率比数据库系统要好,但这局限于系统的i/o,象你这种情况当然使用文件系统。

4、权限设计中主要是讲究
a、用户权限
b、组权限
c、系统权限
三者相加就是用户实际权限。
最近我会写一篇我的权限设计方法,理论性可能不高,但绝对实用,也适合模块化设计。
mikespook 2004-01-14
  • 打赏
  • 举报
回复
如果你看过WIN或UNIX的权限管理,你就会明白了~~~

用户隶属于某个组,他就拥有某个组的权限。但是这并不够,或者说不够灵活~~

那么它自己还有一些权限可以灵活设置~~~~

部分原因还因为某些权限属于系统权限,而某些权限属于私有权限~~~~~

比如MYSQL中,你在USER表上可是设置系统权限~~~在db表上可以设置用户对某一数据库的权限~~
fzel_net 2004-01-14
  • 打赏
  • 举报
回复
1 如果你的那个函数经常需要用到,且数目不多的可以考虑做成 function ,如果function多,建议放在一个
文件中,然后include 到需要用的文件中。

2 个人喜欢用 单个文件形式


3 。。。 。。。


4。 如果数据量小,可以考虑用文本文件。。。如果太复杂 ,数据库当然是最佳的选择
Cain 2004-01-14
  • 打赏
  • 举报
回复
up 对于第二点我非常赞同,因为我一直是这么干的,至于效率我自己也不太清楚,帮你顶一下,顺便也学习学习,还要高手们多多指教啊.
xuzuning 2004-01-14
  • 打赏
  • 举报
回复
要是不是频繁修改和添加,还是用文件较好,至少没有了操作数据库的时间。
你的forum.php的方式当然是可以的,但存在占用较多的有明显示意的变量。并且这些变量若用于函数或类的时候,声明为全局变量较为烦琐
所以也可按ini文件格式书写,把forum.php改写为
;<?
[ForumClass1]
Id = 1
Order = 2
Name = "测试分类一"
Admin = "会员一"
Info = "分类说明一"

[ForumClass2]
Id = 2
Order = 1
Name = "测试分类二"
Admin = "会员二"
Info = "分类说明二"
;?>

程序中
$ar = parse_ini_file("forum.php",true);
就可得到数组
Array
(
[ForumClass1] => Array
(
[Id] => 1
[Order] => 2
[Name] => 测试分类一
[Admin] => 会员一
[Info] => 分类说明一
)

[ForumClass2] => Array
(
[Id] => 2
[Order] => 1
[Name] => 测试分类二
[Admin] => 会员二
[Info] => 分类说明二
)

)
用起来是否方便些呢?
lsq004 2004-01-14
  • 打赏
  • 举报
回复
http://lsq004.myrice.com
xinchangpeng 2004-01-14
  • 打赏
  • 举报
回复
都查不多吧
帮你up
countstars 2004-01-14
  • 打赏
  • 举报
回复
多谢唠叨指点,还是手册来的全面啊,以前从来没看过这个函数。
关于FB的两张表,我已经知道区别了,权限表用于具体的对象是用户在某个子系统的权限,而用户组用于的具体对象是用户本身在整个系统上的权限。应该是组的范围比权限大。

不过还是不能对比单文件和多文件哪个效率高,忘了看看 php.net 怎么架构的了。
对于function和include,可能分离HTML代码更适合于使用include
mikespook 2004-01-14
  • 打赏
  • 举报
回复
“最近我会写一篇我的权限设计方法,理论性可能不高,但绝对实用,也适合模块化设计。


期待~~~~
pwtitle 2004-01-14
  • 打赏
  • 举报
回复
系统权限即我所谓角色权限。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧