posts - 38, comments - 2, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2010年11月24日

          有人在Stack Overflow上 發問,動手開發網站之前,需要知道哪些事情? 不出意料地,他得到了一大堆回答。通常情況下,你需要把所有人的發言從頭到尾讀一遍。但是,Stack Overflow有一個很貼心的設計,它允許在問題下方開設一個wiki區,讓所有人共同編輯一個最佳答案。于是,就有了下面這篇文章,一共總結出六個方 面共計62條"網站開發須知"。 我發現,這種概述性的問題,最適合這種集合群智、頭腦風暴式的回答方式了。這也是我第一次覺得,Stack Overflow做到了Wikipedia做不到的事。(難怪它最近擠進了全美前400大網站。)

          在我的印象中,關于網站開發,這樣全面的概述性文章非常少見,因此也就非常有用。大家不妨看看,62件事情中你做到了多少?

          一、界面和用戶體驗(Interface and User Experience)

          1.1

          知道各大瀏覽器執行Web標準的情況,保證你的站點在主要瀏覽器上都能正常運行。你至少要測試以下引擎:Gecko(用于Firefox)、Webkit(用于Safari、Chrome和一些手機瀏覽器)、IE(你可以利用微軟發布的Application Compatibility VPC Images進行測試)和Opera。同時,不同的操作系統,可能也會影響瀏覽器如何呈現你的網站。

          1.2

          除了瀏覽器,網站還有其他使用方式:手機、屏幕朗讀器、搜索引擎等等。你應該知道在這些情況下,你的網站的運行狀況。MobiForge提供了手機網站開發的一些相關知識。

          1.3

          知道如何在基本不影響用戶使用的情況下升級網站。通常來說,你必須有版本控制系統(CVS、Subversion、Git等等)和數據備份機制(backup)。

          1.4

          不要讓用戶看到那些不友好的出錯提示。

          1.5

          不要直接顯示用戶的Email地址,至少不要用純文本顯示。

          1.6

          為你的網站設置一些合理的使用限制,一旦超過門檻值,就自動停止服務。(這也與網站安全相關。)

          1.7

          知道如何實現網頁的漸進式增強(progressive enhancement)。

          1.8

          用戶發出POST請求后,總是將其重導向(redirect)至另外一個網頁。

          1.9

          不要忘記網站的可訪問性(accessibility,即殘疾人如何使用網站)。對于美國網站來說,有時這是法定要求。WAI-ARIA有一些這方面很好的參考資料。

          二、安全性(Security

          2.1

          閱讀《OWASP開發指南》,它提供了全面的網站安全指導。

          2.2

          了解SQL注入(SQL injection)及其預防方法。

          2.3

          永遠不要信任用戶提交的數據(cookie也是用戶端提交的?。?。

          2.4

          不要明文(plain-text)儲存用戶的密碼,要hash處理后再儲存。

          2.5

          不要對你的用戶認證系統太自信,它可能很容易就被攻破,而你事先根本沒意識到存在相關漏洞。

          2.6

          了解如何處理信用卡

          2.7

          在登錄頁面及其他處理敏感信息的頁面,使用SSL/HTTPS。

          2.8

          知道如何對付session劫持(session hijacking)。

          2.9

          避免"
          2.10

          避免"

          2.11

          及時打上補丁,讓你的系統始終跟上最新版本。

          2.12

          確認你的數據庫連接信息的安全性。

          2.13

          跟蹤攻擊技術的最新發展,以及你使用的平臺的最新安全漏洞。

          2.14

          閱讀Google的
          《瀏覽器安全手冊》(Browser Security Handbook)。

          2.15

          閱讀《網絡軟件的黑客手冊》(The Web Application Hackers Handbook)。

          三、性能(Performance)

          3.1

          只要有可能,就使用緩存(caching)。正確理解和使用HTTP cachingHTML5離線儲存

          3.2

          優化圖片。不要把一個20KB的圖片文件,作為重復出現的網頁背景圖案。

          3.3

          學習如何用gzip/deflate壓縮內容(deflate方式更可取)。

          3.4

          將多個樣式表文件或腳本文件,合為一個文件,這樣可以減少瀏覽器的http請求數,以及減小gzip壓縮后的文件總體積。

          3.5

          瀏覽Yahoo的Exceptional Performance網站,里面有大量提升前端性能的優秀建議,還有他們的YSlow工具。Google的page speed則是另一個用來分析網頁性能的工具。兩者都要求安裝Firebug。

          3.6

          如果你的網頁用到大量的小體積圖片(比如工具欄),就應該使用CSS Image Sprite,目的是減少http請求數。

          3.7

          大流量的網站應該考慮將網頁對象分散在多個域名(split components across domains)。

          3.8

          靜態內容(比如圖片、CSS、JavaScript、以及其他cookie無關的網頁內容)都應該放在一個
          3.9

          將瀏覽器完成網頁渲染所需要的http請求數最小化。

          3.10

          使用Google的
          Closure Compiler壓縮JavaScript文件,YUI Compressor亦可。

          3.11

          確保網站根目錄下有favicon.ico文件,因為即使網頁中根本不包括這個文件,瀏覽器也會自動發出對它的請求。所以如果這個文件不存在,就會產生大量的404錯誤,消耗光你的服務器的帶寬。

          四、搜索引擎優化(Search Engine Optimization,SEO)

          4.1

          使用"搜索引擎友好"的URL形式,比如example.com/pages/45-article-title,而不是example.com/index.php?page=45。

          4.2

          不要使用"點擊這里"之類的超級鏈接,因為這樣等于浪費了一個SEO機會,而且降低了"屏幕朗讀器"(screen reader)的使用效果。

          4.3

          創建一個XML sitemap文件,它的缺省位置一般是/sitemap.xml(即放在網站根目錄下)。

          4.4

          當你有多個URL指向同一個內容時,在網頁代碼中使用<link rel="canonical" ... />

          4.5

          使用Google的Webmaster Tools和Yahoo的Site Explorer。

          4.6

          從一開始就使用Google Analytics(或者開源的訪問量分析工具Piwik)。

          4.7

          知道robots.txt的作用,以及搜索引擎蜘蛛的工作原理。

          4.8

          將www.example.com的訪問請求導向example.com(使用301 Moved Permanently重定向),或者采用相反的做法,目的是防止Google把它們當做兩個網站,分開計算排名。

          4.9

          知道存在著惡意或行為不正當的網絡蜘蛛。

          4.10

          如果你的網站有非文本的內容(比如視頻、音頻等等),你應該參考Google的sitemap擴展協議

          五、技術(Technology)

          5.1

          理解
          5.2

          確保你的
          XHTML/HTMLCSS符合W3C標準,使得它們能夠通過
          5.3

          理解瀏覽器如何處理JavaScript腳本。

          5.4

          理解網頁上的JavaScript文件、樣式表文件和其他資源是如何裝載及運行的,考慮它們對頁面性能有何影響。在某些情況下,可能應該將腳本文件
          放置在網頁的尾部。

          5.5

          理解JavaScript沙箱(Javascript sandbox)的工作原理,尤其是如果你打算使用iframe。

          5.6

          知道JavaScript可能無法使用或被禁用,以及Ajax并不是一定會運行。記住,"不允許腳本運行"(NoScript)正在某些用戶中變得流行,手機瀏覽器對腳本的支持千差萬別,而Google索引網頁時不運行大部分的腳本文件。

          5.7

          了解301重定向和302重定向之間的區別(這也是一個SEO相關問題)。

          5.8

          盡可能多得了解你的部署平臺(deployment platform)。

          5.9

          考慮使用樣式表重置(Reset Style Sheet)。

          5.10

          考慮使用JavaScript框架(比如jQueryMooToolsPrototype),它們可以使你不用考慮瀏覽器之間的差異。

          六、解決bug

          6.1

          理解程序員20%的時間用于編碼,80%的時間用于維護,根據這一點相應安排時間。

          6.2

          建立一個有效的錯誤報告機制。

          6.3

          建立某些途徑或系統,讓用戶可以與你接觸,向你提出建議和批評。

          6.4

          為將來的維護和客服人員撰寫文檔,解釋清楚系統是怎么運行的。

          6.5

          經常備份?。ú⑶掖_保這些備份是有效的。)除了備份機制,你還必須有一個恢復機制。

          6.6

          使用某種版本控制系統儲存你的文件,比如SubversionGit。

          6.7

          不要忘記做單元測試(Unit Testing),Selenium之類的框架會對你有用。


          posted @ 2010-11-26 17:52 squirrel 閱讀(238) | 評論 (0)編輯 收藏

          iBatis解決sql注入

          (1) ibatis xml配置:下面的寫法只是簡單的轉義 name like '%$name$%'

          (2) 這時會導致sql注入問題,比如參數name傳進一個單引號“'”,生成的sql語句會是:name like '%'%'

          (3) 解決方法是利用字符串連接的方式來構成sql語句 name like '%'||'#name#'||'%'

          (4) 這樣參數都會經過預編譯,就不會發生sql注入問題了。

          (5) #與$區別:

          #xxx# 代表xxx是屬性值,map里面的key或者是你的pojo對象里面的屬性, ibatis會自動在它的外面加上引號,表現在sql語句是這樣的 where xxx = 'xxx' ;

          $xxx$ 則是把xxx作為字符串拼接到你的sql語句中, 比如 order by topicId , 語句這樣寫 ... order by #xxx# ibatis 就會把他翻譯成 order by 'topicId' (這樣就會報錯) 語句這樣寫 ... order by $xxx$ ibatis 就會把他翻譯成 order by topicId


          posted @ 2010-11-26 17:46 squirrel 閱讀(4139) | 評論 (2)編輯 收藏

          一、關于滾動顯屏加載

          常常會有這樣子的頁面,內容很豐富,頁面很長,圖片較多。比如說光棍節很瘋狂的淘寶商城頁面。
          或者是前段時間寫血本買了個高檔耳機的京東商城頁面,或者是新浪微博之類。

          這些頁面圖片數量多,而且比較大,少說百來K,多則上兆。要是頁面載入就一次性加載完畢。乖乖,估計黃花都變成黃花菜了。所以,我們得做點什么,避 免這種糟糕的狀況發生。目前很流行的做法就是滾動動態加載,顯示屏幕之外的圖片默認是不加載的,隨著頁面的滾動,這個要顯示圖片的區域進入了瀏覽器可是窗 口范圍,則觸發圖片的加載顯示。這種做法的好處是,一是頁面加載速度快(瀏覽器轉啊轉的圈圈或是進度條很快就玩完了),二是節約了流量,因為不可能每個用 戶瀏覽頁面時從頭滾到尾的。

          貌似我上面提到的幾個站點就是采用的這種做法,例如,我以迅雷不及掩耳的速度從淘寶商城首頁截下來的已觸發滾動加載但是未加載完畢的圖片:
          淘寶商城圖片滾動加載截圖 張鑫旭-鑫空間-鑫生活

          這是提高前端性能,優化頁面加載速度很實用的做法。看上去這種技巧有些技術門檻,其實很簡單的。我們需要一個滾動事件,然后判斷元素是否在瀏覽器窗 口,然后,顯示圖片(或是其他元素)就可以啦。我在jQuery庫下寫了個實現此效果的插件,下面就將簡單展示講解此插件的使用以及滾動動態加載的實現。

          二、jQuery滾動加載插件scrollLoading

          雖然只有幾十行代碼,但是為了方便使用,我還是將其插件化了。插件名為jquery.scrollLoading.js,您可以狠狠地點擊這里下載(右鍵 – [目標|鏈接]另存為),或是點擊這里下載mini壓縮版的。

          demo
          您可以狠狠地點擊這里:jQuery滾動加載圖片等demo,如果您的網速是在貧困線上掙扎,可以慢慢拖動滾動條,就可以很清楚的看到滾動加載的效果了;如果您的網速讓你引以為豪,哥,你需要很快的拖動滾動條才能瞥見效果。效果類似下面:
          滾動加載demo頁面效果截圖 張鑫旭-鑫空間-鑫生活

          demo頁面中似乎有段破壞和諧的HTML片段,那是動態加載HTML后的效果,也就是說,此scrollLoading不僅可以用來滾動加載圖片,Ajax load頁面什么的也是可以的。

          三、scrollLoading使用

          不管怎樣,首先調用jQuery庫文件,還有jquery.scrollLoading.js,您可以直接在頁面的某處添上如下的代碼:

          <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
          <script type="text/javascript" src="http://www.zhangxinxu.com/study/js/mini/jquery.scrollLoading-min.js"></script>

          此插件的方法名就是scrollLoading,所以,直接:包裝器.scrollLoading();就可以實現滾動加載效果了,簡單的吧。如下:

          $(".scrollLoading").scrollLoading();

          表示所有class為scrollLoading的元素綁定了滾動加載的方法。
          當然,不可能真的就如此簡單,我們還需要做點小動作的。元素默認是不加載的,那么真正的加載地址顯然要預先在元素上放置的,例如新浪微博默認把頭像地址綁在了一個自定義的”dynamic-src”屬性上,見下圖:
          新浪微博綁定真實圖片地址自定義屬性 張鑫旭-鑫空間-鑫生活

          在HTML5中,以data-開頭的自定義屬性都是合法的,且地址可以是圖片,頁面等。所以,我設定了綁定地址的自定義屬性為”data-url”,此屬性值設為真實的圖片(或頁面)地址就可以了。例如下面:

          <div class="scrollLoading" data-url="loaded.html">加載中...</div>

          會在滾動時加載名為loaded.html的頁面,并自動替換里面的內容。

          對于常用的圖片,還有一點小問題,就是其默認的src圖片地址。其src地址不能是真實的圖片地址(否則會直接一次性全部加載),也不能是空地址或是壞地址,否則IE瀏覽器下會出現很驚悚的紅叉叉。IE瀏覽器下的紅叉叉 張鑫旭-鑫空間-鑫生活。我的做法是默認鏈接的是一個1px * 1px的gif透明圖片(大小很?。瑫r可以透出后面加載中gif動畫圖片,當滾動加載的時候直接把此gif圖片替換掉。于是,對于圖片,可能就有類似下面的代碼:

          <img class="scrollLoading" data-url="http://image.zhangxinxu.com/image/study/head/s180/1.jpeg" src="http://www.zhangxinxu.com/study/image/pixel.gif" width="180" height="180" style="background:url(http://www.zhangxinxu.com/study/image/loading.gif) no-repeat center;" />

          四、scrollLoading可選參數

          scrollLoading是個很簡單很小的插件(無注釋YUI compressor min版僅508B),所以參數也很少,就一個,見下表:

          參數 默認 釋義
          attr data-url 獲取元素加載地址的屬性名

          就這些了。此插件只適用于頁面默認滾動條的動態加載。對于內部div之類的滾動加載不支持。

          五、周五,結語

          要下班了,nice!
          明天周末,我要去釣魚。
          我感冒了,鼻涕流個不停,難受。
          空間近日升級了,20G的月流量已經挺不住了。
          最近經??磩勇?。
          我決定在RSS里面加點廣告,評論鏈接什么的。

          //zxx:主人,這是你有屎以來最齷齪的結語了。

          恩,對此我舉雙腳表示贊同。

          原創文章,轉載請注明來自張鑫旭-鑫空間-鑫生活[http://www.zhangxinxu.com]
          本文地址:http://www.zhangxinxu.com/wordpress/?p=1259


          posted @ 2010-11-24 15:56 squirrel 閱讀(2730) | 評論 (0)編輯 收藏

          一、相關demo

          二、簡介與說明

          • 此jQuery插件為Ajax分頁插件,一次性加載,故分頁切換時無刷新與延遲,如果數據量較大不建議用此方法,因為加載會比較慢。
          • 原插件CSS不太合理,使用浮動,故無法方便實現左右方向的定位,且未清除浮動,在中文修改版中我對其進行了優化,使其支持text-align的定位。
          • 對原js文件注釋進行了中文翻譯,demo頁面也是漢化了的,demo頁面的js與原demo有一些出入,但核心不變。

          三、使用方法

          跟一般的jQuery插件一樣,此插件使用也很簡單便捷。方法是pagination,例如$("#page").pagination(100);,這里的100參數是必須的,表示顯示項目的總個數,這是最簡單的使用,得到的顯示如下:
          分頁效果圖 張鑫旭-鑫空間-鑫生活

          還有一點值得一提的是分頁列表需要放在class類為pagination的標簽內,您可以使用text-align屬性控制分頁居中顯示還是居右顯示。

          回調函數一般用來裝載對應分頁顯示的內容,具體參見demo源文件。

          四、參數

          參數名 描述 參數值
          maxentries 總條目數 必選參數,整數
          items_per_page 每頁顯示的條目數 可選參數,默認是10
          num_display_entries 連續分頁主體部分顯示的分頁條目數 可選參數,默認是10
          current_page 當前選中的頁面 可選參數,默認是0,表示第1頁
          num_edge_entries 兩側顯示的首尾分頁的條目數 可選參數,默認是0
          link_to 分頁的鏈接 字符串,可選參數,默認是"#"
          prev_text “前一頁”分頁按鈕上顯示的文字 字符串參數,可選,默認是"Prev"
          next_text “下一頁”分頁按鈕上顯示的文字 字符串參數,可選,默認是"Next"
          ellipse_text 省略的頁數用什么文字表示 可選字符串參數,默認是"…"
          prev_show_always 是否顯示“前一頁”分頁按鈕 布爾型,可選參數,默認為true,即顯示“前一頁”按鈕
          next_show_always 是否顯示“下一頁”分頁按鈕 布爾型,可選參數,默認為true,即顯示“下一頁”按鈕
          callback 回調函數 默認無執行效果

          五、使用舉例

          例如下面的使用代碼:

          $("#Pagination").pagination(56, {
          num_edge_entries: 2,
          num_display_entries: 4,
          callback: pageselectCallback,
          items_per_page:1
          });

          這段代碼表示的含義是:總共有56(maxentries)個列表項,首尾兩側分頁顯示2(num_edge_entries)個,連續分頁主體數 目顯示4(num_display_entries)個,回調函數為pageselectCallback(callback),每頁顯示的列表項為 1(items_per_page)。您可以對照參數表修改配置這里的參數。

          六、關于demo的一些說明

          總共有三個demo,第一個demo就是個靜態的數據,直接寫在HTML上;第二個使用Ajax加載HTML數據,然后進行分頁顯示;第三個demo可以動態修改一些參數觀察對應的分頁效果。

          所有demo頁面的js注釋我都改為了中文標注,難點在于回調函數,demo中回調函數有兩個參數,一個是page_index,另一個是jq,前 一個表示您當前點擊的那個分頁的頁數索引值,后一個參數表示裝載容器。這里的頁數索引值是關鍵,我們要根據這個索引值找到對應的(例如)HTML元素,然 后再指定的容器中顯示出來,demo中提供了裝載單元素以及多元素的方法,相信不會有太大問題。
          一些參數 張鑫旭-鑫空間-鑫生活


          posted @ 2010-11-24 15:52 squirrel 閱讀(810) | 評論 (0)編輯 收藏

          http://www.zhangxinxu.com/wordpress/

          這小子個人空間里前端特效不錯,還帶有用例,源碼,效果圖,以及demo

           


          posted @ 2010-11-24 15:33 squirrel 閱讀(236) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 拜泉县| 临高县| 明溪县| 高青县| 平谷区| 博兴县| 尖扎县| 东阳市| 麻城市| 江华| 尚志市| 灵璧县| 绥化市| 五大连池市| 禹州市| 当涂县| 泰兴市| 行唐县| 府谷县| 南充市| 鹤壁市| 巴林右旗| 平安县| 天门市| 沧源| 饶平县| 涞水县| 龙里县| 河津市| 公安县| 西安市| 衡水市| 洞口县| 息烽县| 昌黎县| 尚志市| 山阴县| 星座| 威宁| 灵石县| 天峻县|