เพิ่มประสิทธิภาพของ ASP.NET MVC ด้วย Output Cache

Output Caching เป็นอีกวิธีหนึงในการเพิ่มประสิทธิภาพของ ASP.NET MVC โดย Output Cache จะช่วยให้ Content ที่ถูก Return จาก Controller Action ที่มีเนื้อหาเดียวกันจะไม่ถูกสร้างทุกครั้ง

ยกตัวอย่าง ASP.NET MVC ต้องการแสดงข้อมูลจาก Database ผ่าน View Index โดยทั่วไปต้องมีการ Execute เพื่อดึงข้อมูลที่ Controller Action  แล้ว Retun ข้อมูลมาที่ View Index เท่ากับว่าจะมีการ Retrieve ข้อมูลทุกครั้ง ซึ่งบางทีข้อมูลที่ Retrieve  มาไม่ได้มีการเปลี่ยนแปลงทำให้เกิดการทำงานซ้ำซ้อนบน Server

นการเพิ่มประสิทธิภาพ ASP.NET MVC จึงใช้ Ouput Cache เพื่อหลีกเลี่ยงการ Execute Database ทุกครั้ง ดังนั้นเมื่อผู้ใช้ Request ไปที่ Controlller Action เดิม View index จะ Retrieve ข้อมูลจาก Cache แทน

เราสามารถเริ่มใช้งาน Output Caching ได้โดยการกำหนด Attribute [OutputCache] บน Controller Action

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        [OutputCache(Duration=10, VaryByParam="none")]
        public ActionResult Index()
        {
            return View();
        }

    }
}

จาก Code ข้างบนจะเป็นการกำหนดว่าถามีการเรียก Controller Action Index จะมีการเก็บ Cache โดยมี Parameters คือ Duration บอกว่าเราต้องการเก็บข้อมูล Cache ไว้กี่วินาที ในตัวอย่างจะมีการเก็บ Cache ไว้ 10 วินาที ส่วน VaryByParam ช่วยให้เราสามารถสร้าง Cache Version จาก Parameter หรือ Query String ที่ต่างกัน มีค่า Default เป็น “none” โดยมี Parameters ต่างๆดังนี

   Location="Any | Client | Downstream | Server | None | ServerAndClient "
   Shared="True | False"
   VaryByControl="controlname"
   VaryByCustom="browser | customstring"
   VaryByHeader="headers"
   VaryByParam="parametername" 
   VaryByContentEncoding="encodings"
   CacheProfile="cache profile name | ''"
   NoStore="true | false"
   SqlDependency="database/table name pair | CommandNotification"

 

Facebook Comments

Export Pdf จาก GridView ให้รองรับภาษาไทย ด้วย iTextSharp

ในการทำงานจริงทุกระบบจะต้องมีการสร้างรายงานหรือ Report โดยทั่วไปก็อาจจะใช้ Crystal Report เพื้อสร้าง Report แต่วันนี้เราจะมาลองสร้าง Report ด้วย Pdf โดยใช้การ Export ข้อมูลจาก GridView ซึ่งการใช้ Pdf มีข้อดีั เมือใช้งานจริงไม่ต้องติดตั้ง Component หรือโปรแกรมต่างๆให้วุ่นวาย เพราะสามารถแสดง Report ได้จาก Pdf ซึ่งเป็นโปรแกรมพื้นฐานในเครื่องอยู่แล้ว

เริ่มต้นสร้าง Class ขึ้นมาเพื่อใช้สำหรับทำงานเกี่ยวกับ Pdf ใช้ชื่อว่า PdfManager

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

public static class PdfManager
{
    public static void ExportFromGridView(GridView gvControl)
    {

    }
}

ในตัวอย่างนี้ผมจะใช้ iTextSharp ซึ่งเป็น Library ตัวนึงในการทำงานเกี่ยวกับ Pdf เพื่อสร้างเอกสาร Pdf ได้ง่าย เพราะมี Method ต่างๆไว้สำหรับเีรียกใช้งานอยู่แล้ว สามารถติดตั้งได้โดยโหลดจาก Nuget หรือจาก Package Manager Console (อ้างอิง : https://www.nuget.org/packages/itextsharp/)

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using iTextSharp.text.pdf;
using iTextSharp.text;
using System.Data;

public static class PdfManager
{
    public static void ExportFromGridView(GridView gvControl)
    {
        // สร้าง BaseFont 
        BaseFont bf = BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/Fonts/ANGSA_0.TTF"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        // กำหนดขนาดของ Pdf
        Document pdfDoc = new Document(PageSize.A4, 10, 10, 10, 10);

        try
        {
            // สร้าง instance ของ PdfWriter
            PdfWriter.GetInstance(pdfDoc, System.Web.HttpContext.Current.Response.OutputStream);
            pdfDoc.Open();

            // สร้าง Font จาก BaseFont 
            Font fnt = new Font(bf, 11);

            // สร้าง PdfTable จาก GridView Control
            PdfPTable PdfTable = new PdfPTable(gvControl.Columns.Count);
            PdfPCell PdfPCell = null;

            // Write Header ที่ PdfCell ใน PdfTable
            for (int column = 0; column < gvControl.Columns.Count; column++)
            {
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Columns[column].HeaderText.ToString(), fnt)));
                PdfTable.AddCell(PdfPCell);
            }

            // Write Data ที่ PdfCell ใน PdfTable
            for (int row = 0; row < gvControl.Rows.Count; row++)
            {
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Rows[row].Cells[1].Text, fnt)));
                PdfTable.AddCell(PdfPCell);
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Rows[row].Cells[2].Text, fnt)));
                PdfTable.AddCell(PdfPCell);
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Rows[row].Cells[3].Text, fnt)));
                PdfTable.AddCell(PdfPCell);
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Rows[row].Cells[4].Text, fnt)));
                PdfTable.AddCell(PdfPCell);
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Rows[row].Cells[5].Text, fnt)));
                PdfTable.AddCell(PdfPCell);
                PdfPCell = new PdfPCell(new Phrase(new Chunk(gvControl.Rows[row].Cells[6].Text, fnt)));
                PdfTable.AddCell(PdfPCell);
            }

            // Add PdfTable ลง pdfDoc
            pdfDoc.Add(PdfTable);
            // Close document
            pdfDoc.Close();
            // กำหนด ContentType เป็น application/pdf เพื่อ Response เป็น Pdf
            HttpContext.Current.Response.ContentType = "application/pdf";
            // กำหนดชื่อไฟล์ที่ต้องการ Export
            HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + DateTime.Now.ToString("yyyyMMdd") + ".pdf");
            // Export Pdf
            System.Web.HttpContext.Current.Response.Write(pdfDoc);

            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

        }
        catch (Exception ex)
        {
            HttpContext.Current.Response.Write(ex.ToString());
        }
    }
}

ในส่วน Code ข้างบนมี Code ที่น่าสนใจ คือ ในส่วนของการกำหนด BaseFont

ในส่วนมีข้อสังเกต คือ ผมได้สร้าง Path สำหรับเก็บ Font ภายใน Solution เพือให้สามารถอ้างอิงถึง Font นั้น โดยการ Embded ลงไป ทุกครั้งที่เราสร้าง Instance ของ Font ให้ส่ง BaseFont ไปด้วย ดังนี้

BaseFont bf = BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/Fonts/ANGSA_0.TTF")
                              , BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

ตอนนี้ก็สร้าง Class สำหรับจัดการเกียวกับการ Export ข้อมูลเรียบร้อย จากนั้นสามารถเรียกใช้งาน ดังนี้

Font fnt = new Font(bf, 11);

จาก Code ช้างบนมีประโยชน์ คือ จะช่วยแก้ปัญหาในเรื่องของ Pdf ไม่สามารถแสดงภาษาไทย

protected void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        PdfManager.ExportPdf(gvColourFormula);
    }
    catch (Exception ex)
    {
        
    }
}

เพียงเท่านี้เราก็สามารถใช้งาน iTextSharp เพื่อให้รองรับภาษาไทยได้แล้วครับ

Facebook Comments

สร้างแชทผ่าน Messenger Apps ด้วย WhatsHelp

วันนี้จะมาพูดถึงเรื่องการสร้างแชทสำหรับให้ผู้ใช้งานเว็บไซต์ของเรา ซึ่งในปัจจุบัน Messaging Application ก็ได้เข้ามามีส่วนร่วมกับการสื่อสารในชีวิตของเราเป็นที่เรียบร้อย รวมถึงยังเป็นอีกหนึ่งช่องทางที่ช่วยให้ผู้ใช้งานเว็บไซต์สามารถติดต่อ สื่อสาร กันได้ง่ายสะดวกมากขึ้น

วันนี้เลยอยากแนะนำเครื่องมือนึงชื่อว่า  WhatsHelp ข้อดีของเครื่องมือตัวนี้ที่ผมชอบที่สุดคือ สามารถติดตั้ง Messaging Application ได้ง่าย ใช้เวลาไม่กี่นาที คุณก็จะสามารถสร้างแชทติดตั้งไว้บนเว็บไซต์ของคุณได้เลย รวมถึงสามารถเลือกได้ว่าต้องการใช้ Messaging Application ตัวไหนบ้าง ซึ่ง WhatsHelp เค้าก็ได้รวมมาให้เลือกใช้งานเยอะมาก ไม่ว่าจะเป็น Messaging Application ยอดนิยมอย่าง Facebook Messenger , Line รวมถึง Viber , Snapchat และอื่นๆ

เริมแรกให้เค้ามาที่ https://whatshelp.io/widget นี้นะครับ จะมีขั้นตอนให้เราสร้างแชทง่ายๆเท่านี้เองครับ เพียงแค่ 3 ขั้นตอน จากนั้นก็จะได้ Scripts สำหรับติดตั้งที่เว็บไซต์ของเรา โดยที่ไม่ต้องเขียน Code อะไรเลย ที่นี้มาลองเริ่มต้นสร้างแชทกันนะครับ

ขั้นตอนแรกเลือกว่าเราต้องการใช้ Messaging Application ตัวไหน ซึ่งสามารถเลือกตัวเดียวหรือหลายๆตัวก้ได้

เมื่อเลือก Messaging Application แล้วจะขึ้นกล่องข้อความสำหรับให้กรอกค่า ID หรือ URL ที่เชื่อมต่อกับ Messaging Application ที่เราต้องการสร้างMessaging Apps

ขั้นตอนที่สองปรับแต่งปุ่มและค่าต่างๆของแชท ในส่วนนี้เราสามารถแก้ไขค่าต่างๆได้ ดังนี้

  • Company Logo – เปลี่ยนภาพโลโก้เป็นรูปอื่นๆได้ โดยใส่ URL ของภาพที่ต้องการแก้ไข
  • Greeting Message – ข้อความทักทายผู้ใช้ เมื่อผู้ใช้เริ่มใช้งานแชท
  • Position – ตำแหน่งของปุ่มแชท (ปุ่มสีฟ้าตามตัวอย่างในภาพ) ว่าจะให้อยู่ด้านซ้ายหรือขวา
  • Call to action – ข้อความที่แสดงตรงปุ่มแชท ในตัวอย่างนีผมจะใส่คำว่า Chat with me ก็จะได้ปุ่มหน้าตาตามอย่างรูปภาพข้างล่าง

ขั้นตอนสุดท้าย คือ กรอกอีเมลของเราแล้วเค้าก็จะส่ง script สำหรับติดตั้งเข้าไปที่อีเมล เพียงแค่นำ Code นั้นมาติดตั้งบรรทัดก่อน </body> เพียงแค่นี้ก็ติดตั้ง Messaging Application ลงบนเว็บไซต์เราเรียบร้อย

Facebook Comments