淺談web開發

http://homeway.me/前端


web



0x01.About

平時寫代碼大多數都是一些小模塊,不多會一我的完整地寫一個大型的網站。nginx

我獨自寫過幾個網站,都沒發佈,想一想歸結幾個問題,要麼界面太醜,要麼邏輯細節漏洞太多,要麼沒有實際的使用價值。web

完整地一個大型網站很複雜,要作好前端的效果,業務邏輯,cdn靜態文件,服務器集羣。數據庫

每個我都嘗試作過,以前在一篇《分佈式服務器集羣架構方案思考》中分析過,關於網站架構的模型,也作過幾篇關於nginx服務器集羣處理的文章。後端

這裏作個小總結,分享下最近開發過程當中一些零零碎碎的蛋疼東西。瀏覽器



0x02.前端提及

前端的第一感受要代碼簡約,數據清晰。服務器

1.命名簡約,《Google開源項目風格指南》cookie

大小寫區分,變量函數區分,後來我寫代碼,就統一將變量寫成小寫+下劃線,函數寫成首字母大寫,函數統一同一欄花括號。閉包

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」,表示除二、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);
    } 
}




本文出自 夏日小草,轉載請註明出處: http://homeway.me/2015/05/12/think-about-web-develop/

by 小草

2015-05-12 1:29:20

相關文章
相關標籤/搜索