博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈web开发
阅读量:6418 次
发布时间:2019-06-23

本文共 4261 字,大约阅读时间需要 14 分钟。

web


0x01.About

平时写代码大多数都是一些小模块,很少会一个人完整地写一个大型的网站。

我独自写过几个网站,都没发布,想想归结几个问题,要么界面太丑,要么逻辑细节漏洞太多,要么没有实际的使用价值。

完整地一个大型网站很复杂,要做好前端的效果,业务逻辑,cdn静态文件,服务器集群。

每一个我都尝试做过,之前在一篇中分析过,关于网站架构的模型,也做过几篇关于nginx服务器集群处理的文章。

这里做个小总结,分享下最近开发过程中一些零零碎碎的蛋疼东西。


0x02.前端说起

前端的第一感觉要代码简约,数据清晰。

1.命名简约,

大小写区分,变量函数区分,后来我写代码,就统一将变量写成小写+下划线,函数写成首字母大写,函数统一同一栏花括号。

2.关于闭包

简约就不得不说起闭包问题,闭包显然对于多人开发很好用,这也体现了js的灵活性。

个人习惯是写一个base的函数库,然后每个页面需求写不同的js库。

(function(){    //main js    function index(){        var that = this;        this.fun1 = function(){};        this.fun2 = function(){};        this.fun3 = function(){};    }    window.index = index;//这样的话,外界浏览器就能访问到闭包内部了。})();

这是一种方式,还可以用个简单地方法直接写在一个函数内部。

function index(){    this.fun1 = function(){}    return this;}

类似MVC思想,可以把js分成:base层,common层,page层。

base层:主要兼容一些浏览器特性,比较底层,类似mvc中的m层,封装不同浏览器特性公common层调用。

common层:主要集成化插件,实现功能供page调用,mvc中典型的c层,控制页面的主体。

page:其实我们平时用的插件都在用page层多,插件都是封装了base和common层。

3.关于异步与同步

这是我这几天碰到的问题,关于异步与同步转化问题。f1()与f2()

  function f1(callback){    setTimeout(function () {      // f1的任务代码      callback();    }, 1000);  }

如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数。f1(f2)

4.下面是每次都会用到的代码片段

function SetCookie(name,value,expiredays){    var exdate=new Date()    exdate.setDate(exdate.getDate()+expiredays)    document.cookie=name+ "=" +escape(value)+    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())}function GetCookie(c_name){    if (document.cookie.length>0){    c_start=document.cookie.indexOf(c_name + "=");    if (c_start!=-1){        c_start=c_start + c_name.length+1        c_end=document.cookie.indexOf(";",c_start)        if (c_end==-1) c_end=document.cookie.length            return unescape(document.cookie.substring(c_start,c_end));        }    }    return "";}


0x03.关于后端代码

1.关于模型与架构方式,可以用MVC,MVP,MVVC等。

MVC作为快速,稳健开发是非常适合的,分层明显,结果清晰,层级与层级之间互为类,层级之间传输通过array形式。

  • 视图(View):用户界面。

  • 控制器(Controller):业务逻辑

  • 模型(Model):数据保存

MVC架构

2.web中用户文件权限模型设计

这是我最近在开发时候碰到的问题,如何去处理不同用户之间的权限等级,后来就想到了Linux的权限管理,先脑补下Linux权限表:

  • Linux字母权限中,

1,第一段:例子中字母“d”,表示文件所在目录

2,第二段:例子中字符串“rwx”,表示文件所有者对此文件的操作权限

3,第三段,例子中字符串“r-x”,表示文件所有者所在组对些文件的操作权限

4,第四段,例子中字符串“r-x”,表示除2、3两种外的任何人对此文件的操作权限

  • Linux里面数字权限中,r(read)->4,w(write)->2,x(execute)->1

任何组合数都能从下面的表中得到结果:

用户权限

回到问题中,我在数据库中储存了文件权限数字,我再应用时候要转化出来,转成字母形式,然后审查权限够不够。

首先,这里不同,第一段是,文件所有者对此文件的操作权限;第二段是,文件被分享者对此文件的操作权限;第三段是普通参观者对文件操作权限。

那么,我选权限,先分割766中,用户所在第几位。

接着将第几位,数字表与字母表转化,最后分析权限够不够。

伪代码如下:

$competence = 数字权限;if(query->row_num()!=0){    $res = str_split($competence,1);            switch($type){        case 'admin':            return $res[0];            break;        case 'share':            return $res[1];            break;        case 'guest':            return $res[2];            break;        default:            return $res[2];            break;    }}

接着确认用户权限够不够:

function CheckCompetence($expected, $input=000){    $res = "---";    preg_match("/r/i", $expected, $matches);    if($matches){//read         if($input==7 || $input==6 || $input==5 || $input==4) $res[0]="r";        else return false;    }    preg_match("/w/i", $expected, $matches);    if($matches){//write         if($input==7 || $input==6 || $input==3 || $input==2) $res[1]="w";        else return false;    }    preg_match("/x/i", $expected, $matches);    if($matches){//exec        if($input==7 || $input==5 || $input==3 || $input==1) $res[2]="x";        else return false;    }    return $res;}

期望的权限expected为字母,输入权限为input,如果用户权限不足,返回false。

通信传输常用的base加密代码片段

class base{    //private $string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-+*#@";    private $string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    private $base = 62;    public function base62_encode($str) {        $out = '';        for($t=floor(log10($str)/log10( $this->base )); $t>=0; $t--) {            $a = floor($str / pow( $this->base, $t));            $out = $out.substr($this->string, $a, 1);            $str = $str - ($a * pow( $this->base, $t));        }           return $out;    }    public function base62_decode($str) {        $out = 0;        $len = strlen($str) - 1;        for($t=0; $t<=$len; $t++) {            $out = $out + strpos($this->string, substr($str, $t, 1)) * pow( $this->base, $len - $t);        }         return substr(sprintf("%f", $out), 0, -7);    } }


本文出自 ,转载请注明出处:

by 小草

2015-05-12 1:29:20

你可能感兴趣的文章
WinAPI: waveInGetErrorText - 根据错误号得到错误描述
查看>>
java的垃圾收集机制
查看>>
haproxy启动故障:Starting proxy:cannot bind socke
查看>>
使用JavaScript修改组件中onclick事件所执行的方法
查看>>
MusicXML 3.0 (10) - 换行、换页
查看>>
chpasswd
查看>>
小型网络拓扑配置
查看>>
UILabel和UITextView行间距
查看>>
缓存更新逻辑思考
查看>>
综合jQuery在表单中的应用
查看>>
slatstack 安装 zabbix_agent
查看>>
参数化查询为什么能够防止SQL注入
查看>>
Ansible之YMAL语法介绍以及playbook详解
查看>>
java XML
查看>>
逆天的crm营业厅
查看>>
GCC的源码方式安装
查看>>
解决用Android Studio开发项目如何放置assets文件夹
查看>>
无损压缩 vs 有损压缩 vs 损多少
查看>>
c++11中auto&&是什么意思?
查看>>
文件和目录属性
查看>>