平時寫代碼大多數都是一些小模塊,不多會一我的完整地寫一個大型的網站。nginx
我獨自寫過幾個網站,都沒發佈,想一想歸結幾個問題,要麼界面太醜,要麼邏輯細節漏洞太多,要麼沒有實際的使用價值。web
完整地一個大型網站很複雜,要作好前端的效果,業務邏輯,cdn靜態文件,服務器集羣。數據庫
每個我都嘗試作過,以前在一篇《分佈式服務器集羣架構方案思考》中分析過,關於網站架構的模型,也作過幾篇關於nginx服務器集羣處理的文章。後端
這裏作個小總結,分享下最近開發過程當中一些零零碎碎的蛋疼東西。瀏覽器
前端的第一感受要代碼簡約,數據清晰。服務器
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 ""; }
1.關於模型與架構方式,能夠用MVC,MVP,MVVC等。
MVC做爲快速,穩健開發是很是適合的,分層明顯,結果清晰,層級與層級之間互爲類,層級之間傳輸經過array形式。
視圖(View):用戶界面。
控制器(Controller):業務邏輯
模型(Model):數據保存
2.web中用戶文件權限模型設計
這是我最近在開發時候碰到的問題,如何去處理不一樣用戶之間的權限等級,後來就想到了Linux的權限管理,先腦補下Linux權限表:
1,第一段:例子中字母「d」,表示文件所在目錄
2,第二段:例子中字符串「rwx」,表示文件全部者對此文件的操做權限
3,第三段,例子中字符串「r-x」,表示文件全部者所在組對些文件的操做權限
4,第四段,例子中字符串「r-x」,表示除二、3兩種外的任何人對此文件的操做權限
任何組合數都能從下面的表中獲得結果:
回到問題中,我在數據庫中儲存了文件權限數字,我再應用時候要轉化出來,轉成字母形式,而後審查權限夠不夠。
首先,這裏不一樣,第一段是,文件全部者對此文件的操做權限;第二段是,文件被分享者對此文件的操做權限;第三段是普通參觀者對文件操做權限。
那麼,我選權限,先分割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); } }
2015-05-12 1:29:20