原创 PHP底層基本原理

基本原理 Zend/Opcode/Extensions PHP有兩大類模塊:Zend引擎、擴展層 1. Zend引擎將PHP源文件 解釋爲一系列操作碼(opcode), 然後循環 執行操作碼; 2. 擴展層是一組函數、類庫和流,PHP使用

原创 Mysql的order by和group by性能優化

一.提高order by 的速度: 1.查詢時使用order by 的列儘量使用索引,避免出現fileSort; 2.order by 時 select * 是一個大忌,只取query需要的字段,這點非常重要,在這裏影響的是: 當quer

原创 PHP-FPM與FastCGI,CGI有什麼關係?

1.CGI是什麼? 是爲了保證web server傳遞過來的數據是標準格式的,方便CGI程序的編寫者。 web server(比如說nginx)只是內容的分發者。比如,如果請求/index.html,那麼web server會去文件系統中

原创 阻塞模型與非阻塞模型

1.PHP-FPM是阻塞模型,假設你用 php-fpm,你的 php 程序中需要向外部提供接口請求。那麼每一個 Worker 進程在執行這些網絡 I/O 的時候,是不是都阻塞了?假設你的 php-fpm 最大進程數有 500 個,那麼同時

原创 Mysql優化之:group by、order by、distinct優化

1.order by優化 實現方式: 1. 根據索引字段排序,利用索引取出的數據已經是排好序的,直接返回給客戶端; 2. 沒有用到索引,將取出的數據進行一次排序操作後返回給客戶端。 EXPLAIN SELECT m.id,m.subje

原创 Linux單進程文件句柄數

  linux中單個進程最多允許打開的文件句柄數(包括socket連接數)是有限制的,當大於這個系統限制時,程序會拋出大量的無法打開文件的報錯。 查看的命令是: ulimit -a    查看系統的文件相關限制 其中open files表

原创 詳解IO多路複用中的select, poll, epoll

select, poll, epoll 都是I/O多路複用的具體的實現,這三個是不同時期先後順序出來的,也是爲了改進性能。 I/O多路複用這個概念被提出來以後, select是第一個實現 (1983 左右在BSD裏面實現的)。 1.sel

原创 什麼是Reactor模式,反應器模式?

1.用的場景:併發系統 常使用reactor模式,代替常用的多線程的處理方式,節省系統的資源,提高系統的吞吐量。 先介紹一下這種方式的優點,通過和常用的多線程方式比較一下,可能更好理解。 (1)舉個生活中的例子: 以一個餐飲爲例,每一個人

原创 CDN原理解析

首先,讓我們來看一下傳統的Internet網絡的基本結構和數據傳輸情況,如下圖所示。   Internet 網絡基本結構及數據傳輸方式 根據傳統的網絡結構,用戶的訪問流程基本如下: 1.用戶在自己的瀏覽器中輸入要訪問的網站的域名 2.瀏

原创 Nginx 多進程模型是如何實現高併發的?

先總結:nginx是異步非阻塞工作方式,平時設置nginx的worker進程數時,設置的和CPU核數相同比較合適。 我們平時在設置Nginx 的Worker進程數時,一般設置與CPU核數相同,這是爲什麼?爲什麼幾個進程就可以實現高併發呢?

原创 理解依賴注入和控制反轉

1.控制反轉(Inversion of Control,縮寫爲IoC) 是面向對象編程中的一種設計原則,可以用來減低計算機代碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫

原创 網站整合Ucenter詳細流程

  第一步:下載安裝UCenter,這裏就不詳細說了,網上很多教程   1.下載UCenter 下載地址:   2.安裝UCenter   第二步:打開下載UCenter文件夾內的advanced文件夾,這裏就是接口文件啦,裏面的doc

原创 php生成二維碼的三種方法

最簡單最實例的goolge開源方法 1.google開放api 代碼如下: $urlToEncode="http://www.helloweba.com"; generateQRfromGoogle($urlToEncode);

原创 HTTP、TCP、UDP、Socket關係詳解

TCP、UDP和HTTP關係是什麼?   1、TCP/IP是個協議組,可分爲三個層次:網絡層、傳輸層和應用層。在網絡層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。在傳輸層中有TCP協議與UDP協議。在應用層有

原创 遮罩層有滾動條時解決方法

在彈出層後面的 遮罩層,因爲有滾動條,導致滾動條下面不可視區域沒有遮罩層,解決方式是加的css。<script type="text/javascript"> //顯示灰色JS遮罩層 func