Python: Sự khác nhau giữa List và Tuple?

Lập Trình
Python: Sự khác nhau giữa List và Tuple?
Bài viết được sự cho phép của tác giả Phạm Văn Nguyên Bạn vừa tìm hiểu về lists và tuples và bạn đang tự hỏi làm thế nào chúng khác nhau? Đây là một câu hỏi phổ biến đáng ngạc nhiên. Cả 2 cũng khá giống nhau. Cả lists và tuples là các kiểu dữ liệu chuỗi có thể lưu trữ một bộ sưu tập các item(mục). Mỗi item được lưu trữ trong một list hoặc một tuple có thể thuộc bất kỳ loại dữ liệu nào. Và bạn cũng có thể truy cập bất kỳ item nào theo chỉ mục của nó. Vì vậy, câu hỏi là, họ có khác nhau không? Và nếu không, tại sao chúng ta có hai loại dữ liệu hoạt động khá giống nhau? Chúng ta không thể sống với lists hoặc tuples? Vâng, chúng ta hãy cố gắng tìm câu trả lời. Sự khác biệt chính giữa list và Tuple Sự khác biệt chính giữa list và tuples là thực tế là list có thể thay đổi (mutability) trong khi bộ dữ liệu là bất biến (immutability) . Điều đó có nghĩa gì, bạn nói gì? Một kiểu dữ liệu có thể thay đổi có nghĩa là một đối tượng python thuộc loại này có thể được sửa đổi. Một đối tượng bất biến không thể. Chúng ta hãy xem điều này có nghĩa là gì. Hãy tạo một list và gán nó cho một biến. >>> a = ["apples", "bananas", "oranges"] Bây giờ hãy xem điều gì xảy ra khi chúng ta cố gắng sửa đổi item(mục) đầu tiên của danh sách. Chúng ta hãy thay đổi apples thành một berries . >>> a[0] = "berries" >>> a ['berries', 'bananas', 'oranges'] Hoàn hảo! mục đầu tiên của a đã thay đổi. Bây...

Bài viết được sự cho phép của tác giả Phạm Văn Nguyên

Bạn vừa tìm hiểu về lists và tuples và bạn đang tự hỏi làm thế nào chúng khác nhau?

Đây là một câu hỏi phổ biến đáng ngạc nhiên.

Cả 2 cũng khá giống nhau.

Cả lists và tuples là các kiểu dữ liệu chuỗi có thể lưu trữ một bộ sưu tập các item(mục).

Mỗi item được lưu trữ trong một list  hoặc một tuple có thể thuộc bất kỳ loại dữ liệu nào.

Và bạn cũng có thể truy cập bất kỳ item nào theo chỉ mục của nó.

Vì vậy, câu hỏi là, họ có khác nhau không?

Và nếu không, tại sao chúng ta có hai loại dữ liệu hoạt động khá giống nhau?

Chúng ta không thể sống với lists hoặc tuples?

Vâng, chúng ta hãy cố gắng tìm câu trả lời.

Sự khác biệt chính giữa list và Tuple

Sự khác biệt chính giữa list và tuples là thực tế là list có thể thay đổi (mutability) trong khi bộ dữ liệu là bất biến (immutability) .

Điều đó có nghĩa gì, bạn nói gì?

Một kiểu dữ liệu có thể thay đổi có nghĩa là một đối tượng python thuộc loại này có thể được sửa đổi.

Một đối tượng bất biến không thể.

Chúng ta hãy xem điều này có nghĩa là gì.

Hãy tạo một list và gán nó cho một biến.

>>> a = ["apples", "bananas", "oranges"]

Bây giờ hãy xem điều gì xảy ra khi chúng ta cố gắng sửa đổi item(mục) đầu tiên của danh sách.

Chúng ta hãy thay đổi apples thành một berries .

>>> a[0] = "berries"
>>> a
['berries', 'bananas', 'oranges']

Hoàn hảo! mục đầu tiên của a đã thay đổi.

Bây giờ, điều gì sẽ xảy ra nếu chúng ta muốn thử điều tương tự với một tuple thay vì một list? Hãy xem nào.

>>> a = ("apples", "bananas", "oranges")
>>> a[0] = "berries"
Traceback (most recent call last):
    File "", line 1, in
TypeError: 'tuple' object does not support item assignment

Lý do chúng tôi gặp lỗi này là vì các đối tượng tuple, không giống như list, là bất biến, điều đó có nghĩa là bạn không thể sửa đổi một đối tượng tuple sau khi nó được tạo.

Nhưng chờ đã, hãy xem ví dụ sau:

>>> a = ("apples", "bananas", "oranges")
>>> a = ("berries", "bananas", "oranges")
>>> a
('berries', 'bananas', 'oranges')

Ô điều gì đã xảy ra vậy?

Hãy xem, chúng ta có thực sự sửa đổi item đầu tiên trong tuple a với code ở trên không?

Câu trả lời là Không , hoàn toàn không.

Để hiểu tại sao, trước tiên bạn phải hiểu sự khác biệt giữa một biến và một đối tượng python.

Sự khác biệt giữa một biến và một đối tượng

Bạn có thể nhầm lẫn các biến với các đối tượng. Đây là một quan niệm sai lầm rất phổ biến ở những người mới bắt đầu.

Hãy nhớ rằng một biến không là gì ngoài tham chiếu đến đối tượng python thực tế trong bộ nhớ.

Bản thân biến không phải là đối tượng.

Ví dụ: chúng ta hãy cố gắng hình dung những gì xảy ra khi bạn gán một list (danh sách) cho một biến a .

>>> a = ["apples", "bananas", "oranges"]

Khi bạn làm điều này, một đối tượng python kiểu list kiểu được tạo trong bộ nhớ và biến a tham chiếu đến đối tượng này bằng cách giữ vị trí của nó trong bộ nhớ .

Python: Sự khác nhau giữa List và Tuple?Python: Sự khác nhau giữa List và Tuple?

Trong thực tế, bạn thực sự có thể lấy lại vị trí của đối tượng list trong bộ nhớ bằng cách kiểm tra a  bằng cách sử dụng function  id () .

>>> a = ["apples", "bananas", "oranges"]
>>> id(a)
26953168

Bây giờ nếu bạn sửa đổi chỉ item đầu tiên của danh sách và kiểm tra lại id () , bạn sẽ nhận được cùng một giá trị chính xác vì a vẫn đang tham chiếu đến cùng một đối tượng.

>>> a[0] = "berries"
>>> id(a)
4340729544

Hình dưới đây cho thấy chính xác những gì đã xảy ra sau khi sửa đổi.

Python: Sự khác nhau giữa List và Tuple?Python: Sự khác nhau giữa List và Tuple?

Bây giờ, hãy xem điều gì xảy ra nếu chúng ta thực hiện điều tương tự trên các tuples.

>>> a = ("apples", "bananas", "oranges")
>>> id(a)
4340765824
>>> a = ("berries", "bananas", "oranges")
>>> id(a)
4340765464

Như bạn có thể thấy, hai địa chỉ là khác nhau.

Điều này có nghĩa là sau lần gán thứ hai, a đang đề cập đến một đối tượng hoàn toàn mới.

Con số này cho thấy chính xác những gì đã xảy ra.

Python: Sự khác nhau giữa List và Tuple?Python: Sự khác nhau giữa List và Tuple?

Hơn nữa, nếu không có biến nào khác trong chương trình của bạn đề cập đến bộ dữ liệu cũ hơn thì trình thu gom rác của python sẽ xóa hoàn toàn bộ dữ liệu cũ khỏi bộ nhớ.

Vì vậy, bạn có nó, khái niệm về khả năng biến đổi này là sự khác biệt chính giữa list và tuples.

Mutability (khả năng biến đổi)  không chỉ là một khái niệm python, nó là một khái niệm ngôn ngữ lập trình mà bạn sẽ gặp trong các ngôn ngữ lập trình khác nhau .

Nhưng bây giờ có lẽ toàn bộ cuộc thảo luận này gợi lên một câu hỏi khác trong đầu bạn.

Tại sao chúng ta có các đối tượng có thể thay đổi và bất biến?

Tại sao chúng ta cần các đối tượng có thể thay đổi và bất biến?

Thật ra, cả hai đều phục vụ các mục đích khác nhau.

Chúng ta hãy thảo luận về một số khía cạnh phân biệt giữa các đối tượng có thể thay đổi và bất biến

1. Hiệu suất bổ sung

Python: Sự khác nhau giữa List và Tuple?Python: Sự khác nhau giữa List và Tuple?

Khả năng tương tác sẽ hiệu quả hơn khi bạn biết bạn sẽ thường xuyên sửa đổi một đối tượng.

Ví dụ: giả sử bạn có một số đối tượng có thể lặp lại (iterable object) (giả sử x) và bạn muốn nối từng phần tử của x vào danh sách.

Tất nhiên bạn chỉ có thể thực hiện L = list (x) kiểu như thế này:

L  = []
for item in x:
    L.append(item)

Điều này hoạt động ổn. Bạn tiếp tục sửa đổi đối tượng danh sách tại chỗ cho đến khi tất cả các yếu tố của x tồn tại trong danh sách L .

Nhưng bạn thậm chí có thể tưởng tượng điều gì sẽ xảy ra nếu chúng ta đã sử dụng một tuple thay thế?

T  = ()
for item in x:
    T = T + (item,)

Bạn có thể hình dung những gì đang xảy ra trong bộ nhớ?

Vì các bộ dữ liệu là bất biến, về cơ bản, bạn đang sao chép nội dung của bộ dữ liệu Tsang một đối tượng bộ dữ liệu mới tại Mỗi lần lặp.

Nếu vòng lặp for lớn, đây là một vấn đề hiệu năng rất lớn.

Trên thực tế, chúng ta hãy sử dụng python để đo hiệu suất của việc thêm vào list so với việc thêm vào một tuple khi x = range (10000).

Bài viết này hướng dẫn bạn cách sử dụng module time để đo thời gian thực hiện của nhiều dòng python .

$ python3 -m timeit 
-s "L = []" 
-s "x = range(10000)" 
"for item in x:" "    L.append(item)"
1000 loops, best of 3: 1.08 msec per loop

Khá tốt, mất khoảng 1,08 mili giây .

Sẽ thế nào nếu chúng ta làm điều tương tự với tuples?

$ python3 -m timeit 
-s "T = ()" -s "x = range(10000)" 
"for item in x:" "    T = T + (item,)"
10 loops, best of 3: 1.63 sec per loop

Một con lớn hơn rất nhiều 1,63 giây ! ( gấp khoảng 1500 lần)

Đây là một sự khác biệt lớn về hiệu suất giữa các list và tuples.

Nếu bạn muốn kiểm tra sự kiên nhẫn của mình, hãy thử x = range(1000000).

Bây giờ khi ai đó nói với bạn việc append nhiều lần vào một đối tượng string(chuỗi) không hiệu quả, bạn sẽ hiểu chính xác lý do tại sao (các đối tượng chuỗi cũng không thay đổi trong python).

    Hiệu suất bổ sung: Thắng: đối tượng có khả năng thay đổi

Xem thêm việc làm python hấp dẫn trên Station D

2. Dễ dàng gỡ lỗi

Python: Sự khác nhau giữa List và Tuple?Python: Sự khác nhau giữa List và Tuple?

Mutility (khả năng biến đổi)  là tuyệt vời và tất cả nhưng một điều có thể thực sự gây phiền nhiễu với các đối tượng có thể thay đổi là gỡ lỗi.

Ý tôi là gì?

Chúng ta hãy xem ví dụ rất đơn giản này.

>>> a = [1, 3, 5, 7]
>>> b = a
>>> b[0] = -10
>>> a
[-10, 3, 5, 7]

Lưu ý rằng khi chúng ta gán b = a , chúng ta sẽ không sao chép đối tượng list từ b sang a .

Chúng tôi thực sự nói với python rằng hai biến a và b nên tham chiếu cùng một đối tượng danh sách.

Bởi vì a vị trí có hiệu quả giữ vị trí của đối tượng Python trong bộ nhớ, khi bạn nói b = a bạn sao chép vị trí địa chỉ đó (không phải đối tượng thực tế) vào b .

Điều này dẫn đến việc có hai tham chiếu (a và b) cho cùng một đối tượng list.

Nói cách khác, khi chúng ta thực hiện b [0] = -10 , nó có tác dụng tương tự như a[0] = -10 .

Tất nhiên bạn có thể nhìn vào code và nghĩ đúng rằng nó rất dễ gỡ lỗi.

Chà, bạn đúng với những đoạn code nhỏ như thế này, nhưng hãy tưởng tượng nếu bạn có một dự án lớn với nhiều tham chiếu đến cùng một đối tượng có thể thay đổi.

Sẽ rất khó khăn để theo dõi tất cả các thay đổi đối với đối tượng này bởi vì bất kỳ sửa đổi nào trong số các tham chiếu đó sẽ sửa đổi đối tượng.

Đây không phải là trường hợp với các đối tượng bất biến ngay cả khi bạn có nhiều tài liệu tham khảo đến chúng.

Một khi một đối tượng bất biến được tạo ra, nội dung của nó sẽ không bao giờ thay đổi.

Dễ dàng gỡ lỗi: Thắng: đối tượng bất biến!

3. Hiệu quả bộ nhớ

Python: Sự khác nhau giữa List và Tuple?Python: Sự khác nhau giữa List và Tuple?

Một lợi ích khác của tính bất biến là nó cho phép thực hiện ngôn ngữ để có hiệu quả bộ nhớ cao hơn.

Hãy để tôi giải thích những gì tôi có ý nghĩa bởi điều đó.

Trong CPython  (cách triển khai Python phổ biến nhất) nếu bạn tạo các đối tượng bất biến có cùng giá trị, python (trong một số điều kiện nhất định) có thể bó các đối tượng khác nhau này thành một.

Ví dụ, hãy xem code này:

>>> a = "Nguyenpv"
>>> b = "Nguyenpv"
>>> id(a)
58752160
>>> id(b)
58752160

Hãy nhớ rằng String(Chuỗi) (cũng như Integer, Float và Bools) đều là ví dụ về các đối tượng bất biến.

Như bạn có thể thấy, mặc dù trong chương trình python của chúng tôi, chúng tôi đã tạo rõ ràng hai đối tượng chuỗi khác nhau, python đã bó chúng lại thành một.

Làm thế nào chúng ta biết điều đó?

À bởi vì danh tính của a giống hệt như danh tính của b .

Python đã có thể làm điều đó bởi vì tính bất biến của chuỗi giúp cho việc thực hiện gói này an toàn.

Điều này không chỉ giúp chúng ta tiết kiệm bộ nhớ (bằng cách không lưu trữ chuỗi nhiều lần trong bộ nhớ) mà còn mỗi khi bạn muốn tạo một đối tượng mới có cùng giá trị, python sẽ chỉ tạo một tham chiếu đến đối tượng đã tồn tại trong bộ nhớ chắc chắn hiệu quả hơn.

Khái niệm này được gọi là String Interning , và đây là một bài viết tuyệt vời nếu bạn muốn tìm hiểu sâu hơn .

Không chỉ strings. Điều này cũng áp dụng cho integer (số nguyên) (trong điều kiện nhất định).

>>> a = 1
>>> b = 1
>>> id(a)
1788568672
>>> id(b)
1788568672

Điều đó thật tuyệt phải không?

Thế còn tuples thì sao?

CPython cho đến khi python 3.6 đưa ra quyết định thiết kế không tự động bundle (bó) hai bộ dữ liệu tương đương thành một.

>>> a = (1, 2)
>>> b = (1, 2)
>>> id(a)
58751816
>>> id(b)
58751536

Như bạn có thể thấy, a có bản sắc khác với b .

Quyết định thiết kế này có ý nghĩa bởi vì thực hiện thực tập cho các tuples đòi hỏi phải đảm bảo rằng tất cả các item (mục, phần tử) của tuples là bất biến.

Hiệu quả bộ nhớ: Thắng: bất biến

Phần kết luận

Để hiểu sự khác biệt giữa lists và tuples trong python, trước tiên bạn phải hiểu khái niệm về tính biến đổi (mutability) / immutability  (bất biến).

Lists là các đối tượng có thể thay đổi, có nghĩa là bạn có thể sửa đổi một đối tượng list sau khi nó được tạo.

Mặt khác, các tuple là các đối tượng bất biến, có nghĩa là bạn không thể sửa đổi một đối tượng tuple sau khi nó được tạo.

Cả Mutility(có thể thay đổi) và Immutability (bất biến) đều có những ưu điểm và nhược điểm riêng.

Bài viết gốc được đăng tải tại nguyenpv.com

Có thể bạn quan tâm:

Tuyển dụng lập trình viên lương cao trên Station D

Bài viết liên quan

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Lĩnh vực EdTech (ứng dụng công nghệ vào các sản phẩm giáo dục) trên toàn cầu hiện nay đã tương đối phong phú với nhiều tên tuổi lớn phân phối đều trên các hạng mục như Broad Online Learning Platforms (nền tảng cung cấp khóa học online đại chúng – tiêu biểu như Coursera, Udemy, KhanAcademy,…) Learning Management Systems (hệ thống quản lý lớp học – tiêu biểu như Schoology, Edmodo, ClassDojo,…) Next-Gen Study Tools (công cụ hỗ trợ học tập – tiểu biểu như Kahoot!, Lumosity, Curriculet,…) Tech Learning (đào tạo công nghệ – tiêu biểu như Udacity, Codecademy, PluralSight,…), Enterprise Learning (đào tạo trong doanh nghiệp – tiêu biểu như Edcast, ExecOnline, Grovo,..),… Hiện nay thị trường EdTech tại Việt Nam đã đón nhận khoảng đầu tư khoảng 55 triệu đô cho lĩnh vực này nhiều đơn vị nước ngoài đang quan tâm mạnh đến thị trường này ngày càng nhiều hơn. Là một trong những xu hướng phát triển tốt, và có doanh nghiệp đã hoạt động khá lâu trong ngành nêu tại infographic như Topica, nhưng EdTech vẫn chỉ đang trong giai đoạn sơ khai tại Việt Nam. Tại Việt Nam, hệ sinh thái EdTech trong nước vẫn còn rất non trẻ và thiếu vắng nhiều tên tuổi trong các hạng mục như Enterprise Learning (mới chỉ có MANA), School Administration (hệ thống quản lý trường học) hay Search (tìm kiếm, so sánh trường và khóa học),… Với chỉ dưới 5% số dân công sở có sử dụng một trong các dịch vụ giáo dục online, EdTech cho thấy vẫn còn một thị trường rộng lớn đang chờ được khai phá. *** Vừa qua Station D đã công bố Báo cáo Vietnam IT Landscape 2019 đem đến cái nhìn toàn cảnh về các ứng dụng công...

By stationd
Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bài viết được sự cho phép của tác giả Chung Nguyễn Hôm nay, nhóm Laravel đã phát hành một phiên bản chính mới của “ laravel/installer ” bao gồm hỗ trợ khởi động nhanh các dự án Jetstream. Với phiên bản mới này khi bạn chạy laravel new project-name , bạn sẽ nhận được các tùy chọn Jetstream. Ví dụ: API Authentication trong Laravel-Vue SPA sử dụng Jwt-auth Cách sử dụng Laravel với Socket.IO laravel new foo --jet --dev Sau đó, nó sẽ hỏi bạn thích stack Jetstream nào hơn: Which Jetstream stack do you prefer? [0] Livewire [1] inertia > livewire Will your application use teams? (yes/no) [no]: ... Nếu bạn đã cài bộ Laravel Installer, để nâng cấp lên phiên bản mới bạn chạy lệnh: composer global update Một số trường hợp cập nhật bị thất bại, bạn hãy thử, gỡ đi và cài đặt lại nha composer global remove laravel/installer composer global require laravel/installer Bài viết gốc được đăng tải tại chungnguyen.xyz Có thể bạn quan tâm: Cài đặt Laravel Làm thế nào để chạy Sql Server Installation Center sau khi đã cài đặt xong Sql Server? Quản lý các Laravel route gọn hơn và dễ dàng hơn Xem thêm Tuyển dụng lập trình Laravel hấp dẫn trên Station D

By stationd
Principle thiết kế của các sản phẩm nổi tiếng

Principle thiết kế của các sản phẩm nổi tiếng

Tác giả: Lưu Bình An Phù hợp cho các bạn thiết kế nào ko muốn làm code dạo, design dạo nữa, bạn muốn cái gì đó cao hơn ở tầng khái niệm Nếu lập trình chúng ta có các nguyên tắc chung khi viết code như KISS , DRY , thì trong thiết kế cũng có những nguyên tắc chính khi làm việc. Những nguyên tắc này sẽ là kim chỉ nam, nếu có tranh cãi giữa các member trong team, thì cứ đè nguyên tắc này ra mà giải quyết (nghe hơi có mùi cứng nhắc, mình thì thích tùy cơ ứng biến hơn) Tìm các vị trí tuyển dụng designer lương cao cho bạn Nguyên tắc thiết kế của GOV.UK Đây là danh sách của trang GOV.UK Bắt đầu với thứ user cần Làm ít hơn Thiết kế với dữ liệu Làm mọi thứ thật dễ dàng Lặp. Rồi lặp lại lần nữa Dành cho tất cả mọi người Hiểu ngữ cảnh hiện tại Làm dịch vụ digital, không phải làm website Nhất quán, nhưng không hòa tan (phải có chất riêng với thằng khác) Cởi mở, mọi thứ tốt hơn Bao trừu tượng luôn các bạn, trang Gov.uk này cũng có câu tổng quát rất hay Thiết kế tốt là thiết kế có thể sử dụng. Phục vụ cho nhiều đối tượng sử dụng, dễ đọc nhất nhất có thể. Nếu phải từ bỏ đẹp tinh tế – thì cứ bỏ luôn . Chúng ta tạo sản phẩm cho nhu cầu sử dụng, không phải cho người hâm mộ . Chúng ta thiết kế để cả nước sử dụng, không phải những người đã từng sử dụng web. Những người cần dịch vụ của chúng ta nhất là những người đang cảm thấy khó sử dụng dịch...

By stationd
Applicant Tracking System là gì? ATS hoạt động ra sao

Applicant Tracking System là gì? ATS hoạt động ra sao

Công nghệ phát triển hướng đến giải quyết và cải tiến cho mỗi quy trình, hoạt động của doanh nghiệp cũng như đời sống. Đối với lĩnh vực tuyển dụng, sự xuất hiện của phần mềm ATS (Applicant Tracking System) mang đến nhiều thay đổi đáng kể, cả đối với nhà tuyển dụng và ứng viên. Vậy phần mềm ATS là gì? Chúng được sử dụng ra sao? Những thắc mắc về phần mềm ATS trong tuyển dụng sẽ được Station D giải đáp tại bài viết dưới đây. Hệ thống sàng lọc ứng viên ATS (Applicant Tracking System) Applicant Tracking System là gì? Applicant Tracking System (ATS) hay còn gọi là Hệ thống quản lý hồ sơ ứng viên là phần mềm quản lý quy trình tuyển dụng từ đầu đến cuối một cách tự động hóa. ATS được thiết kế để giúp nhà tuyển dụng tiết kiệm thời gian và chi phí trong việc thu thập, sắp xếp và sàng lọc hồ sơ các ứng viên. Các tính năng nổi bật của Applicant Tracking System Các tính năng nổi bật của Applicant Tracking System Applicant Tracking System (ATS) là một công cụ quan trọng giúp các công ty quản lý quy trình tuyển dụng hiệu quả hơn. Cùng chúng tôi điểm qua các tính năng nổi bật của ATS: Sàng lọc và quản lý hồ sơ ứng viên Khả năng tìm kiếm và sàng lọc ứng viên là một trong các tính năng nổi bật nhất của ATS. Với việc sử dụng từ khóa và tiêu chí cụ thể, hệ thống có thể nhanh chóng tìm kiếm và sàng lọc các hồ sơ phù hợp, tự động loại bỏ những ứng viên không đạt yêu cầu. Điều này giúp nhà tuyển dụng tập trung vào những ứng viên...

By stationd
Hiểu về trình duyệt – How browsers work

Hiểu về trình duyệt – How browsers work

Bài viết được sự cho phép của vntesters.com Khi nhìn từ bên ngoài, trình duyệt web giống như một ứng dụng hiển thị những thông tin và tài nguyên từ server lên màn hình người sử dụng, nhưng để làm được công việc hiển thị đó đòi hỏi trình duyệt phải xử lý rất nhiều thông tin và nhiều tầng phía bên dưới. Việc chúng ta (Developers, Testers) tìm hiểu càng sâu tầng bên dưới để nắm được nguyên tắc hoạt động và xử lý của trình duyệt sẽ rất hữu ích trong công việc viết code, sử dụng các tài nguyên cũng như kiểm thử ứng dụng của mình. Cách để npm packages chạy trong browser Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser? Khi hiểu được cách thức hoạt động của trình duyệt chúng ta có thể trả lời được rất nhiều câu hỏi như: Tại sao cùng một trang web lại hiển thị khác nhau trên hai trình duyệt? Tại sao chức năng này đang chạy tốt trên trình duyệt Firefox nhưng qua trình duyệt khác lại bị lỗi? Làm sao để trang web hiển thị nội dung nhanh và tối ưu hơn một chút?… Hy vọng sau bài này sẽ giúp các bạn có một cái nhìn rõ hơn cũng như giúp ích được trong công việc hiện tại. 1. Cấu trúc của một trình duyệt Trước tiên chúng ta đi qua cấu trúc, thành phần chung và cơ bản nhất của một trình duyệt web hiện đại, nó sẽ gồm các thành phần (tầng) như sau: Thành phần nằm phía trên là những thành phần gần với tương tác của người dùng, càng phía dưới thì càng sâu và nặng về xử lý dữ liệu hơn tương tác. Nhiệm...

By stationd
Tối ưu tỉ lệ chuyển đổi với Google Optimize và Google Analytics

Tối ưu tỉ lệ chuyển đổi với Google Optimize và Google Analytics

Tối ưu tỷ lệ chuyển đổi là một trong những yếu tố quan trọng mà một Growth Marketer không thể bỏ qua. Google Analytics là công cụ hữu hiệu và phổ biến nhất giúp chúng ta theo dõi, đo lường và tối ưu tỷ lệ chuyển đổi. Số liệu từ Google Analytics giúp chúng ta nhìn ra điểm cần thay đổi để tăng tỷ lệ chuyển đổi. Theo dõi chuyển đổi là quá trình thiết yếu nhưng cũng rất “khó nhằn”. Ngày nay, mọi người đang sử dụng điện thoại di động nhiều hơn và thường xuyên hơn khi mua hàng trực tuyến. Việc tối ưu hóa website phiên bản di động rất quan trọng. Traffic đến từ mobile khá lớn và làm ảnh hưởng nhiều tới tỷ lệ chuyển đổi. Để xem website của bạn có hoạt động tốt trên mobile hay không như thế nào? Làm gì khi tỷ lệ chuyển đổi giảm? Website phiên bản di động của bạn có nội dung hấp dẫn không? Không có những nút điều hướng hành động? Trang bị lỗi …, những điều này có thể ảnh hưởng tới tỉ lệ chuyển đổi Google Analytics, hiểu được điều này, bạn sẽ có cơ sở để khắc phục và hoàn thiện website của mình. Hãy cùng đến với chủ đề “DÙNG GOOGLE ANALYTICS TỐI ƯU TỈ LỆ CHUYỂN ĐỔI TRÊN MOBILE” với sự chia sẻ của diễn giả Nguyễn Minh Đức, CEO IM GROUP tại Vietnam Mobile Day 2018 nhé

By stationd