Phân biệt Callback và Postback

Đối với postback một phần (partial postback hay async postback), thì hiện tượng co giật không xảy ra do có một đối tượng JavaScript (ScriptManager) đứng đằng sau để vẽ lại một phần màn hình theo yêu cầu. Tuy nhiên khi trang HTML quá phức tạp với số lượng lớn các thẻ HTML được sinh ra, thì Partial Postback vẫn gây ra hiện tượng co giật nhưng với mức độ nhỏ hơn so với Full-Postback.

 Trong khi đó Callback chỉ là một cách triệu gọi (thí dụ gọi hàm) đơn thuần lên server để lấy dữ liệu và đổ vào một thẻ nào đó được đặt trước (Place holder) chứ không refresh lại toàn bộ trang, và do đó cũng không gây ra hiện tượng co giật. Như vậy sẽ không thể dùng Callback để vẽ lại bất cứ một vùng nào của trang HTML. Trên server (code-behind), việc cố gắng update giao diện các Control thì sẽ trở nên vô tác dụng, điều này cũng giống như khi cố gắng update một cái gì đó trên UI tại thời điểm “unload” xảy ra (xem ASP.NET Page LifeCycle) nhưng lúc đó việc Rendering đã hoàn tất và không thực thi bất cứ một yêu cầu cập nhật UI nào. Một nhược điểm của ASP.NET là việc cố gắng cập nhật UI tại thời điểm Unload hoặc Callback đểu không gây ra Exception khiến cho những người mới bắt đầu học ASP.NET mất rất nhiều thời gian để tìm hiểu vì sao việc cập nhật UI lại thất bại!

 Chúng ta có thể so sánh vòng đời của Postback và Callback như ở dưới đây. Có thể thấy là chúng giống nhau ở hầu hết các giai đoạn, trừ các giai đoạn Rendering vì Callback không tham gia thực hiện việc update UI. Một lưu ý quan trọng là khi Callback xảy ra, giá trị của ViewState không bao giờ thay đổi, tức là khi cố gắng thay đổi giá trị của ViewState trên server khi Callback xảy ra, thì giá trị ViewState vẫn giữ nguyên.

Có thể cập nhật một vùng của trang Web với Callback?

Hoàn toàn được. Nhưng chúng ta sẽ phải tự mình viết rất nhiều code, đặc biệt là JavaScript để render các thẻ HTML và điền nội dung theo yêu cầu.

Chúng ta sẽ không thể cập nhật các Server Control với Callback. Thí dụ chúng ta không thể fill data vào đối tượng GridView và render nó sau khi Callback. Để làm được điều giống như Postback, chúng ta sẽ viết JavaScript để sinh ra các thẻ <table><th><tr>… và fill dữ liệu sau khi Callback vào các vị trí tương ứng. Đây có thể nói là một công việc hết sức khổ ải vì chúng ta không tận dụng được lợi thế của các Web Control có sẵn có thể giúp render ra HTML Markup dễ dàng hơn rất nhiều.

 

Thiết kế định hướng Callback giúp trang Web nạp nhanh hơn so với Postback?

Không chính xác. Callback và Postback không xảy ra tại thời điểm ban đầu nạp trang. Postback và Callback xảy ra tại thời điểm khi có một yêu cầu gửi đến server tại thời gian thực (sau khi trang đã được nạp và sẵn sàng). Tại thời điểm gửi yêu cầu và phản hồi lại phía Client, Postback sẽ refresh lại toàn bộ trang (hoặc một vùng nào đó) do đó performance sẽ thấp hơn so với Callback (không vẽ lại bất cứ vùng nào trên trang). Như vậy nếu người dùng gửi yêu cầu không liên quan đến cập nhật UI từ server, thì có thể dùng Callback sẽ cho hiệu quả cao hơn so với Postback. Có thể nói về mức độ an toàn thì Callback có mức an toàn cao hơn vì yêu cầu gửi đi được thực hiện vòng (async) mà không thay đổi lại toàn bộ cấu trúc cây điều khiển của trang (Page Control Tree).

 Chúng ta có thể sử dụng Callback khi thiết kế tính năng Download, kiểm tra sự tồn tại của một dữ liệu (thí dụ username), bình chọn (rate/vote), hoặc tự động nạp dữ liệu vào một số trường nào đó. Trong trường hợp này thì Callback có hiệu quả hơn hẳn so với Postback.

  

 

Callback  và Partial Postback trong Ajax khác nhau như thế nào?

AJAX là viết tắt của Asynchronous JavaScript and XML. Ajax có thể hiểu là công nghệ được hình thành bởi một tập hợp các các kỹ thuật phát triển Web, trong đó có Callback, để tạo nên các trang Web sinh động. Ajax là sự kết hợp cả JavaScript và XML, JSon.. để làm tối đa hóa công việc viết mã của các nhà lập trình Ajax.

 

Partial Postback là một kỹ thuật nằm giữa Callback (kỹ thuật thô sơ nhất) và Postback. Partial Postback trong Ajax sử dụng cơ chế Callback để phát động cuộc gọi lên server và cũng thực hiện các ASP.NET LifeCycle như một postback thông thường. Tuy nhiên Ạjax chỉ điều khiển quá trình rendering trên các control thay vì rendering lại toàn bộ trang Web. Ajax đóng gói các dữ liệu đã được render và gửi ngược trở lại Client. Về phía trình duyệt, Ajax cập nhật DOM cho trang Web với các thay đổi cần thiết.

 

Partial Postback không được hỗ trợ trong ASP.NET 2.0 (trong khi Callback đã có trong phiên bản này). Tuy nhiên AJAX đã giúp các nhà phát triển Microsoft làm điều này bằng cách bổ sung các thư viện hỗ trợ cho Partial Postback.

 

Như vậy Callback chỉ là một kỹ thuật nhỏ lẻ, cấp thấp và có lợi thế hơn Ajax trong việc khai thác các tính năng nhỏ để tăng mức User Experience cho trang Web.

 

Khi nào thì quyết định sử dụng Callback hoặc Postback?

Như đã nói ở trên, Callback đem lại sự thuận tiện cho người dùng khi phải vẽ lại toàn màn hình. Các developer thường hay mắc một nhược điểm là lạm dụng kỹ thuật Callback hoặc đối tượng UpdateManager quá nhiều sẽ khiến cho trang Web load chậm và hiệu quả cũng trở nên phản tác dụng khi hiện tượng co giật vẫn xảy ra do quá nhiều xung đột phát sinh. Do vậy tác giả đề nghị các developer cần hết sức lưu ý 2 nguyên tắc sau:

-  Chỉ sử dụng Callback đối với các action đơn giản, thí dụ rate một bài báo hoặc like một cái gì đó.

-  Đối với các action phức tạp như lưu dữ liệu, nên thiết kế full postback nhằm mục đích an toàn và hạn chế lỗi. Các developer cũng cần estimate xem một action xảy ra sẽ khiến trang Web thay đổi nhiều hay ít, nếu là thay đổi nhiều thì việc khai thác Ajax không đem lại hiệu quả nhiều, thay vào đó full postback là giải pháp tốt nhất. 

 Trong ASP.NET 2.0, các control như TreeView sử dụng rất nhiều script callbacks để thiết kế các tính năng expand/collapse. Trong khi đó GridView sử dụng callback để phân trang và sort dữ liệu mà không gây ra Postback.

    <asp:GridView ID="GridView1"
        DataSourceID="TitlesSource"
        EnableSortingAndPagingCallbacks="true"
        AllowPaging="true"
        AllowSorting="true"
        Runat="Server" />

Hi vọng bài viết này sẽ đem lại lợi ích cho những ai còn đang băn khoăn sẽ thiết kế trang Web theo hướng nào: Postback, Callback hay Ajax.

 

 

Ổ Ssd đã tăng tốc máy tính tôi như thế nào ??

Hôm nay có dịp sài thử ổ Ssd Kingmax 120 hình ẻm ở dưới, máy mình cấu hình thì tạm thôi CPU Core 2 E7400 (2.8GHZ) Ram 4G

Hdd 320 Gb cũ sau khi lắp ssd tốc độ tăng đáng kể

Cụ thể như thế nào thì lúc trước máy mình khởi động hay rất lâu khoảng 5 phút để khởi động, 2 phút để tắt máy, máy mình thì cài khá nhiều phần mềm ngoài các phần mềm linh tinh , giải trí , nghe nhạc xem phim thì còn có 

Microsoft Sql Server 2005, 2008

Microsoft Visual Studio 2005, 2008, 2010, 2012

và update full

sau khi sài ổ ssd đã cho update full rồi thì máy khởi động mất khoảng 17 giây là xong có thể sài được tất máy khoảng 10 giây

Bật Microsoft Visual Studio 2012 chỉ mất 10 giây, và thêm 7 giây để load xong tất cả project

 

project mình thì khá lớn lớn nhất là file css khoảng 16 k dòng

sau khi bật thì máy có đơ một tý nhưng vẫn sài tốt ram thì lên khá cao

 

  Visual Studio của mình sài khá nhiều addon như: Resharper, CodeMap, Rubi....

Photoshop CS6 thì mất 8 giây để khởi động lần đầu,3-4 giây để bật cho các lần sau phải nói là rất nhanh

 

Microsoft Office 2010 thì mất khoàng 4 giây bật lần đầu , 1 giây cho các lần sau

những phần mềm khác thì chỉ cần 1 - 2 giây là bật xong

Bài viết này dành cho các bạn nào đang định nâng cấp Ssd mà không biết nó sẽ cải thiện như thế nào , mua về có phí tiền không vì ssd hiện nay khá mắc 120 gb là 2500k và 256 gb khoảng 5000k không hợp túi tiền của người việt

Các hàm Jquery thông dụng

Tắt mở một input

$("#fname").attr("disabled",true);
$("#hname").removeAttr("disabled");


Lấy giá trị một CheckBox

$("[id$='ID']").is(':checked')

Lấy giá trị một Radio button

$("#ID input:radio:checked").val();
$('input:radio[name=NameOfRadioButtons]:checked').val();

Kiểm tra xem input có mở không

$('#the_name').is(':enabled') 

Các sự kiện, Selector

$(document).ready(function(){  
    $('input[name="Name"]').change(function(){      
    });
    $('#ID').click(function () {    
    });
    $('#ID').dblclick(function () { 
    });
});

Còn tiếp...

Hướng dẫn lập trình jquery cho người mới bắt đầu

jQuery lập trình được những gì?

1. Truy cập (access) các phần tử (elements) trong nội dung trang web (document)
2. Thay đổi hình thức/giao diện (appearance) của trang web: Thay đổi class hoặc style riêng lẽ...
3. Thay đổi nội dung (content) trang web.
4. Tương tác với người dùng.
5. Hiệu ứng động jquery: fades, wipes, ...
6. Lấy thông tin từ Server mà không cần load lại trang web (Ajax)
7. Đơn giản hoá tác vụ của JavaScript
Sau đây là các chức năng chính trong lập trình jquery mà các newbie nên biết:

1. Selector trong lập trình Jquery.
Điều đầu tiên mà người lập trình muốn làm việc với jquery là phải sử dụng tốt được các selector của jquery.

* Chọn theo tên Tag, ví dụ: $('p')
* Chọn theo ID, ví dụ: $('#author')
* Chọn theo class, ví dụ: $('.content')
* Chọn các phần tử con ta dùng thêm > , ví dụ: $('#select-id > li')
* Chọn và loại trừ một số phần tử, ví dụ: $('#select-id > li:not(.current)')
* Chọn theo thuộc tính của Tag, ví dụ: $('img[alt]') hoặc $('a[href^=mailto:]')
* Chọn kết hợp, ví dụ: $('a[href^=http][href*=zend]')
* Chọn phần tử theo Index trong tập hợp chọn được, ví dụ: $('#select-id > li:eq(2)')
* Chọn tất cả các div là con đầu tiên của div chứ jquery, ví dụ: $('div:nth-child(1)')
* Chọn các phần tử có index là số lẽ, ví dụ: $('#select-id > li:odd')
* Chọn theo nội dung bên trong, ví dụ: $('.content:contains('Example')')
* Đặc biệt jquery hỗ trợ việc chọn các thành phần trong Form
o :text, :checkbox, :radio, :image, :submit, :reset, :password, :file.
o :input (Chọn input, textarea, select, và button)
o :button (Button và input nào có thuộc tính type="button")
o :enabled, :disabled (phần tử đã enabled, disabled)
o :checked (Radio buttons hoặc checkboxes đã được chọn (checked))
o :selected (Option đã được chọn (selected))

Trong phần này mình sẽ trình bày với các bạn một số phương thức để chọn các phần tử trong jquery có liên quan họ hàng với nhau:

.next() : chọn phần tử cùng cấp và nằm kế sau nó (chọn thằng em sinh kề sau nó)
.nextAll() : chọn tất cả phần tử cùng cấp và nằm sau nó (chọn lũ em của nó)
.prev() : chọn phần tử cùng cấp và nằm kế trước nó (chọn thằng anh sinh kế trước nó)
.prevAll() : chọn tất cả phần tử cùng cấp và nằm trước nó (chọn lũ anh của nó)
.andSelf() : và chọn chính nó
.parent() : chọn phần tử cha của nó (chứa nó)
.children() : chọn các phần tử con của nó (nó chứa)
.find('selector') : tìm phần tử theo 'selector'
.end() : đây là phương thức mình muốn bạn tự tìm hiểu.


2. Sự kiện trong lap trinh jquery.
Những phương pháp jquery này được sử dụng để đăng ký hành vi có hiệu ứng khi người dùng tương tác với trình duyệt, và tiếp tục thao tác những hành vi đó.
.bind() : bắt các sự kiện của các thẻ html.
.click() : bắt sự kiện click tương tự như sự kiện onClick() trong Dom.
.hover() : xử lý 2 sự kiện đưa chuột vào và kéo chuột ra khỏi các phần tử html.
.live() : dùng để xử lý tất cả các sự kiện hiện hành.
.load() : dùng để load một sự kiện javascript.
.ready() : chỉ định thực hiện khi Dom được nạp đầy đủ trong page.
.submit() : dùng để submit các sự kiện javascript.
.scroll() : thực thi khi ta kéo trượt thanh trượt.
.unbind() : ngược lại với .bind().
.change() : thực thi khi ta thay đổi cái gì đó của phần tử html.


3. Các hiệu ứng trong lập trình jquery.
Thư viện jQuery cung cấp một số kỹ thuật để tạo nên các hiệu ứng chuyển động cho một trang web. Chúng bao gồm các chuyển động đơn giản, sử dụng thường xuyên, và cả các khả năng để xây dựng các hiệu ứng phức tạp. Trong phần này, mình sẽ giới thiệu một số hiệu ứng mà mình hay dùng để lập trình web với thư viện của jquery.

.animate(): thực hiện một tùy biến chuyển động của tập hợp các thuộc tính CSS.
.delay() : thiết lập thời gian trì hoãn thực hiện các function sau nó.
.fadeIn() : cho phép các phần tử trong tag hiện một cách từ từ biến thiên theo thời gian đã được thiết lập.
.fadeOut() : cho phép các phần tử trong tag ẩn một cách từ từ biến thiên theo thời gian đã được thiết lập.
.fadeTo() : điều chỉnh độ mờ của các phần tử trong html.
jQuery.fx.interval : thiết lập thời gian cho chuyển động.
.hide(): ẩn các phần tử html theo thời gian.
.Show() : hiện các phẩn tử html theo thời gian.
.stop() : kết thúc các hiệu ứng chuyện động.
jQuery.fx.off : vô hiệu hóa tất cả các chuyển động.


4. Các thuộc tính trong lap trinh jquery
Những phương pháp jquery nhận và thiết lập các thuộc tính của các yếu tố DOM. Mình xin liệt kê các thuộc tính người lập trình hay dùng.
.addClass() : thêm vào thuộc tính class cho tag html.
.removeClass() : loại trừ thuộc tính class cho tag html.
.attr() : nhận giá trị phẩn tử đầu tiên trong tập hợp các thuộc tính của tag html.
.removeAttr() : loại trừ giá trị phẩn tử đầu tiên trong tập hợp các thuộc tính của tag html.
.html() : trả về nội dung dạng html.
.text() : trả về nội dung dạng text.
.val() : nhận lấy giá trị hiện tại của tag html.


5. Sử dụng Ajax trong lap trinh jquery
Jquery hỗ trợ các function sử dụng ajax trong lập trình web một cách đơn giản và ngắn gọn với mức độ tùy biến khá cao.
.ajax() : thực hiện một yêu cầu ajax.
.ajaxComplete() : thực hiện một yêu cầu ajax complete.
.get() : load dữ liệu từ server sử dụng phương thức GET.
.getJSON() : load dữ liệu từ server dưới dạng Json sử dụng phương thức GET.
.post() : load dữ liệu từ server sử dụng phương thức POST.
Đây chỉ là một số function mà người lập trình jquery hay dùng. Ngoài ra còn rất nhiều function khác nữa.

Image Optimizer 1.1 - Phần mềm nén ảnh chuyên nghiệp nhất

Bạn đã quá vất vả khi phải bỏ thời gian để ngồi giảm kích thức ảnh, việc biên tập ảnh giờ đây đã để hơn bao giờ hết với phần mềm Image Optimizer 1.0 phần mềm này kho mình thiết kế nhằm giúm biên tập website được tốt hơn giờ mình xin chia sẻ với cách bạn cánh sử dụng cũng rất dễ dàng chỉ qua vài bước

Cánh sử dụng khi hình , chọn thư mục hay hình cần nén

chọn cấu hình hình ảnh nhu các hình bên dưới và thưởng thức

 

Phần mềm download tại đây

Bản 1.1: ImageOptimizer1.1.msi (930KB)

Bản 1.2: Image Optimizer 1.0.msi (1,07 mb)