我相信有許多 Web 應用程式開發者與我類似,常常想辦法預存一些經常存取、變動頻率不高的資料,提昇程式效能。
透過這類的資料預存,可以降低資料庫存取頻率,並減少 server 的 file I/O 次數。
在 .Net 與 JAVA 的領域,程式語言都提供了相關的物件/變數,讓 Web 應用程式儲存資料,而該應用程式的所有連線使用者皆可以存取。
.Net 用的是 System.Web.Caching.Cache;JAVA Servlet 是 javax.servlet.ServletContext,而 JSP 的 Application 物件便是其實作。
但在常見的環境(eg. Apache HTTPD w/MPM prefork + mod_php),也沒有額外的模組(eg. APC、memcache),PHP 難以提供這種物件/變數讓人使用,開發者只能硬幹。 :p
因為 COOKIE 的 size 有限,在 PHP 大概只能用 SESSION 硬幹。
我是這樣做的…
存入/更新:
function writeAppCache( $app_name , $data ) {
// 紀錄原本的 session ID
$orig_session_id = session_id();
// 如果已有 session 存在
if ( !empty($orig_session_id) ) {
// 存放原本的 session 資料
session_write_close();
// 切換到自己定義的 application session,存放/更新資料
session_id($app_name);
$_SESSION = $data;
session_write_close();
// 切換回原本的 session
session_id($orig_session_id);
session_start();
}
}
讀取:
function readAppCache( $app_name ) {
$data = null;
// 紀錄原本的 session ID
$orig_session_id = session_id();
// 如果已有 session 存在
if ( !empty($orig_session_id) ) {
// 存放原本的 session 資料
session_write_close();
// 切換到自己定義的 application session,讀取資料
session_id($app_name);
$data = $_SESSION;
session_write_close();
// 切換回原本的 session
session_id($orig_session_id);
session_start();
}
return $data;
}
因為所有程式都能存取 session 內的資料,不建議在 session 內儲存私密/機密資料。
若要避免資料不小心被同一台 server 的其他程式,可以加上 session_name() 作區隔。
3 月 4 2014
Sencha Touch 使用心得
這陣子在進行一個 mobile web 開發專案;我們對 Ext JS 還算熟悉,故選擇採用同公司的產品:Sencha Touch。
我們沒使用過,決定先進行 prototyping,看能挖出多少可用、好用的元件。
目前第一版趨近完成,我先寫篇心得分享,順道幫自己留個筆記;請路過看到的前輩、高手們不吝給予指教啦~
目前是 2014 年 3 月初,已釋出的 Sencha Touch 最新 GPL 版本是 2.3.1,但堪用的是 2.1.1。
Sencha Touch 僅支援 WebKit based 網頁瀏覽器,大致上就是這些。
More
分享此文:
By Joe Horn • Javascript 0 • Tags: Ext.field.DatePicker, Ext.MessageBox, Ext.Msg, Sencha Touch