Đăng bởi

MSI GF63 i5 Gen 10 10300H 8/512 GTX 1650 15″ 144Hz

Laptop Gaming MSI GF63 màn hình 144Hz, giá quá rẻ phù hợp túi tiền cho sinh viên học thiết kế đồ họa/nhà cửa, vừa có thể chơi game thoải mái

—–

CPU Intel Core i5 Gen 10 10300H

RAM 16 GB, DDR4 3200Mhz

Ổ cứng SSD M2 512GB

Card đồ họa NVIDIA GeForce GTX 1650

Màn hình 15.6″ FHD 144Hz

Cổng giao tiếp HDMI, USB 3.0, LAN (RJ45), Type-C…

Camera, Micro, Loa đầy đủ

Pin ngon 2, 3 tiếng

Windows 10 Home bản quyền

Ngoại hình máy đẹp keng

Phụ kiện: sạc zin theo máy

—–

Giá 9TR3

—–

Máy bán ra được test kĩ bằng phần mềm, thiết bị chuyên dụng

Đảm bảo tất cả linh kiện vẫn hoạt động tốt

Hỗ trợ sửa chữa/nâng cấp theo giá vốn

Quý khách mua về hoàn toàn yên tâm sử dụng

—–

Công ty TNHH CNTT&VT MINH QUÂN

Địa chỉ: 48/2 Xuân Thủy P. Thảo Điền TP. Thủ Đức TPHCM

Call/Zalo/SMS: 0938-507-766

Đăng bởi

Acer Aspire 5 i5 Gen 11 1135G7 8/512 14″ FHD

Laptop Acer Aspire 5, CPU i5 Gen 11 1135G7, màn hình 14″ FHD nhỏ gọn phù hợp cho người di chuyển nhiều, giá quá rẻ phù hợp cho sinh viên

—–

CPU Intel Core i5 Gen 11 1135G7

RAM 8 GB, DDR4 3200Mhz

Ổ cứng SSD M2 512GB

Card đồ họa Intel Iris XE

Màn hình 14″ FHD

Cổng giao tiếp HDMI, USB 3.0, Type-C, …

Camera, Micro, Loa đầy đủ

Windows 10 Home bản quyền

Ngoại hình máy đẹp keng

Phụ kiện: sạc zin theo máy

—–

Giá 5TR9

—–

Máy bán ra được test kĩ bằng phần mềm/thiết bị chuyên dụng

Đảm bảo tất cả linh kiện vẫn hoạt động tốt

Hỗ trợ sửa chữa/nâng cấp giá vốn

Quý khách mua về hoàn toàn yên tâm sử dụng

—–

Công ty TNHH CNTT&VT MINH QUÂN

Địa chỉ: 48/2 Xuân Thủy P. Thảo Điền TP. Thủ Đức TPHCM

Call/Zalo/SMS: 0938-507-766

Đăng bởi

HP 15s i7 Gen 11 1165G7 8/512 15″ FHD

Laptop HP 15s, ngoại hình đẹp hơn hẳn so với các hãng khác, cấu hình cao i7 Gen 11, giá rẻ phù hợp với sinh viên

—-

CPU Intel Core i7 Gen 11 1165G7

RAM 8 GB, DDR4 3200Mhz

Ổ cứng SSD M2 512GB

Card đồ họa Intel Iris XE

Màn hình 15″ FHD

Cổng giao tiếp HDMI, USB 3.0, Type-C, …

Camera, Micro, Loa đầy đủ

Windows 11 Home bản quyền

Ngoại hình máy đẹp keng

Phụ kiện: sạc zin theo máy

—–

Giá 8TR3

—–

Máy bán ra được test kĩ bằng phần mềm/thiết bị chuyên dụng

Đảm bảo tất cả linh kiện vẫn hoạt động tốt

Hỗ trợ sửa chữa/nâng cấp giá vốn

Quý khách mua về hoàn toàn yên tâm sử dụng

—–

Công ty TNHH CNTT&VT MINH QUÂN

Địa chỉ: 48/2 Xuân Thủy P. Thảo Điền TP. Thủ Đức TPHCM

Call/Zalo/SMS: 0938-507-766

Đăng bởi

Lenovo Ideapad Slim 3 i5 Gen 12 12450H 14″ BH 9/25

Laptop Lenovo Ideapad Slim 3, CPU i5 Gen 12 12450H mạnh hơn hẳn CPU laptop văn phòng, còn bảo hành chính hãng tới 09/2025

—–

CPU Intel Core i5 Gen 12 12450H

RAM 16 GB, DDR4 3200Mhz

Ổ cứng SSD M2 512GB

Card đồ họa Intel UHD

Màn hình 14″ FHD

Cổng giao tiếp HDMI, USB 3.0, Type-C, …

Camera, Micro, Loa đầy đủ

Windows 11 Home bản quyền

Ngoại hình máy đẹp keng

Còn bảo hành chính hãng tới 09/2025

Phụ kiện: sạc zin theo máy

—–

Giá 9TR5

—–

Máy bán ra được test kĩ bằng phần mềm/thiết bị chuyên dụng

Đảm bảo tất cả linh kiện vẫn hoạt động tốt

Hỗ trợ sửa chữa/nâng cấp giá vốn

Quý khách mua về hoàn toàn yên tâm sử dụng

—–

Công ty TNHH CNTT&VT MINH QUÂN

Địa chỉ: 48/2 Xuân Thủy P. Thảo Điền TP. Thủ Đức TPHCM

Call/Zalo/SMS: 0938-507-766

Đăng bởi

Card test main laptop là gì? Có chức năng gì với laptop?

Bạn đã nghe tới card test main laptop, nhưng không biết chúng là gì? Có chức năng gì trong laptop? Vậy thì bài viết này sẽ giúp bạn giải đáp bằng các thông tin dưới đây, các bạn hãy cùng mình tìm hiểu về linh kiện này nhé!

Card test main laptop là gì? 

 

Card test main laptop được biết đến là công cụ hỗ trợ sửa chữa mainboard laptop rất hiệu quả với những tính năng ưu việt. 

Bạn có thể hiểu rằng, card test main laptop là một thiết bị hỗ trợ kỹ thuật viên chuẩn đoán chính xác các lỗi liên quan đến phần cứng (cụ thể ở đây là mainboard) làm cho laptop bật không lên.

Thông thường, các loại card test main laptop sẽ được cắm trực tiếp trên khe PCI hoặc PCI express của mainboard bị lỗi để kiểm tra. Có hai cách để kiểm tra main bằng card test main, một là nhận biết các đèn LED trên card test main, hay là xem các chỉ số hiển thị trên card.

Cấu tạo card test main laptop 

 

Cấu tạo của card test main laptop sẽ có những bộ phận sau: 

– Khe cắm qua giao tiếp PCI và PCIE 1V.

– Đèn led báo nguồn (3v,5v,12v).

– Led RST: đèn này sẽ sáng tắt liên tục để báo hiệu có xung reset. Nếu đèn này không sáng hay sáng liên tục thì mainboard có thể đã bị mất điện áp mạch ram, cpu, chipset…

– Led báo CLK: báo hiệu xung clock đã hoạt động tốt.

– Các led 7 đoạn để báo POST: đây là led quan trọng nhất để xác định mainboard đang bị vấn đề gì?

– Một số loại card test main laptop đời cũ có thể có thêm một số loại đèn báo như IRDY, Frame…

Chức năng của card test main laptop

 

Card test main laptop sẽ báo code ở trên đèn LED và dựa trên mã code của từng hãng BIOS để kiểm tra mainboard. Điều này sẽ giúp cho quá trình kiểm tra hoạt động của mainboard trở nên dễ dàng hơn. Từ đó đảm bảo thời gian sửa chữa máy tính nhanh và đạt độ chính xác cao hơn so với các bước kiểm tra thông thường.

 

Nguyên tắc hoạt động của card test main laptop 

 

Khi các đèn LED đều sáng nghĩa là đã đủ nguồn. Một số trường hợp nguồn hoặc dây nối nguồn bị hở, bị đứt sẽ cấp nguồn không đủ cho main dẫn đến main không hoạt động.

Nếu main vẫn hoạt động bình thường thì LED reset chớp một lần còn nếu quá trình post diễn ra trôi chảy thì LED RUN sẽ nháy liên tục.

Nguyên tắc hoạt động của card test main laptop rất đơn giản, chủ yếu là dựa trên quá trình POST của BIOS.

Khi bật máy lên đối với loại nguồn AT hoặc nhấn nút Power thì trước tiên Main và CPU phải chạy được.

Tiếp theo là quá trình Post của BIOS hoạt động, nó kiểm tra tất cả main, cpu, ram…nói chung là thành phần kết nối với mainboard.

Quá trình này sẽ diễn ra trong yên lặng cho đến khi nghe được âm thanh thì màn hình mới hiện lên. Lúc này quá trình Post đã gần như thực hiện xong.

Nếu để tâm bạn sẽ thấy Post tiếp tục test ram, hdd, fdd… nhưng kỳ thực đây chỉ là quá trình báo kết quả hay là test lại lần nữa mà thôi. Khi màn hình hiện lên thì lúc này card test main đã hoàn thành nhiệm vụ và không cần đến nó nữa. Khi đó bạn có thể nhìn vào màn hình chẩn đoán các lỗi để khắc phục.

Vậy tóm tắt lại là card test main laptop chỉ được sử dụng từ khi nhấn nút Power cho đến khi màn hình hiện lên mà thôi.

Hướng dẫn sử dụng card test main laptop

Khi mainboard hoặc PC xảy ra lỗi thì bước đầu tiên sẽ dùng card test cắm vào cổng PCI/ISA còn trống bật máy lên và quan sát. Nếu không có biểu hiện nào về hình, tiếng và chữ… nghĩa là card test chưa được cắm cẩn thận vào mainboard.

Tắt máy cắm lại, khi card test hiện lên các thông số thì tra cứu ý nghĩa của các thông số đó để hiểu được mainboard hỏng chỗ nào và tiến hành xử lý.

Các lỗi thường gặp ở main máy tính khi cần dùng card test main laptop

Nếu card nhảy code C0, C1 hoặc D0, D1… Những lỗi này thường do mainboard và CPU chưa chạy, nhưng có thể  nguyên nhân nguồn Vcore cấp cho CPU không ổn định, mất nguồn BUS RAM hoặc main không hỗ trợ CPU.

Nếu card test nhảy code lung tung (tắt máy bật lên lại thì nhảy 1 mã code khác), gặp nhiều ở mainboard Gigabyte thì đa phần do lỗi BIOS, chỉ cần nạp lại BIOS là được. Cũng có trường hợp nhảy code loạn xạ nhưng không phải lỗi BIOS mà do bản chất card test dỏm nên báo không đúng.

Nếu card test dùng lại ở code 26 thì anh em nên kiếm tiền mua card test khác là được rồi. Lỗi này do bản chất card test bị lỗi. Thường gặp khi chúng ta kiểm tra trên mainboard Gigabyte và Intel.

Led 7 đoạn báo mã code C5, D6, 05 tùy theo loại mainboard sử dụng BIOS của hãng nào. Mã code này đa số do lỗi BIOS, anh em phải nạp lại BIOS.

Card test chạy tới code  7F thì mainboard đã khởi động lên hình. Những do thiết lập BIOS bị sai nên nó dừng lại yêu cầu bấm phím F1 để tiếp tục hoặc F2 để vào cài đặt BIOS. KHi ta nhấn F1 để tiếp tục thì card test sẽ nhảy tiếp tới FF và khi đó mainboard đã lên bình thường. Ngoài ra khi đã tới code này, đèn numlock đã sáng mà không lên hình thì anh em cần kiểm tra lại Card VGA rời, onboard, dây cáp nối màn hình, màn hình LCD.

Khi ta kích nguồn, nếu loa gắn trên maiboard phát ra tiếp ” bíp ” thì đa phần là mainboard và CPU đã hoạt động. Nếu kông lên hình thì anh em cần kiểm tra lại VGA, card màn hình.

Khi ta kích nguồn cho mainboard và thấy card test main lần lược nhảy các mã code từ Co, C1… D0, D1… EA… 7F rồi tới FF thì đã số là mainboard đã chạy hoàn toàn. Không lên hình thì cũng phải kiểm tra màn hình, card màn hình.

Card test mainboard nhảy code C0, C1.. rồi dừng C5, C6 hay D5, D6, EA thì đa số là lỗi Ram, cần phải vệ sinh sạch sẽ khe RAM, chân RAM (phải đảm bảo RAM còn xài tốt ). Nếu không lên thì cần kiểm tra lại nguồn BUS RAM, hấp hoặc thay chip cầu Bắc.

Mong rằng với những thông tin trên đây sẽ giúp bạn hiểu rõ hơn về card test main laptop.

Đăng bởi

Xây dựng API sử dụng Laravel và GraphQL

Chắc hẳn các bạn đã từng nghe về GraphQL GraphQL là một trong những đứa con của facebook được facebook tạo ra từ năm 2012 và được giới thiệu trước công chúng trong sự kiện React.js Conf 2015 nếu các bạn vẫn chưa biết hoặc muốn hiểu rõ hơn về GraphQL thì có thể tham khảo bài viết tổng quát GraphQL tại ĐÂY bây giờ chúng ta bắt đầu xây dựng một API sử dụng Laravel và GraphQL

Cài đặt và cấu hình GraphQL

Để cài đặt GraphQL chúng ta cần có sẳn một project Laravel sau đó mở file composer.json và thêm vào package sau :

    "require": {
        "folklore/graphql": "~1.0.0"
    },

Sau đó chạy lệnh :

$ composer install

Hoặc

$ composer update

Sau khi Composer update xong ta tiếp tục chạy lệnh :

$  php artisan

Đối với Laravel 5.X chúng ta thêm một service vào provider trong file *app/config/app.php *

Folklore\GraphQL\ServiceProvider::class

Và đăng ký một aliases :

'GraphQL' => Folklore\GraphQL\Support\Facades\GraphQL::class

Và chạy lệnh :

$ php artisan 

Nếu như các phương thức GraphQL xuất hiện như trong hình thì chúng ta đã cài đặt GraphQL thành công :Trong GraphQL gồm có 1 node root là viewer, gồm các lớp :

  • Connections: kết nối đến database
  • Felds: mô tả các fields trong node
  • Types: mô tả kiểu dữ liệu của field
  • Queries: mô tả cách truy vấn graph
  • Mutations: mô tả cách cập nhật graph

Bây giờ chúng ta bắt đầu vào việc tạo một UserType: để tạo UserType chúng ta chạy lệnh sau :

$ php artisan make:graphql:type UserType

Sau khi chạy lệnh thành sẽ xuất hiện một thư mục App một thư mục GraphQL/Type/UserType.php . Chúng ta bắt đầu mô tả các kiểu dữ liệu của User như sau:

class UserType extends BaseType
{
    protected $attributes = [
        'name' => 'User',
        'description' => 'A type'
    ];

    public function fields()
    {
        return [
            'id' => [
                'type' => Type::nonNull(Type::int())
            ],
            'name' => [
                'type' => Type::nonNull(Type::string())
            ],
            'email' => [
                'type' => Type::nonNull(Type::string())
            ],
            'created_at' => [
                'type' => Type::nonNull(Type::string())
            ],
            'updated_at' => [
                'type' => Type::nonNull(Type::string())
            ]
        ];
    }
}

Tiếp theo chúng ta tạo một UserQuery bằng cách chạy lệnh :

$ php artisan make:graphql:query UserQuery

Thư mục GraphQL/Query/UserQuery.php sẽ được tự động ra. tiếp tục chúng ta config như sau :

class UsersQuery extends Query {

    protected $attributes = [
        'name'  => 'User',
    ];

    public function type()
    {
        return Type::listOf(GraphQL::type('user'));
    }

    public function args()
    {
        return [
            'ids'   => [
                'name' => 'ids',
                'type' => Type::listOf(Type::int()),
            ],
        ];
    }

    public function resolve($root, $args, SelectFields $fields)
    {
        $select = $fields->getSelect();
        $with = $fields->getRelations();

        return User::where('id', '=', $args['id'])->with($with)->select($select)->get();
    }

}

Tiếp tục chúng ta tạo file Mutation bằng cách gõ lệnh :

$ php artisan make:graphql:mutation CreateUserMutation

Thư mục GraphQL/Mutation/CreateUserMutation.php sẽ được tự động ra. tiếp tục chúng ta config như sau :

class CreateUserMutation extends Mutation
{
    protected $attributes = [
        'name' => 'CreateUser',
        'description' => 'User mutation'
    ];

    public function type()
    {
        return GraphQL::type('User');
    }

    public function args()
    {
        return [
            'name' => [
                'type' => Type::nonNull(Type::string()),
                'rules' => ['required']
            ],
            'email' => [
                'type' => Type::nonNull(Type::string()),
                'rules' => ['required', 'email', 'unique:users']
            ],
            'password' => [
                'type' => Type::nonNull(Type::string()),
                'rules' => ['required', 'min:6']
            ]
        ];
    }

    public function resolve($root, $args, $context, ResolveInfo $info)
    {

        $user = new User();
        $user->fill($args);
        $user->password = bcrypt($args['password']);
        $user->save();
        return $user;
    }
}

Như vậy công việc tạo GraphQL đã hoàn tất bước cuối cùng là tiến thành config file config/graphql.php như sau :

 'schemas' => [
        'default' => [
            'query' => [
                'user' => App\GraphQL\Query\UserQuery::class,
            ],
            'mutation' => [
                'createUser' => App\GraphQL\Mutation\CreateUserMutation::class,
            ],
            // 'middleware' => []
        ],
    ],
    
    // The types available in the application. You can then access it from the
    // facade like this: GraphQL::type('user')
    //
    // Example:
    //
    'types' => [
        App\GraphQL\Type\UserType::class,
    ],

Như vầy chúng ta đã tiến hành xong các bước để thiết lập GraphQL bây giờ chúng ta truy cập Vào đường dẫn sau:

localhost/blog/public/graphiql

Giao diện xuất hiện:Đây chính là giao diện hiển thị của GraphQL . Bây giờ chúng ta sẽ bắt đầu viết một câu truy vấn đơn giản:

mutation {
    createUser (
        name: "test",
        email: "[email protected]",
        password: "test123"
    ){
        id,
        email
    }
}

Khi nhấn submit kết quả sẽ trả về như trong hình thì chúng ta đã thành công trong việc tạo truy vấn bằng GraphQL :Để truy ngược lại chúng ta làm như sau :

query {
    user(id: 1) {
        name,
        email
    }
}
Đăng bởi

Biến ứng dụng Laravel của bạn trở nên phức tạp hơn với gRPC

gRPC là gì ?

Chắc hẳn khi mới đọc tiêu đề, nhiều bạn thắc mắc tại sao lại biến ứng dụng đơn giản trở nên phức tạp để làm gì không biết, nhưng thực ra việc phức tạp này sẽ mang lại cho chúng ta rất nhiều lợi ích, với những ứng dụng nhỏ thì gRPC chưa thực sự cần thiết, tuy nhiên áp vào các ứng dụng lớn, cần được mở rộng trong tương lai, việc chuyển đổi từ REST sang gRPC đem lại hiệu quả rất lớn.

RPC

RPC, đó là chữ viết tắt của Remote Procedure Calls (tạm dịch là các cuộc gọi thủ tục từ xa), là một khái niệm nhằm cố gắng khái quát một lời gọi thủ tục thông thường trong trường hợp mà caller và receiver không cùng nằm trong một process – và được phân tán trên các máy riêng biệt. Việc này có ý nghĩa rất quan trọng vì trong các hệ thống phân tán (distributed system), application code ở nhiều server hơn là một server. Ví dụ thường thấy nhất chính là kiến trúc Microservice.

gRPC

Tối ưu cho việc “giao tiếp” giữa các server là lý do gRPC ra đời.

gRPC là một RPC framework gíup bạn kết nối giữa các service trong hệ thống, nó hỗ trợ load balancing, tracing, health checking và authentication, hỗ trợ từ ứng dụng mobile, trình duyệt cho tới back-end service, do Google phát triển.

Để giải bài toán trên, gRPC đã sử dụng binary để truyền đi thay vì phải encode chúng thành các ngôn ngữ trung gian JSON/XML. Việc này rõ ràng đã làm tăng tốc giao tiếp các servers lên rất nhiều, giảm overhead cho CPUs.

Thứ giúp gRPC giao tiếp binary ngon vậy chính là http/2, đây vốn là giao thức có rất nhiều cải tiến so với http/1.1

Sử dụng gRPC trong PHP

Không giống như Java, Go, hay Ruby,… PHP hiện tại chưa được chính Google hỗ trợ xây dựng SDK để dựng thành 1 gRPC server. Vì thế chúng ta muốn sử gRPC cho server thì cần thông qua 1 framework gọi là RoadRunner.

RoadRunner là 1 framework ở tầng infrastructure cho các ứng dụng PHP, nó được viết bằng Golang. Công việc của RoadRunner là chạy PHP dưới dạng các worker

Golang sẽ giúp RoadRunner chạy PHP app trên goroutine và hỗ trợ cân bằng tải trên các worker.

RoadRunner sẽ giữ các PHP worker luôn alive giữa các request, tránh việc tái khởi đọng lại app và tăng tốc cho các ứng dụng lớn. PHP worker được đặt trong resident memory, và luôn sẵn sàng cho request tiếp theo. RoadRunner còn sử dụng Goridge RPC sẽ giúp đẩy nhanh tốc độ load của ứng dụng lên server.

Cài đặt gRPC

Trước khi bắt đầu implement gRPC cho ứng dụng Laravel thì chúng ta setup môi trường development cho đủ các công cụ cần thiết

  • gRPC PHP extension
  • Google Protobuf
  • Google Protobuf compiler cho PHP server
  • Roadrunner

gRPC PHP extension

Việc cài thêm extension khá đơn giản, bạn chỉ cần sử dụng PECL và chạy lệnh

$ sudo pecl install grpc

Tuy nhiên nếu máy bạn có cài nhiều version PHP thì sẽ phức tạp hơn chút, mình đã gặp issue khi cài grpc là extension được build xong, khi sử dụng trong php.ini thì PHP không tìm thấy extension. Mình khắc phục bằng cách gỡ bỏ extension cũ và cài bằng lệnh này

$ sudo pecl php_suffix=7.4 install grpc 

thật (magic) PECL sẽ compile extension cho đúng phiên bản PHP mà bạn đang chọn là PHP 7.4

Cuối cùng bạn tìm file php.ini và thêm dòng này vào extension=grpc.so

Google Protobuf

Protocol buffer còn được biết như protobuf là language-neutral, platform-neutral của google phiên bản nội bộ được công bố vào năm 2001 và phiên bản công khai đầu tiên được giới thiệu vào năm 2008 ( Repository ), về cơ bản nó được sủ dụng để Serialized object, có vẻ nó khá giống XML hoặc JSON. Nó lưu trữ dữ liệu có cấu trúc có thể được Serialize hoặc De-Serialized tự động bưởi nhiều ngôn ngữ khác nhau. Nó được thiết kế để trở thành language/platform neutral và có thể mở rộng.

Việc cài protobuf cũng tương tự gRPC , bạn chạy command sau và rồi thêm dòng extension=protobuf.so vào php.ini

$ sudo pecl install protobuf

Google Protobuf compiler cho PHP server

Bởi vì gRPC chưa trực tiếp hỗ trợ các server viết bằng PHP nên với PHP chúng ta sử dụng 1 plugin để compile các file .proto cho PHP server

$ go get github.com/spiral/php-grpc/cmd/protoc-gen-php-grpc

để protoc có thể tìm thấy plugin mà bạn vừa kéo về thì bạn thêm vào file .zshrc (nếu đang dùng zsh) hoặc .bashrc 2 dòng này

export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin

đây là 1 pre-build binary để gen proto file, để sử dụng nó ta chỉ cần thêm plugin đó trong command compile ví dụ:

$ protoc --php_out=target-dir/ --php-grpc_out=target-dir/ sample.proto

Roadrunner

RoadRunner sẽ hỗ trợ bạn serve ứng dụng lên, tương tự nhưng artisan trong Laravel ý, bạn chỉ cần tải file rr-grpc về và để vào thư mục root của app

RoadRunner sẽ hỗ trợ bạn serve ứng dụng lên, tương tự nhưng artisan trong Laravel ý, bạn chỉ cần tải file rr-grpc về và để vào thư mục root của app

Implement gRPC server

Trong bài viết này mình sẽ implement gRPC cho phía server bằng PHP, và sử dụng luôn framework Laravel chọn xịn xò =))

Init project

Đầu tiền chúng ta cần init project

$ composer create-project laravel/laravel grpc-php-server

sau đó chúng ta cần cài thêm các package cần thiết như spiral/php-grpcgoogle/common-protos,… thành phẩm chúng ta sẽ có 1 file composer.json như này

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "php": "^7.4|^8.0",
        "ext-grpc": "^1.37",
        "fideloper/proxy": "^4.4",
        "fruitcake/laravel-cors": "^2.0",
        "google/common-protos": "^1.3",
        "google/protobuf": "^3.16",
        "grpc/grpc": "^1.36",
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/framework": "^8.12",
        "laravel/tinker": "^2.5",
        "nyholm/psr7": "^1.4",
        "spiral/php-grpc": "^v1.5.0",
        "spiral/roadrunner": "^1.9",
        "spiral/roadrunner-laravel": "^3.7",
        "ext-json": "*"
    },
    "require-dev": {
        "facade/ignition": "^2.5",
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.3.3",
        "spiral/dumper": "^1.1.7"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "": "protos/generated/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "platform": {
            "php": "7.4.18"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

Trong file composer.json này mình có bổ sung thêm

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "": "protos/generated/"
        }
    },

mục đích là để load thêm các file được compile từ Protobuf vào project.

Tạo auth.proto

Mục đích của file này là giúp define ra các service và cấu trúc request/response. File này sẽ được viết bằng Protobuf hay Protocols Buffer, là một ngôn ngữ dùng để mô tả các cấu trúc dữ liệu, chúng ta dùng protoc để biên dịch chúng thành mã nguồn của các ngôn ngữ lập trình khác nhau có chức năng serialize và deserialize các cấu trúc dữ liệu này thành dạng binary stream.

syntax = "proto3";

package protobuf.identity;

option php_metadata_namespace = "Protobuf\\Identity\\Metadata";

service AuthService {
    rpc SignIn (SignInRequest) returns (Response) {}
    rpc SignUp (SignUpRequest) returns (Response) {}
}

message SignInRequest {
    string email = 1;
    string password = 2;
}

message SignUpRequest {
    string name = 1;
    string email = 2;
    string password = 3;
    string password_confirmation = 4;
}

message Response {
    int64 id = 1;
    string token = 2;
}

Trong file này đơn giản chỉ định nghĩa service AuthService sẽ có 2 method rpc là SignIn và SignUp, chúng nhận vào tham số message được define theo cấu trúc ở bên dưới.

Sau khi đã tạo file auth.proto chúng ta cần phải compile chúng ra thành các file để sử dụng trong project, bằng command:

$  protoc --php_out=./protos/generated/ --php-grpc_out=./protos/generated/ ./protos/auth.proto

như vậy là chúng ta sẽ có file source code nằm trong thư mục protos/generated như sau: 

đây cũng là thư mục mà mình bổ sung vào trong file composer.json ở trên đấy

Implement logic cho AuthServiceInterface

Sau khi sử dụng protoc để có được file AuthServiceInterface, chúng ta đơn giản chỉ cần tiến hành implement logic cho các func trong service thôi

<?php

namespace App\Grpc\Controllers;

use Protobuf\Identity\AuthServiceInterface;
use Protobuf\Identity\Response;
use Protobuf\Identity\SignInRequest;
use App\Grpc\Contracts\Validator;
use Illuminate\Contracts\Hashing\Hasher;
use Spiral\GRPC\Exception\InvokeException;
use Spiral\GRPC\StatusCode;
use Protobuf\Identity\SignUpRequest;
use Throwable;
use Spiral\GRPC\ContextInterface;

class AuthController implements AuthServiceInterface
{
    /**
     * Input validator
     *
     * @var Validator
     */
    protected Validator $validator;

    /**
     * Hasher
     *
     * @var Hasher
     */
    protected Hasher $hasher;

    /**
     * Create new instance.
     *
     * @param  Validator $validator
     * @param  Hasher $hasher
     */
    public function __construct(Validator $validator, Hasher $hasher)
    {
        $this->validator = $validator;
        $this->hasher = $hasher;
    }

    /**
     * @param ContextInterface $ctx
     *
     * @param  SignUpRequest $request
     * @return Response
     * @throws Throwable
     */
    public function SignUp(ContextInterface $ctx, SignUpRequest $request): Response
    {
        $data = json_decode($request->serializeToJsonString(), true);

        $this->validator->validate($data, [
            'email' => 'bail|required|email',
            'name' => 'required|max:255',
            'password' => 'required|confirmed',
        ]);

        $response = new Response();

        $response->setId(1);
        $response->setToken("token"); //TODO use jwt to handle token base auth

        return $response;
    }

    /**
     * @param ContextInterface $ctx
     * @param SignInRequest $in
     * @return Response
     * @throws Throwable
     */
    public function SignIn(ContextInterface $ctx, SignInRequest $in): Response
    {
        $data = json_decode($in->serializeToJsonString(), true);

        $this->validator->validate($data, [
            'email' => 'required|email',
            'password' => 'required|min:6',
        ]);

        $response = new Response();

        $response->setId("1");
        $response->setToken("token"); //TODO using jwt to handle token base auth

        return $response;
    }
}

đơn giản vậy thôi là chúng ta đã xong phần logic cho các method rpc của app rồi

Implement PHP worker

Phần quan trọng nhất đây rồi.

Chúng ta sử dụng RoadRunner để serve các PHP worker lên và lắng nghe các rpc nên PHP worker là 1 thành phần quan trọng trong ứng dụng của bạn

<?php

use Spiral\RoadRunner\Worker;
use Spiral\Goridge\StreamRelay;

ini_set('display_errors', 'stderr');

require __DIR__ . '/vendor/autoload.php';

$app = require_once __DIR__ . '/bootstrap/app.php';

$app->singleton(
    App\Grpc\Contracts\Kernel::class,
    App\Grpc\Kernel::class
);

$app->singleton(
    App\Grpc\Contracts\ServiceInvoker::class,
    App\Grpc\LaravelServiceInvoker::class
);

$kernel = $app->make(App\Grpc\Contracts\Kernel::class);

$kernel->registerService(Protobuf\Identity\AuthServiceInterface::class);

$w = new Worker(new StreamRelay(STDIN, STDOUT));

$kernel->serve($w);

Khi đã có PHP worker rồi, chúng ta sẽ sử dụng rr-grpc đã tải về ở trên để serve app lên thôi. rr-grpc có yêu cầu file config như sau:

grpc:
  listen: "tcp://127.0.0.1:9001"  # Define host cho service
  proto: "protos/auth.proto"      # Define rõ file proto ở đâu
  workers:
    command: "php worker.php"      # Start worker từ file worker vừa tạo ở trên
    pool:                          # Cấu hình số lượng worker và số lượng job tối đa
      maxJobs: 1
      numWorkers: 1

Bây giờ chúng ta chạy command: ./rr-grpc -c .rr.yaml serve -v -d là xong 

server đã sẵn sàng lắng nghe các yêu cầu từ client rồi

Cấu trúc thư mục hoàn chỉnh

Tạm kết

Như vậy là chúng ta đã implement được phía server, do bài viết đã dài nên mình tạm kết ở đây, trong bài viết tới mình sẽ tiếp tục implement phía client, làm cách nào để client có thể giao tiếp với server thông qua gRPC.

Demo

Đăng bởi

Mini App là gì? Mini App mang lại những lợi ích nào cho doanh nghiệp?

mini app - tini app - tiki

Với sự phát triển của những gã khổng lồ công nghệ như “Super App” WeChat, Alibaba, LINE hay Shopee, khái niệm “Mini App” hẳn đã không còn xa lạ với cộng đồng công nghệ. Tuy nhiên, đứng về khía cạnh doanh nghiệp, Mini App mang lại ý nghĩa, lợi ích của Mini App là gì? Và đặc biệt hơn, làm thế nào để Mini App có thể tiếp cận hàng triệu traffic cho một doanh nghiệp vừa – nhỏ và Startup?

Hàng triệu lượt truy cập nghe có vẻ… hoang đường, nhưng hoàn toàn có thể, vì Mini App của WeChat đã làm được câu chuyện đó (với con số thậm chí là hàng trăm triệu traffic… mỗi ngày). Doanh nghiệp của bạn cũng có thể đạt được thành công đó, chỉ cần nắm được cách thức thực hiện.

Để tìm hiểu thêm về Mini App là gì và vì sao doanh nghiệp nên cân nhắc phát triển Mini App, ITviec đã có buổi trò chuyện với nhiều thông tin vô cùng thú vị với anh Lâm Vương – Technical Lead, và anh Nguyễn Trung Kiên – Director of Engineering, cùng làm việc tại TIKI.

Mini app là gì?

Mini app về bản chất cũng chỉ là một ứng dụng chạy trên một nền tảng. Điểm khác biệt ở đây là “nền tảng” mà Mini app chạy trên đó lại chính là một ứng dụng khác (hay còn gọi là ứng dụng chủ, app chủ). Khi số lượng Mini app đạt đến một con số đủ để tạo thành một hệ sinh thái mà người dùng có thể sử dụng hằng ngày, liền mạch cho mọi nhu cầu liên quan thì những ứng dụng chủ này sẽ được gọi là Super App – siêu ứng dụng.

mini app airasia

Super App là một ứng dụng cho tất cả nhu cầu của người dùng. Nguồn ảnh: Airasia.

Có nhiều cách để doanh nghiệp phát triển Mini App trên App chủ, như:

  • Cách 1: Mini App thuộc quyền sở hữu của App chủ và do chính App chủ phát triển, ví dụ: Shopee, Grab. Cách làm này giúp các developer của app chủ có thể truy cập vào source code để phát triển mini app. Tuy nhiên, không phải ứng dụng nào cũng có đủ nguồn lực về người và về tài chính để làm theo cách này. Với hình thức này, App chủ sẽ không cần đối tác.
  • Cách 2: Doanh nghiệp tự phát triển ứng dụng và tìm giải pháp để đưa vào app chủ. Ví dụ như sử dụng WebView.
  • Cách 3: Doanh nghiệp được phép truy cập vào source code của App chủ và tự code Mini App. Tuy nhiên, cách làm này sẽ làm ảnh hưởng đến tính bảo mật của App chủ nên sẽ khó được áp dụng.
  • Cách 4: Doanh nghiệp hợp tác với App chủ để tạo Mini App và hiển thị trên App chủ thông qua các công cụ phát triển ứng dụng do App chủ cung cấp, ví dụ như WeChat, Zalo, MoMo, TIKI. Cách làm này đơn giản, tiện lợi cho các doanh nghiệp hơn vì họ có thể quản lý trực tiếp ứng dụng của mình.

Mini App có thể là giải pháp phù hợp cho những doanh nghiệp đang có nhu cầu mở rộng tệp người dùng, tăng độ nhận diện thương hiệu và tăng traffic dẫn về ứng dụng.

Lợi ích của Mini app đối với doanh nghiệp?

  • Tiết kiệm nguồn lực phát triển sản phẩm

Theo anh Kiên chia sẻ, thời gian phát triển sản phẩm được rút ngắn đáng kể khi doanh nghiệp phát triển Mini App trên App chủ nhờ vào những bộ công cụ sẵn có, framework được thiết kế riêng cũng như nhiều components UI hữu ích.

Đồng thời, khi phát triển Mini App trên nền tảng Super App, doanh nghiệp có thể dễ dàng chỉ cần code một lần nhưng lên được nhiều nền tảng. Thông thường, một ứng dụng cần ít nhất hai người Developer, mỗi người riêng biệt cho hệ điều hành Android và iOS, hoặc/và cần thêm một người phát triển website. Còn đối với Mini App, doanh nghiệp chỉ cần đúng một người Developer là đã có thể phát triển được sản phẩm cả 3 nền tảng nhờ vào code platform mà App chủ cung cấp. Từ đó, doanh nghiệp có thể tiết kiệm được nhân lực và chi phí.

Khi thời gian và nhân lực được tối ưu hóa, chi phí phát triển sản phẩm cũng sẽ được tiết kiệm tối đa.

  • Được tiếp cận với tập người dùng sẵn có từ Super App

mini app wechat

WeChat Mini Program.

Dựa trên số liệu chính thức từ WeChat, trong tháng 1/2022, số lượng người dùng active mỗi ngày của WeChat là gần 1 tỷ người dùng, trong đó có 450 triệu người dùng mỗi ngày truy cập vào các ứng dụng Mini App thuộc WeChat Mini Programs. Số lượng ứng dụng Mini App hiện nay của WeChat đã vượt qua con số 3 triệu Mini App. Quả là những con số biết nói.

Với số lượng người dùng active mỗi ngày lớn như vậy, bất kỳ doanh nghiệp nào cũng sẽ muốn tiếp cận và tương tác dù chỉ là vài phần trăm của con số đó. Đó cũng chính là điểm hấp dẫn lớn nhất đối với doanh nghiệp khi lựa chọn phát triển Mini App trên Super App.

  • Tận dụng hệ sinh thái sẵn có từ Super App

Hệ sinh thái sẵn có của Super App cũng là một điểm thu hút khác đối với doanh nghiệp. App chủ sẵn sàng cung cấp cho doanh nghiệp những tiện ích sẵn có như thanh toán, giao nhận, quảng bá chiến dịch, trải nghiệm tương tác, chat với người bán,… để doanh nghiệp chỉ cần tập trung vào việc phát triển sản phẩm cho thật tốt.

  • Nâng cấp giải pháp trải nghiệm người dùng

Nhờ vào hệ sinh thái sẵn có của các App chủ, khách hàng của Mini App sẽ được trải nghiệm quy trình khách hàng liền mạch từ khâu lựa chọn, giao dịch, thanh toán, theo dõi đơn hàng, hỗ trợ khách hàng,… mà không cần phải phát triển quy trình từ con số 0. Từ đó, giúp tăng tỷ lệ quay lại (return rate) của khách hàng đối với Mini App.

  • Mini App có thể “tách ra” nếu đã đủ lớn mạnh

Mini App có thể đóng vai trò như là một “bước đệm thử” của doanh nghiệp khi mới bắt đầu tiến vào thị trường. Khi bạn cảm thấy sản phẩm của bạn đã đủ hoàn thiện, có lượt khách hàng quay lại tương đối ổn định và đạt kỳ vọng, bạn hoàn toàn có thể tự xây dựng Native App nếu có nhu cầu.

Anh Lâm bổ sung thêm nhận định: “Doanh nghiệp sẽ không chọn Super App để sống hoài với họ vì một doanh nghiệp không thể sống phụ thuộc vào một doanh nghiệp khác mãi được.

Tuy nhiên, khi tách ra, doanh nghiệp cần phải giải quyết những bài toán khác về công nghệ và nguồn lực – những bài toán vốn dĩ đã được App chủ “lo lắng” giúp trước đây, nên vẫn có nhiều doanh nghiệp chọn ổn định với Super App. Đồng thời, với những Super App có lượt traffic “khủng”, như WeChat, hẳn doanh nghiệp có thể chọn ở lại và phát triển thêm Native App nếu cần thiết.

So sánh giữa Mini App – PWA – Native app

Về nhận định liệu Mini App có thay thế PWA hay Native App hoặc ngược lại không, anh Lâm khẳng định rằng,

Mini App, Progressive Web App (PWA) và Native App đều có những ưu điểm và nhược điểm riêng. Trừ khi nào Native App có code platform thì mới thay thế được Mini App, còn không thì khó mà thay thế được.

Anh Lâm cũng chỉ ra những ưu và khuyết điểm của từng dạng sản phẩm:

 Mini AppPWANative App
Định nghĩaBản chất vẫn là app. Điểm khác biệt là chạy trên một app khác.Làm cho một web giống một cái app hơn. Giống native app nhưng hiển thị ở web.Là “đỉnh cao” của sản phẩm ứng dụng.
Thời gian phát triển sản phẩm nhanhNhanh nhì. Thời gian phát triển sản phẩm nhanh nhưng không nhanh bằng PWA, do cũng tùy thuộc vào công nghệ mình muốn phát triển. Tuy nhiên, lại tiết kiệm được nhiều thời gian hơn so với Native App vì code một lần chạy được trên đa nền tảng.Thời gian phát triển sản phẩm nhanh nhất vì code web rất nhanh. Đồng thời, cũng không cần thời gian deploy, đưa lên app store hoặc app chủ như Native App và Mini App.Với những ai đã có web rồi thì đỡ tốn thời gian build thêm app, cứ chạy thẳng trên web thôi.Thời gian phát triển sản phẩm lâu nhất.
Chất lượng hiệu suấtChất lượng sản phẩm khá tốt do app chủ đã hỗ trợ hết.Chất lượng sản phẩm kém nhất trong 3 hình thức vì hiệu suất tối đa cũng chỉ như một web bình thường.Ưu điểm là web app trở nên thân thiện hơn với mobile:– Lưu thông tin như một app bình thường– Chạy background.Hiệu suất tốt nhất.
Quản lý chất lượngApp chủ sẽ là cơ quan chủ quản quản lý chất lượng.Người sở hữu web, webmaster, sẽ là người quản lý chất lượng.Team Developer của doanh nghiệp chịu trách nhiệm quản lý chất lượng với thang đo chất lượng do người dùng công chúng đánh giá.
Xét về mặt phát triển sản phẩm doanh nghiệp nên sử dụng giải pháp nào cho bài toán nào?Mini App dành cho những doanh nghiệp muốn làm ra ứng dụng trong thời gian nhanh và chi phí tiết kiệm, tiếp cận lượng khách hàng nhanh chóng.PWA dành cho những doanh nghiệp không quan trọng về mặt ứng dụng, có cũng được, không có cũng được.Native App dành cho những doanh nghiệp muốn quản lý tất cả, mọi công nghệ đều thuộc về mình.

Doanh nghiệp cần lưu ý điều gì khi chọn “App chủ” cho Mini App?

Anh Lâm chia sẻ: “Khi lựa chọn Super App để “cộng sinh”, điều quan trọng nhất mà doanh nghiệp cần lưu ý chính là hệ sinh thái của Super App đó phù hợp với Mini App mà mình muốn phát triển hay không.

Xét về mặt lý thuyết, doanh nghiệp có thể chọn bất kỳ Super App nào để hợp tác phát triển, miễn là họ đáp ứng được các yêu cầu về mặt công nghệ. Tuy nhiên, để tối ưu được hoạt động của Mini App, doanh nghiệp vẫn nên chọn những “App chủ” có hệ sinh thái gần với những gì mình đang tìm kiếm.

Ví dụ: Nếu bạn mong muốn phát triển sản phẩm về E-Commerce, những Super App như TIKI, Lazada hay Shopee chắc chắn sẽ phù hợp với bạn về mặt hệ sinh thái hơn là Zalo hay MoMo.

Điều thứ hai mà anh Lâm chia sẻ chính là hãy xem xét những công cụ (ví dụ như bộ components UI) mà Super App đó cung cấp cho đối tác đầy đủ hay không, công nghệ dễ áp dụng hay không.

Điều cuối cùng là liệu Super App mình muốn cộng tác có sẵn sàng hỗ trợ những vấn đề xuất hiện trong quá trình phát triển Mini App hay không.

Tổng quan về Tini App của TIKI

mini app - tini app - tiki

Xây dựng Mini App với TIKI.

Nếu doanh nghiệp đang mong muốn phát triển Mini App theo cách 4 đã giới thiệu ở trên, bạn có thể tìm hiểu thêm về chương trình Tini App do TIKI phát triển.

Tini App – tên gọi của các Mini App thuộc TIKI, là chương trình phát triển Mini App dành cho đối tác muốn hợp tác với TIKI. Tini App ra mắt vào năm 2021 và sau hơn 1 năm ra mắt, Tini App đã nhận về hơn 20 Mini App thuộc nhiều nhóm ứng dụng khác nhau như Tài chính điện tử (Fintech), Mua sắm, Game,…

Đồng thời, Tini App có đội ngũ Developer TIKI luôn sẵn sàng hỗ trợ đội ngũ phát triển của doanh nghiệp bất kỳ khi nào có thắc mắc, cần trợ giúp. Trong năm 2021, TIKI với cuộc thi TIKI Hackathon dành riêng cho Developer phát triển ứng dụng Mini App với Tini App đã góp phần xây dựng một cộng đồng nhà phát triển với nhiều ý tưởng mới lạ, kinh nghiệm thực tế và cùng nhau phát triển ứng dụng.

Tini App của TIKI có thể giải quyết những bài toán nào?

Đối với doanh nghiệp, Tini App có thể mang lại những ưu điểm:

  • Doanh nghiệp có thể tự phát triển sản phẩm trên nền tảng TIKI với thời gian phát triển sản phẩm nhanh, chi phí rẻ
  • Cung cấp hệ sinh thái sẵn có (như thanh toán, vận chuyển, chat với người bán,…), vô cùng phù hợp với những Mini App thuộc nhóm mua sắm
  • Tập người dùng active mỗi ngày lớn và sẵn có của TIKI: Khoảng ~100,000 Active Users mỗi ngày.

Nhờ vào kiến trúc Dual Thread, Tini App có thể giúp Mini App được phát triển với thời gian ngắn hơn, hiệu suất tốt hơn và hoạt động độc lập với TIKI app. Đối với nhà phát triển, Tini App mang đến giải pháp phát triển ứng dụng toàn diện với bộ công cụ bao gồm:

Công cụĐịnh nghĩaCông dụng
Tini ConsoleLà “cửa ngõ” để tạo Mini App.Tạo ra app, quản lý version, quản lý app, phân quyền trong app.
Tini Studio (IDE)Nơi dùng để code một Mini App.Tini Studio có simulator để simulate (giả lập) app đó sẽ hoạt động như thế nào trước khi đẩy lên local host.
Dev AssistantCông cụ để kiểm tra vận hành của Mini App trên ứng dụng TIKI.Khác với Tini Studio – chỉ có thể giả lập khi chạy mỗi Mini App, Dev Assistant giúp Developer “xem thử” Mini App sẽ chạy như thế nào trên môi trường TIKI app.
Tini Design SystemHệ thống vẽ UI-UX và flow Tini app dành cho designer.Tini Design System do chính team UI-UX của Tini app phân tích và hệ thống thành các flow quen thuộc (thanh toán, log in, tìm kiếm và khám phá sản phẩm). Designer có thể dùng Tini Design System để vẽ UI.
Tini UIBộ thư viện phát triển UI theo Tini Design System dành cho Developer.Tini UI hiển thị flow, các bước, UI được có sẵn thiết kế theo Tini Design System.

Quy trình phát triển Tini App với bộ công cụ:

mini app - tini app - tiki

Quy trình phát triển TINI App với TIKI.

Anh Kiên chia sẻ thêm: “Nhờ vào UI thân thiện, Developer dù ở level nào cũng có thể phát triển Mini App với TIKI. Đối với những Senior Developer đã có kinh nghiệm phát triển Native App thì sẽ còn nhanh hơn vì các bạn đã có sẵn mindset phát triển sản phẩm đúng đắn, dễ dàng chuyển đổi.”

Một vài ứng dụng Mini App đã được tạo ra với Tini App và đang chạy ổn định như:

  • DoriDori – Nền tảng Recommerce đầu tiên tại Việt Nam
  • Hexa: Reach the Star – Trò chơi ghép hình được yêu thích
  • Tefal Club – Nơi chia sẻ công thức và video nấu ăn cho mọi gia đình

Tham khảo thêm những ứng dụng được tạo ra từ bộ công cụ Tini App tại trang TINI Showcase.

Hướng phát triển của Tini App trong tương lai

Trong tương lai xa hơn, theo như chia sẻ từ anh Lâm và anh Kiên, TIKI sẽ muốn “biến” Tini App thành một bộ công cụ phát triển ứng dụng có thể được sử dụng ngay cả bên ngoài nền tảng của TIKI. Developer chỉ cần tải bộ công cụ Tini App về và phát triển Native App mà họ mong muốn. TIKI hướng đến mục tiêu phát triển Tini App trở thành bộ công cụ giúp Developer chỉ cần code một lần và có thể chạy trên nhiều nền tảng khác nhau.

Còn đối với tương lai gần dành cho doanh nghiệp đang phát triển Mini App với TIKI, TIKI mong muốn có thể cung cấp thêm các giải pháp về Marketing ngay trên TIKI cho đối tác bằng cách xây dựng công cụ giải pháp về Marketing – Targeting và Retargeting. Trong tương lai gần, đối tác có thể thực hiện những giải pháp quảng cáo như hiển thị banner, gửi notification,…

Cùng với sự phổ biến ngày càng tăng của Super App, các Mini App liên tục ra đời đã làm thay đổi toàn cảnh “bức tranh lớn” về phát triển ứng dụng hiện nay. Đồng thời, chúng còn thay đổi hành vi của người dùng. Có thể trong tương lai, tải xuống và đăng ký/ đăng nhập sẽ không còn những thao tác đầu tiên mà người dùng sẽ làm khi tiếp cận với một ứng dụng mới nữa.

Dù bạn nhìn nhận nó theo cách nào, thì ở cấp độ doanh nghiệp, Super App và Mini App là câu chuyện không thể nào “ngó lơ” được nữa, nhất là với tốc độ phát triển của Super App ở châu Á.

Đăng bởi

Siêu ứng dụng là gì? Việt Nam có phải là “vùng đất hứa” để phát triển siêu ứng dụng không?

siêu ứng dụng - super app việt nam - nguyễn trung kiên - tiki - itviec

Một thuật ngữ công nghệ mới đang nổi lên từ phương Đông – “Siêu ứng dụng”, hay còn gọi là Super App. Hầu hết tất cả những người sinh sống ở châu Á, và sở hữu một chiếc điện thoại thông minh, đều dành phần lớn thời gian sử dụng những ứng dụng này. Vậy chính xác thì siêu ứng dụng là gì và Việt Nam có đang sở hữu một siêu ứng dụng mang tính cách mạng hay không?

Để có thể tìm hiểu thêm về tình hình phát triển Siêu ứng dụng ở Việt Nam cũng như các nước trên thế giới, ITviec đã có buổi chia sẻ thông tin đầy bổ ích với anh Nguyễn Trung Kiên – Director of Engineering tại TIKI.

Siêu ứng dụng là gì?

1. Định nghĩa

Hiện nay, chưa có một khái niệm chung cụ thể cho siêu ứng dụng là gì nên ITviec sẽ mượn định nghĩa do Phó Chủ tịch Kỹ thuật Cấp cao của GoJek – Sidu Ponnappa, đã đưa ra: “Siêu ứng dụng (Super App) là một ứng dụng chứa nhiều app con (Mini Apps), và là một hệ điều hành điều phối những app con này.”

Hay như nhà sáng lập BlackBerry – Mike Lazaridis, đã định nghĩa: “Siêu ứng dụng là một hệ sinh thái khép kín gồm nhiều ứng dụng mà mọi người sẽ sử dụng hàng ngày vì chúng mang lại trải nghiệm liền mạch, tích hợp, theo ngữ cảnh và hiệu quả.”

Còn theo anh Kiên, để trở thành một “siêu ứng dụng”, ứng dụng đó cần phải đáp ứng hai điều kiện:

  1. Số lượng người dùng phải lớn. Không có một số lượng người dùng cụ thể nào được xét làm quy chuẩn chung mà phải tùy thuộc vào ngành nghề, hoặc công ty, và tập người dùng mà ứng dụng đó muốn hướng tới. Điều quan trọng phải đảm bảo là siêu ứng dụng làm ra phải giải quyết được bài toán của người dùng và được họ chọn sử dụng.
  2. Số lượng tính năng/ mini-apps trong một siêu ứng dụng phải lớn, có thể lên đến hàng nghìn, hàng triệu ứng dụng con.

Dựa trên khái niệm trên, hiện nay trên thị trường có 2 hướng tiếp cận phổ biến khi phát triển:

  1. Hướng tiếp cận 1: Đội ngũ phát triển trong nội bộ công ty  xây dựng nhiều tính năng trong một ứng dụng để phục vụ người dùng. Ví dụ như ứng dụng MoMo, Grab, GoJek, hay website dịch vụ Yahoo!,…
siêu ứng dụng - super app - momo
Ứng dụng MoMo. Nguồn: @MoMo
  1. Hướng tiếp cận 2: Chuyển đổi thành nền tảng cung cấp API để cộng đồng bên ngoài có thể phát triển ứng dụng của họ trên nền tảng này. Ví dụ như ứng dụng WeChat. Hiện nay ở Việt Nam thì chưa có ứng dụng nào đi theo hướng tiếp cận tương tự.
siêu ứng dụng - super app - wechat
Hệ sinh thái của siêu ứng dụng WeChat. Nguồn: @WeChat Wiki

“Dù là theo hướng tiếp cận nào, nhà phát triển siêu ứng dụng cũng cần phải xác định được phương pháp mình đưa ra có giải được bài toán của khách hàng, người dùng hay không”, anh Kiên khẳng định.

Một phần mềm muốn trở thành một siêu ứng dụng thì phải đi từ dưới lên, không có con đường tắt. Có nghĩa, phần mềm đó cần phải đi theo chiến lược phát triển như sau:

  1. Phát triển một tính năng chủ đạo (core feature) để xây dựng tập người dùng đủ lớn, tần suất sử dụng cao.
  2. Sau đó, nghiên cứu hành vi người dùng kỹ càng, hiểu rằng tập người dùng còn có những vấn đề nào, nhu cầu gì mà mình có thể giải quyết giúp họ.
  3. Sau khi đã thu thập đầy đủ thông tin của người dùng thì mới có thể phát triển thành một siêu ứng dụng hữu ích mà cộng đồng có thể tin tưởng và chọn sử dụng.

Thoạt nghe, đây là một chiến lược dễ dàng. Nhưng để xây dựng được một ứng dụng, phục vụ một tập người dùng nhỏ trong xã hội thôi đã là một bài toán vô cùng phức tạp với nhà phát triển rồi. Vậy thì để phát triển thành một siêu ứng dụng, các doanh nghiệp phải có chiến lược tính bằng 5 năm, thậm chí 10 năm, không đơn thuần là chỉ vài tháng hoặc vài năm mà có thể thành công được.

Ta có thể thấy ví dụ từ Grab – thành lập vào năm 2012 chỉ với tính năng đặt xe taxi online. Mãi đến năm 2015, Grab mới cho ra mắt GrabExpress (Grab Giao hàng). Đến năm 2016, GrabPay và GrabFood ra đời. Đến năm 2019, Grab mới được “công nhận” là một trong những siêu ứng dụng đang phát triển mạnh mẽ ở Đông Nam Á. Và đến nay, thành công của Grab trong lĩnh vực phần mềm là không thể chối cãi. Để đạt được đến thành tựu này, hành trình phát triển của Grab cũng ngót nghét mất 10 năm.

siêu ứng dụng - super app - grab
Một hệ sinh thái liền mạch của Grab. Nguồn: @e27.co

2. Những ai nên sử dụng

Đối với siêu ứng dụng theo hướng tiếp cận 1, người được hưởng lợi nhiều nhất đương nhiên là người dùng. Họ sẽ được tiếp cận với nhiều tính năng hơn, giải quyết được nhiều nhu cầu trong cuộc sống hơn (thanh toán, dịch vụ, mua sắm,…) mà không cần phải liên kết với nhiều bên khác nhau.

Đối với siêu ứng dụng hướng tiếp cận 2, đối tượng nên sử dụng sẽ là những nhà phát triển ứng dụng (developer). Khi nhu cầu phát triển phần mềm của thị trường tăng cao, đặc biệt là các công ty startup muốn phát triển phần mềm nhưng nguồn lực về công nghệ, chi phí, thời gian, tập người dùng lại có hạn thì các nền tảng mở theo hướng tiếp cận 2 lại chính là “cứu cánh” của họ.

Nếu bạn là một startup đang phân vân nên tự tạo phần mềm riêng lẻ hay tận dụng nền tảng mở của siêu ứng dụng thì bạn có thể cân nhắc theo các yếu tố như sau:

Tiêu chíỨng dụng riêng lẻ (Multiple Apps)Siêu ứng dụng (Super App)
Thời gian phát triểnSử dụng nhiều thời gian để phát triển ứng dụng. Ví dụ, phải phát triển cho cả nền tảng iOS và Android.Tiết kiệm thời gian do chỉ cần phát triển trên nền tảng mở, còn lại sẽ được siêu ứng dụng tự động hóa.
Chi phíBạn đẩy lên Google Play hay Apple Store thì bạn sẽ tốn chi phí để thu hút người dùng.Tiết kiệm được chi phí này.
Công nghệXây dựng từ dưới lên.Được tiếp cận với hệ thống hạ tầng (infrastructure) của nền tảng, tận dụng những tính năng sẵn có.
Hỗ trợKhông có người hỗ trợ.Có cộng đồng tư vấn và hỗ trợ.
Tập người dùngPhải tự tạo tập người dùng.Có sẵn tập người dùng lớn.

Xu hướng phát triển siêu ứng dụng trên thế giới và ở Việt Nam

Vào năm 2015, ứng dụng nhắn tin WeChat của Trung Quốc ra mắt một nền tảng mở cho phép các nhà phát triển có thể phát triển ứng dụng một cách dễ dàng. Từ đó đến nay, đã có hơn 1 triệu ứng dụng mới được phát triển trên nền tảng này. Và WeChat cũng chính là một trong những siêu ứng dụng đầu tiên “mở đường” cho một kỷ nguyên hoàn toàn mới.

Từ sau thành công của WeChat, AliPay ở Trung Quốc, Hàn Quốc với phần mềm Naver, Singapore sở hữu Grab và Indonesia với GoJek,… cũng trở thành những siêu ứng dụng thành công “đại diện” cho quốc gia sở tại.

siêu ứng dụng - super app - naver
Naver – Siêu ứng dụng “đại diện” cho Hàn Quốc. Nguồn: @Naver

Nhìn ở một bức tranh toàn cảnh, anh Kiên nhận định,

Xu hướng siêu ứng dụng phát triển mạnh mẽ ở những quốc gia phương Đông hơn là ở quốc gia phương Tây. Xu hướng này có thể đến từ 3 nguyên nhân chính:

1. Thói quen sử dụng của người dùng: Đối với những người phương Tây, để quyết định xem có sử dụng một ứng dụng hay không, họ sẽ dành nhiều thời gian tìm hiểu về những thông tin xung quanh ứng dụng đó bằng cách hỏi bạn bè, hỏi người thân về trải nghiệm phần mềm sau đó mới đưa ra quyết định. Tuy nhiên, đối với người phương Đông, họ sẵn sàng và dễ dàng tiếp nhận một ứng dụng mới hơn. Chính vì thế, khi một siêu ứng dụng ra đời với nhiều ứng dụng nhỏ bên trong, họ luôn hào hứng trải nghiệm và dùng thử xem có hợp hay không.

2. Lịch sử phát triển: Do siêu ứng dụng đầu tiên được ra đời ở Trung Quốc, châu Á nên xu hướng này trở nên thịnh hành hơn ở phương Đông và tạo tiền đề cho các nước phương Đông phát triển theo. Nếu chúng xuất hiện lần đầu tiên được phổ biến ở các nước phương Tây thì có thể mọi chuyện đã khác.

3. Tính cạnh tranh: Ở phương Tây đã tồn tại sẵn những “chợ ứng dụng” vốn dĩ đã rất phổ biến như AppStore của Apple hay Google Play của Google nên khi siêu ứng dụng ra mắt ở đây thì có thể khó cạnh tranh lại với những người “khổng lồ” này.

appstore
AppStore là một “chợ ứng dụng” khổng lồ mà khó ai có thể cạnh tranh lại.

Khi xét về Việt Nam, câu hỏi lớn đặt ra là Việt Nam có thể có một “siêu ứng dụng” đại diện cho quốc gia hay không? Câu trả lời là có. Để xây dựng một siêu ứng dụng thành công, anh Kiên chia sẻ về 2 yếu tố lớn cần cân nhắc:

1. Nhu cầu của khách hàng: Nếu thị trường không có kỳ vọng, không có nhu cầu thì ứng dụng làm ra cũng sẽ chẳng có ai quan tâm và ứng dụng đó cũng không mang lại lợi ích nhiều cho người dùng.

2. Hệ sinh thái của vùng, quốc gia đó như thế nào: Xét về hệ sinh thái người dùng thì tập người dùng Việt Nam có nhiều điểm tương đồng với Trung Quốc nên Việt Nam sẽ có nhiều kỳ vọng để phát triển về lĩnh vực này.

Và bằng chứng rõ ràng là Việt Nam đã có những siêu ứng dụng điển hình theo hướng tiếp cận 1 là MoMo, Zalo,… Còn để phát triển theo hướng tiếp cận thứ 2, người phát triển ứng dụng còn phải cân nhắc thêm 2 yếu tố:

3. Yếu tố công nghệ. Anh Kiên chia sẻ thêm:

Nền tảng ứng dụng phải đủ tốt để có thể tích hợp bên thứ 3. “Làm thế nào để xây dựng một nền tảng mở cả về Frontend và Backend? Và đáp ứng được các chuẩn về API?” là những câu hỏi mà nhà phát triển nên suy nghĩ.

Bình thường, khi ta muốn thay đổi hoặc cập nhật một tính năng trên ứng dụng, ta đã phải tác động Frontend và Backend rất nhiều. Vậy thì, khi ta mở nền tảng cho nhiều bên thứ 3 cùng tham gia, khối lượng công việc sẽ còn tăng lên nhiều hơn nữa, phục vụ nhiều use case hơn, không chỉ “gói gọn” trong những tính năng nhất định nữa rồi.

Ở Việt Nam hiện tại thì số lượng công ty đi theo hướng tiếp cận thứ 2, có nền tảng mở vững chắc như vậy không nhiều. Đồng thời, Việt Nam đang trong quá trình chuyển đổi số nên những đột phá về mặt công nghệ sẽ còn bùng nổ hơn nữa trong tương lai. Chính vì thế, đây là cơ hội rõ ràng cho những công ty công nghệ trên thị trường Việt Nam để xây dựng một siêu ứng dụng theo hướng tiếp cận 2.

4. Nền tảng có dễ sử dụng hay không: Mục đích siêu ứng dụng ra đời là nhằm tối ưu hóa trải nghiệm phát triển ứng dụng – tiết kiệm thời gian và công sức của developer hơn. Vậy thì, dễ hiểu, dễ phát triển sản phẩm và thân thiện với lập trình viên phải là một tiêu chí cần phải có. Ví dụ, nếu lập trình viên cần phải tốn 1-2 tháng để làm quen với nền tảng mở này thì hiển nhiên, họ sẽ không chọn phát triển ứng dụng trên nền tảng này nữa mà sẽ chọn tự phát triển ứng dụng riêng lẻ.

Kết luận, nhìn chung Việt Nam hoàn toàn đáp ứng được các yếu tố về mặt hệ sinh thái và nhu cầu của thị trường để phát triển các siêu ứng dụng tốt và thành công. Tuy nhiên, đối với những nhà phát triển đi theo hướng tiếp cận 2, họ sẽ cần cân nhắc thêm những yếu tố nội tại khác trong chính cách phát triển phần mềm. Khi đáp ứng được 2 yếu tố nêu trên, siêu ứng dụng đó sẽ trở thành một nền tảng mở thay đổi được cách các nhà phát triển phát triển ứng dụng của họ.

Anh Kiên chia sẻ thêm về những dự định của TIKI khi phát triển Tini App – một siêu ứng dụng phát triển theo hướng tiếp cận 2:

Bản thân TIKI luôn muốn xây dựng một nền tảng hỗ trợ doanh nghiệp Việt Nam về mặt bán hàng trong việc giảm tải chi phí vận hành, thực hiện các hoạt động thanh toán hóa đơn, giao hàng để các doanh nghiệp có thể tập trung phát triển sản phẩm thật tốt. Và thế là TIKI cho ra đời Tini App.

Khi phát triển ứng dụng trên nền tảng Tini App, các nhà phát triển có thể tận dụng được nguồn khách hàng lớn mà TIKI đã xây dựng trong suốt nhiều năm qua cũng như tận dụng được những tính năng sẵn có vô cùng tiện lợi như Giao hàng nhanh, Giao hàng theo giờ, TIKI Pay,…

TIKI hy vọng có thể xây dựng được một nền tảng phát triển ứng dụng mở dễ sử dụng mà kể cả fresher, junior developer đều có thể phát triển phần mềm của riêng họ thật nhanh chóng. Với cuộc thi TIKI Hackathon đang diễn ra hiện nay, chúng tôi mong sẽ nhìn thấy được những sản phẩm thật ấn tượng, được xây dựng trên Tini App, đến từ các đội thi.

Siêu ứng dụng – Sân chơi mới cho lập trình viên

Trong mục này, anh Kiên chỉ nhận định cơ hội việc làm và những tác động nghề nghiệp của lập trình viên do sự xuất hiện của siêu ứng dụng theo hướng tiếp cận thứ 2. Vì với cách tiếp cận 1, cách phát triển ứng dụng, tính năng đã được sắp xếp bởi team nội bộ từ trước, không có tác động nhiều đến cách lập trình viên làm việc.

siêu ứng dụng - super app việt nam - nguyễn trung kiên - director of software engineering tiki - itviec
Chia sẻ của anh Nguyễn Trung Kiên về “sân chơi” mà siêu ứng dụng mở ra cho lập trình viên.

Với siêu ứng dụng có hướng tiếp cận  2, lập trình viên phát triển ứng dụng sẽ được tiết kiệm thời gian và sức lực hơn.

Ví dụ, nếu như bình thường, họ cần phải phát triển ứng dụng trên 3 nền tảng: iOS – Android – Website thì với sự xuất hiện của siêu ứng dụng, họ chỉ cần phát triển trên một nền tảng mở đó thôi. Sau đó, siêu ứng dụng đó sẽ tự động đẩy ứng dụng con lên các nền tảng khác nhau. Đồng thời, về mặt Backend, các ứng dụng này đã có sẵn những tính năng mà lập trình viên có thể tận dụng như tính năng nhắn tin in-app, tính năng thanh toán,…

Có thể nói, khi siêu ứng dụng ra đời, các lập trình viên sẽ có một nền tảng giúp họ “tự động hóa” tốt hơn với các nguồn lực có sẵn. Vốn dĩ, xu hướng phát triển phần mềm này cũng được xem là một quá trình phát triển tự nhiên do công việc chính của lập trình viên là giải quyết các vấn đề liên quan đến tự động hóa. So với 30-40 năm trước thì cách phát triển ứng dụng hiện nay đã có sự khác biệt lớn, công việc nhiều hơn, tự do và sáng tạo hơn.

Khi ta tiết kiệm được thời gian viết code và rút ngắn thời gian phát triển phần mềm, ta sẽ xây dựng được nhiều ứng dụng hơn. Chính vì thế, ta có thể kỳ vọng rằng các siêu ứng dụng sẽ tạo nhiều cơ hội việc làm cho lập trình viên hoặc thay đổi cách mà lập trình viên phát triển ứng dụng theo chiều hướng tích cực hơn.

Thông tin về anh Nguyễn Trung Kiên:

Anh Nguyễn Trung Kiên đã có hơn 12 năm kinh nghiệm trong lĩnh vực phát triển phần mềm. Hiện tại, anh đang công tác tại TIKI gần 2 năm với vai trò là Director of Engineering. Anh chịu trách nhiệm trong việc xây dựng nền tảng Tini App.

Trước khi gia nhập TIKI, anh đã có gần 2 năm làm việc tại Trusting Social với vị trí Technical Lead và 3 năm làm Lead Software Engineer tại Trust Social Global. Ngoài ra, anh cũng đã từng đảm nhận nhiều vị trí khác nhau như Backend Engineer, Server Developer, Technical Leader,…

Đăng bởi

Progressive Web App và tương lai trong lĩnh vực E-commerce

Sutunam là công ty công nghệ của Pháp với hơn 40 nhân viên làm việc tại Việt Nam bên cạnh trụ sở chính tại Lyon, Pháp. Với hơn 10 năm kinh nghiệm trong lĩnh vực Open Source, Sutunam nổi bật với thế mạnh chuyên môn ở mảng Ecommerce. Công ty làm việc với đa dạng các dịch vụ xoay xung quanh website Ecommerce: từ hoạch định chiến lược kinh doanh số, thiết kế trải nghiệm trên website và mobile app, cho đến các dịch vụ về hạ tầng máy chủ. Sutunam hoạt động như một nhà tư vấn dự án số cho khách hàng, trong đó Progressive Web App là cũng là một hướng đi mà công ty chú trọng.

progressive web app
Progressive Web App và tương lai của nó trong lĩnh vực E-commerce sẽ như thế nào?

Progressive Web App (PWA) là gì?

PWA (progressive web apps) là dạng web app được xây dựng dựa trên các công nghệ của website, nhưng mang lại trải nghiệm tương tự như Native App. Nhờ vào tính năng của service worker, manifest và https, PWA có thể hoạt động offline ngay cả khi không có mạng. Khi người dùng vào website PWA thông qua trình duyệt trên mobile, họ có thể cài đặt website PWA trong điện thoại. Sau đó, họ có thể truy cập trở lại website thông qua icon ngay trên điện thoại, tương tự như khi họ click vào một icon của native app để truy cập phần mềm vậy.

PWA là gì
Progressive Web App là gì?

Vậy PWA có gì khác so với một Native App?

Trải nghiệm của người dùng

Thông thường, quá trình mua hàng của người dùng sẽ đi từ việc tìm kiếm bằng phiên bản mobile website – responsive thông thường của phiên bản đó. Khi truy cập, bạn sẽ nhận được gợi ý tải app để vào web nhanh hơn chẳng hạn. Sau đó, bạn sẽ được điều hướng sang App Store hay Google Play, iOS Store, để download và cài đặt app vào máy. Cuối cùng, bạn sẽ tìm kiếm lại những thứ mình cần trong app đó một lần nữa và tiến hành thanh toán.

Đối với những người lần đầu tiên sử dụng website, hoặc ít mua hàng của doanh nghiệp đó, đây là một quy trình khá rắc rối. Theo thống kê, có gần 50% khách hàng lần đầu tiên đến với website rất dễ dàng bỏ qua giai đoạn gợi ý tải app về mobile. Ngoài ra, người dùng cũng có tâm lý ngại tải app mới để tăng dung lượng của điện thoại. Vậy phải làm gì để tăng trải nghiệm người dùng trên mobile responsive website, để giúp cho việc thanh toán trở nên dễ dàng và tiết kiệm thời gian hơn?

user flow native app
User flow native app

Progressive Web App chính là giải pháp.

Trải nghiệm người dùng với PWA sẽ đơn giản hơn rất nhiều. Khách hàng chỉ việc tìm kiếm trên mobile website và thanh toán đơn hàng, cuối cùng nhấn vào Add to homescreen để tải website về dưới dạng icon. Vậy là lần sau khách hàng chỉ cần nhấn vào icon để trở lại với website. Trải nghiệm này sẽ tương tự như khi người dùng app trong điện thoại. Với người dùng, đây là một giải pháp cực kỳ tiện dụng vì vẫn được sử dụng mobile website rất nhanh chóng mà không cần tải app về.

user flow pwa
User flow PWA

Release Cycle

Với PWA, release cycle cũng đơn giản hơn. Với các lập trình viên mobile, mỗi lần có update hay tính năng mới, họ sẽ phải cập nhật phiên bản mobile app. Mỗi lần update như thế, các dev sẽ phải đẩy lên lại các chợ ứng dụng, quá trình như thế sẽ mất khá nhiều thời gian và công sức hơn so với PWA cập nhật trang web.

Với PWA, bạn chỉ việc release bản update một lần và refresh cache trên website. Tính năng đồng bộ ngay cả khi người dùng không mở PWA cũng được phát triển. Twitter được biết đến là một trong những đơn vị tiên phong trong việc sử dụng PWA. App size trên Android app của Twitter chiếm dụng 24mb, iOS app chiếm 214mb dung lượng máy, trong khi đó với PWA chỉ tốn 600 kb cho điện thoại. Đối với những khách hàng không muốn tốn quá nhiều dung lượng điện thoại hay không muốn cài đặt thêm các app khác gây tốn bộ nhớ máy thì đây là một lựa chọn tuyệt vời.

Chi phí vận hành và duy trì

Chi phí doanh nghiệp và lập trình cũng là một đề cần lưu tâm cho một dự án công nghệ. Với một doanh nghiệp e-commerce, xây dựng website cùng IOS + Android app sẽ yêu cầu chi phí vận hành lớn với đội nhân sự bao gồm front-end, back-end, IOS developer và Android developer.

Trong khi đó với PWA, với bản chất web-app dựa trên nền tảng công nghệ website, đội ngũ sẽ rút ngắn chỉ cần frontend và backend. Tuy việc thực hiện ứng dụng PWAs đòi hỏi số lượng nhân lực ít hơn, nhưng lại cần nhiều kỹ năng hơn. Đối với đội ngũ front-end đang quen thuộc với JQuery và HTML từ cách phát triển truyền thống backend-driven website, bây giờ sẽ cần học hỏi và tìm hiểu nhiều dạng kiến thức hơn để thực hiện dự án, và đội ngũ lập trình website truyền thống sẽ phải hiểu thêm về trải nghiệm người dùng trên mobile app.

PWA team

Search Engine Optimization

Ưu điểm của PWA là ta có thể tối ưu hóa SEO cho nó. Vì vẫn là server side rendering nên ta vẫn có thể tối ưu hóa việc hiển thị trên Google với các kỹ thuật về technical SEO.

Đối với native app, ta khó có thể tối ưu hóa nội dung SEO mà chỉ có thể giới thiệu trên website, dẫn link tới chợ ứng dụng, hoặc trả tiền quảng cáo trên các chợ ứng dụng. Ngoài ra, PWA được tạo ra để tối ưu hóa trải nghiệm người dùng trên mobile, nhanh hơn, tiện dụng hơn, về thiết kế nó vẫn là mobile-first design và tuân thủ các nguyên tắc thiết kế được ưu ái của các công cụ tìm kiếm như Google, Bing.

progressive web app
PWA giúp nâng cao trải nghiệm người dùng với mobile website

Progressive Web App và Native App có đang trong thế “đối đầu” nhau?

Với những ưu thế nổi trội của PWA – là sự kết hợp của website và native app, nhiều người đã đặt các câu hỏi và so sánh PWA với Native App. Nhưng sự thật thì hai nền tảng này hoàn toàn không nằm trong thế đối đầu với nhau. Ít nhất ở thời điểm hiện tại.

Số lượng người dùng di động trên thế giới là khoảng 3 tỷ người, thị trường hoàn toàn đủ lớn để PWA và Native App cùng phát triển. Bên cạnh đó, PWA giúp chuyển hóa first-time user (người mua lần đầu) khá tốt, nhằm giúp họ làm quen với nhãn hàng và dần trở thành khách hàng trung thành. Từ đó, doanh nghiệp dễ dàng thu hút họ hơn trong việc tải và sử dụng native app của mình. Vì vậy, có thể thấy, ở thời điểm hiện tại PWA đang hỗ trợ cho Native App, chứ không hề ở thế đối đầu nhau.

Bên cạnh đó, PWA hiện tại vẫn đang trong quá trình phát triển nên vẫn còn khá mới mẻ. Đối với những doanh nghiệp có tiềm lực tài chính tốt, họ sẽ lựa chọn sử dụng cả hai vì không ai muốn mất khách hàng cả, doanh nghiệp nào cũng sẽ muốn tối ưu hóa lợi nhuận của mình.

Với các doanh nghiệp vừa và nhỏ, chi phí duy trì IOS app và Android App sẽ khá cao, nhất là với các Ecommerce app. PWA có thể chính là giải pháp phù hợp cho họ. Đặc biệt, đối với các doanh nghiệp có số lượng tải app của họ quá thấp, họ sẽ tìm cách để tối ưu hóa chi phí, tìm cách nào tiết kiệm hơn so với việc bảo trì Native App và cũng tìm đến với PWA.

Tương lai của Progressive Web App ở thị trường châu Á sẽ ra sao?

Châu Á là thị trường tiềm năng với lượng dân số đông, bối cảnh thị trường công nghệ độc đáo. Vì thế, tại châu Á, các doanh nghiệp sẽ đối mặt cả những vấn đề mà thế giới gặp phải, cũng như chưa thị trường nào từng trải qua. Nếu lựa chọn một nơi có một bước nhảy vọt và tiên phong về công nghệ, những báo cáo thị trường luôn chọn châu Á là nơi đi đầu trong tất cả những xu hướng đó.

Bối cảnh thị trường châu Á có 4 điểm chính:

  • Mức độ sử dụng di động rất cao
  • Việc sử dụng di động để mua hàng và truy cập mạng xã hội rất phổ biến
  • Dễ dàng chấp nhận công nghệ mới
  • Các công ty công nghệ nhanh chóng mở rộng cơ hội sáng tạo.

Mức độ sử dụng di động ở châu Á đặc biệt cao, nhiều hơn hẳn so với laptop, TV hay các hình thức giải trí khác. Khả năng tiếp cận công nghệ của gen Z rất nhạy bén. Vì là những người trưởng thành hoàn toàn trong thời kỳ công nghệ nên việc họ tương tác trên mạng xã hội rất cao, hình thành nên những ngành nghề hoàn toàn mới như content creator, influencer, streamer. Hành vi trên mạng xã hội rõ ràng cũng đã thay đổi rất nhiều.

Mức độ sử dụng di động ở châu Á rất cao, nhiều hơn hẳn so với laptop, TV hay các hình thức giải trí khác. Khả năng tiếp cận công nghệ của gen Z rất nhạy bén. Vì là những người trưởng thành hoàn toàn trong thời kỳ công nghệ nên việc họ tương tác trên mạng xã hội rất cao, hình thành nên những ngành nghề hoàn toàn mới như content creator, influencer, streamer. Hành vi trên mạng xã hội rõ ràng cũng đã thay đổi rất nhiều.

progressive web app
Châu Á đã, đang và sẽ tiếp tục là thị trường “màu mỡ” của PWA

Về khả năng thích ứng với công nghệ mới ở châu Á gần như cao hơn hẳn so với các khu vực khác trên thế giới. Một phần của vấn đề này liên quan đến bối cảnh văn hóa độc đáo của khu vực này. Đây là môi trường khá non trẻ, các công ty đa phần đều thuộc first generation (thế hệ đầu tiên) nên họ sẽ không có lịch sử 200, 300 năm hay những yếu tố lịch sử tương tự. Từ đó, các công ty thường sẽ mở rộng và dễ dàng đón nhận xu hướng hơn và có nhiều cơ hội sáng tạo hơn.

Ở châu Á cũng sẽ gặp những vấn đề mà không có châu lục nào gặp phải (như không có quốc gia nào trên thế giới có đến hơn 1 tỷ dân như Trung Quốc, Ấn Độ) nên đây cũng là động lực để đáp ứng nhu cầu thị trường đa dạng để các doanh nghiệp công nghệ tiếp tục phát triển nhiều hơn trong tương lai. Bên cạnh đó, ta cũng có thể thấy sự khác biệt về thị trường công nghệ phát triển cao (Nhật Bản – Hàn Quốc) và đang phát triển (Đông Nam Á), tạo ra một bối cảnh đặc biệt thú vị và khó dự đoán tại Châu Á

Không có một “”châu Á đồng nhất””, những công ty công nghệ lâu đời ở Hàn Quốc và Nhật Bản nên sẽ mang đến cho các lập trình viên những cơ hội công việc ổn định và môi trường phát triển chắc chắn hơn. Trong khi đó, Trung Quốc, Ấn Độ và các quốc gia khu vực Đông Nam Á sẽ phải đối mặt với những khó khăn khác nhau, nên đây cũng là cơ hội để các công ty có cơ hội tiếp xúc với PWA nói riêng và các công nghệ mới nói chung.

Từ bối cảnh công nghệ của châu Á, ta có khẳng đinh về châu Á là một mobile-first region, châu lục được thống trị bởi nhu cầu sử dụng di động. Tối ưu hóa trên di động từ đó cũng sẽ mang lại cạnh tranh màu mỡ cho doanh nghiệp.

Một đặc tính thị trường châu Á ta có thể là sự thống trị của Marketplace – những trang web trung gian, các sàn thương mại điện tử, từ Taobao, Lazada, Shopee, Tiki,… Vậy nên để các doanh nghiệp nhỏ và vừa, những doanh nghiệp không phải là Marketplace muốn tồn tại được, họ bắt buộc phải sáng tạo nhiều hơn, tiến bộ nhiều hơn, tìm những đường ngách để đi, tăng cường các kế hoạch branding cho doanh nghiệp trên tinh thần tập trung tối ưu mobile. PWA ở đây sẽ là một lựa chọn đổi mới có hiệu quả dài lâu cho các doanh nghiệp này.

PWAs trên ecommerce – bước đầu tiếp cận Headless Commerce

Kể cả khi người dùng đến với cửa hàng thực tế mua hàng, họ vẫn sử dụng di động để xem review của người mua trước, so sánh với các cửa hàng khác tương đương để đi đến quyết định có mua sản phẩm đó hay không. Khách hàng quan tâm tới việc tiếp cận nhãn hàng ở nhiều khía cạnh hơn là chỉ mua ở cửa hàng.

Khi di động là chìa khóa để phát triển doanh số, headless commerce cũng là sự phát triển tất yếu trong e-commerce.

Headless Architecture là gì? Đó là việc phát triển tách rời phần front-end và back-end của website, thông tin sẽ được gọi thông qua hệ thống API. Headless cho phép phần front-end (giao diện) không phụ thuộc và linh hoạt hơn khi tùy chỉnh và cá nhân hóa trải nghiệm người dùng, dễ dàng hơn cho doanh nghiệp kết nối thông tin với nhiều kênh bán hàng hơn (multiple touch-point) – một trong những yếu tố nền tảng của omnichannel để tạo ra vòng tròn trải nghiệm đa điểm cho khách hàng. Từ đó tăng sale, năng lực cạnh tranh và quản lý đồng nhất cho doanh nghiệp.

Thay vì là cấu trúc backend-driven truyền thống, xu hướng headless hiện tại sẽ phân tách cấu trúc frontend và backend. Backend sẽ xử lý phần logic, frontend sẽ độc lập kết nối với rất nhiều selling point để tạo ra lợi thế cạnh tranh và tăng sale cho doanh nghiệp.

Với PWA, lập trình viên cũng sẽ bắt đầu phải làm quen với việc phát triển tách rời front-end và back-end, làm việc với manifest và service worker, cho phép cache các thông tin và chức năng đẩy thông báo (push notification) tương tự như native app. Đây cũng sẽ bước đầu chuyển đổi website truyền thống trở thành cấu trúc headless.

Tuy còn khá nhiều thách thức, nhưng nếu xét tới khía cạnh thị trường và hỗ trợ công nghệ, ta có thể sự phát triển của PWAs còn tiếp tục tăng cao trong tương lai. Hi vọng bài viết sẽ đóng góp thêm một vài góc nhìn cho các bạn lập trình viên khi tiếp cận PWA.