Modernizr Là Gì

     

Introduction JavaScript là một môi trường thiên nhiên đơn luồng (single-threaded environment), rất có thể hiểu dễ ợt là tại 1 thời điểm khẳng định chỉ có một script được thực thi. Trong thời gian gần đây, câu hỏi sử…

Bạn sẽ xem: modernizr là gì


Introduction

JavaScript là một môi trường đơn luồng (single-threaded environment), có thể hiểu dễ ợt là tại một thời điểm khẳng định chỉ gồm một script được thực thi. Trong thời hạn gần đây, việc thực hiện JavaScript trong việc xây dựng những áp dụng website trở cần thông dụng hơn bao giờ hết, các quá trình được mang số đông về phía client. Trực thuộc tính đối chọi luồng của JavaScript là một trong cản trở so với việc trên bởi nó làm ảnh hường khá phệ đến hiệu năng của các áp dụng website. Một chẳng hạn dễ dàng là những áp dụng website thường cần truy vấn database, thực hiện các biến đổi cầu kỳ trên DOM, giải quyết và xử lý các sự kiện tương quan đến UI & request đến các API mặt thứ ba – tương đối nhiều câu hỏi cho một thread.

Bạn đang xem: Modernizr là gì

Trong kí vãng tất cả chúng ta thường áp dụng setInterval , setTimeout, XMLHttpRequest & sự kiện handlers để tiến hành tiến trình ăn khớp hóa (concurrency). Sử dụng các trick trên cho phép thực thi code một bí quyết bất ăn uống nhập, mà lại nó không trọn vẹn không gồm nghĩa vớ cả bọn họ đang thực hiện concurrency một cách đầy đủ. Bây giờ WEB API cung cấp một dụng cụ giỏi hơn để tiến hành multi-threading task một cách hiệu quả hơn – Web Workers. Web Workers chưa phải là một công nghệ mới lúc nó hiện ra cùng cùng với HTML5, nhiệm vụ chính của những Workers là triển khai các scripts xử lý các các bước nặng (querying API, complex mathematical computations) làm việc background & khác biệt với những scripts liên quan đến UI (thường là Main Thread). Việc này có thể chấp nhận được long-running scripts được thực hiện mà không gây ảnh nhắm tới thử nghiệm của bạn dùng.

Trong nội dung này mình sẽ trình diễn những trí thức cơ phiên bản liên quan mang đến Web Workers, phương pháp hoạt động, những use-cases cũng giống như những lưu ý khi thực hiện dụng nuốm này khi khủng mạnh.

Web Workers

Definition

Web Worker (hay Worker) là một đối tượng người dùng JavaScript được tạo bằng việc thực hiện Worker constructor (e.ɢ Worker, SharedWorker, AudioWorker) với tham số là tên (đường dẫn) mang đến một JavaScript file. JavaScript file đó chứa những logic được khởi chạy bên phía trong thread của worker vừa tạo. Script phía bên trong Worker sẽ được thực thi ngơi nghỉ background & biệt lập khỏi thread bao gồm của trang web application.

Trong câu chữ này, vớ cả họ sẽ chủ đạo mày mò về Worker (DedicatedWorker). Để mở màn tất cả bọn họ sẽ chế tạo một instance của DedicatedWorker & hiển thị nó trong console. Để dễ dàng tất cả họ giả sử phần nhiều logic dưới được thực hiện phía bên trong script tag của một tệp tin HTML.

var

worker

=

new

Worker

(

"prime.js"

)

console

.

log

(

worker

)

console

.

log

(

this

)

*

Sau thời gian đã log Worker instance & context giờ đây tất cả bạn có thể thấy một số trong những API cơ bản của Worker như onerror, onmessage, postMessage & terminate. đều API này sẽ được đề cập mang đến trong phần sau của nội dung. để ý rằng context lúc này là global context tuyệt Window. Bây chừ tất cả bọn họ sẽ chỉnh sửa file prime.js & thêm một cái alert dễ dàng alert("Hello from the outside!") & reload lại trình duyệt. Xem xét kết quả trong console ta vẫn thấy một error.

*

Tất cả họ dùng JavaScript nhưng mà chẳng thể truy cập được alert function. Vì sao ở tiến độ này là prime.js sẽ được thực thi bên phía trong một context không giống với Window. Script bên trong worker được phép truy cập đến những DOM API bên cạnh đó không phải toàn thể các API đều truy vấn được phía bên trong Worker. Để kiểm soát context giờ đồng hồ đây, tất cả họ sẽ thêm dòng lệnh tiện lợi sau vào bên phía trong prime.js: console.log(this). Hiệu quả nhận được đã như hình mặt dưới:

*

Chú trọng tâm rằng context lúc này đã được biến hóa thành DedicatedWorkerGlobalScope thay vày Window (nếu sử dụng SharedWorker context đang là SharedWorkerGlobalScope). Bên phía trong context của các Worker vớ cả bạn cũng có thể thực hiện những logic JavaScript thông thường. Ngoài ra tất cả họ chẳng thể tiến hành các làm việc trên DOM một phương pháp trực tiếp, cũng như chẳng thể truy cập đến một vài method & property của window object. Ngoài những hạn chế trên, vớ cả họ vẫn rất có thể truy cập đến rất là nhiều API xung yếu như:

Communication Between Threads

Worker script sẽ được thực thi do một background thread khác biệt & chạy cùng lúc với thread chính. Trong tương đối nhiều trường vừa lòng tất cả họ cần truyền tài liệu từ những background worker mang đến main thread để giải quyết và xử lý & trái lại. Nói phương pháp khác, tất cả bọn họ cần coordinate (điều phối) mối quan hệ giữa những thread cùng với nhau.


Nếu bạn đã từng làm việc với Concurrency vào Java, rất có thể bạn đã biết tới hai tư tưởng khá cơ bản là Producer & Consumer. Lúc lập trình cùng với thread hai quá trình bạn thường bắt buộc làm chính là synchronize & coordinate những thread. Vào Java bài toán đó sẽ được thực hiện bằng phương pháp dùng Semaphores (một số mẹo ví dụ và cụ thể đó là sử dụng wait-notify hoặc wait-notifyAll). Trong quan hệ Producer/Consumer, vấn đề coordinating sẽ giúp đỡ cho việc truy cập share resources trở nên chuẩn chỉnh xác.

Quay quay trở về với Worker, chính sách coordinate giữa những worker & main thread sẽ là message-passing áp dụng sự khiếu nại model. Main thread có thể gửi thông tin đến những Worker trải qua postMessage. PostMessage đang nhận thông số đầu vào là 1 trong những string hoặc một JSON object. Main thread & Worker sẽ nhận thông tin bằng bài toán lắng nghe message sự kiện, & truy vấn dữ liệu thông qua sự kiện.data.

var

worker

=

new

Worker

(

"foo.js"

)

worker

.

postMessage

(

"Hello from main thread"

)

worker

.

addEventListener

(

"message"

,

function

(

e

)

console

.

log

(

e

.

data

)

,

false

)

self.

addEventListener

(

"message"

.

function

(

e

)

console

.

log

(

e

.

data

)

self

.

postMessage

(

"Hello from worker"

)

,

false

)

self

.

onmessage

=

function

(

e

)

...

Trong context của một Worker, this & self mọi chỉ đến global scope – WorkerGlobalScope

Cảnh báo rằng tài liệu truyền thân Main Thread & những Worker sẽ được copy (copied) chứ không cần được share (shared). Mang sử tài liệu truyền đi từ Main Thread & Worker là một trong JSON object cất name property, property này sẽ truy vấn được nghỉ ngơi cả Main Thread & Worker hình như giá trị đang là khác nhau. Trên thực tiễn, dữ liệu sẽ tiến hành serialized trước khi được gởi đến cho các Worker & tài liệu đó sẽ được de-serialized sau đó. Tài liệu không được chia sẻ nên sẽ tạo cho một bạn dạng sao sau những lần được truyền đi. Đó cũng là lý do vì sao tất cả bọn họ nên cảnh báo khi dùng Worker vày nó hơi tốn tài nguyên của hệ thống. Trong phần tiếp theo của nội dung, vớ cả bọn họ sẽ đề cập mang lại một mẹo nhằm khắc phục sự việc này.

More about postMessage: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

Transferrable objects

Đa phần những trình duyệt lúc này đều cài đặt structured cloning algorithm chất nhận được tất cả bọn họ sử dụng những kiểu tài liệu cầu kỳ hơn đến Worker, ví dụ điển hình như: Blob, File, FileList, ArrayBuffer, Map, & JSON objects. Mục đích của structured cloning algorithm là khiến cho tiến trình copy những object khó hiểu trở nên tác dụng hơn. Không chỉ có vậy nên ghi nhớ rằng, dữ liệu vẫn sẽ được copied trong mỗi lần hotline postMessage. Mang sử vớ cả họ cần gửi một file khoảng tầm 100MB thân Worker & Main Thread, vấn đề này sẽ gây nên tốn hơi nhiều tài nguyên hệ thống.

Các kiểu tài liệu trên triển lẵm nhiều lựa chọn dẻo dẻo hơn khi định dạng tài liệu truyền đi, trong khi tiến trình sao chép có thể kéo dài nếu dữ liệu có kích thước quá lớn. Transferrable objects là một phương pháp để giải quyết vấn đề này. Khi áp dụng transferrable objects tài liệu sẽ chỉ chuyển đổi context & không bị sao chép lại. Phát âm một cách dễ dàng, nó y như pass-by-reference (thay vì pass-by-value) vào từ ngữ ₵.

ArrayBuffer thường thường dùng trong sự thỏa hiệp dữ liệu thân Worker & Main Thread. Thực hiện ArrayBuffer tất cả bạn có thể truyền binary data chẳng hạn như ảnh, tiếng động hiệu quả hơn, nắm vì thực hiện base64 encoding như trước.

Syntax mang đến postMessage đã như sau:

worker.

postMessage

(

message

,

<

transferList

>

)

;

Trong cấu tạo trên, message đang là dữ liệu được gửi mang đến Worker, nó không độc nhất thiết phải là một trong ArrayBuffer, nó là tài liệu mà tất cả chúng ta cũng có thể lấy ra áp dụng e.data. Tham số trang bị hai đã là những transferrable objects mà tất cả chúng ta mong muốn chuyển quyền sở hữu. Lý do tất cả bọn họ nói đưa quyển cài (ownership) là vì transferrable object sau thời khắc được đưa từ Main Thread quý phái Worker thì chỉ rất có thể sử dụng được bên Worker & trái lại.

Các bạn có thể tìm hiều một chẳng hạn cụ thể về việc áp dụng Transferrable objects mang lại Web Worker trên đây

Dedicated Worker

Trong phần này của nội dung, vớ cả họ sẽ khám phá cách cần sử dụng DedicatedWorker. Về SharedWorker các bạn cũng có thể tìm hiều thêm tại đây

Trước khi mày mò cách dùng, tất cả họ cần chú ý rằng Dedicated Worker đã chỉ được thực hiện bởi 1 script duy nhất, khác với Shared Worker khi nó rất có thể được sử dụng bởi những script khác nhau (cùng thương hiệu miền cùng với Worker). Không đa số thế bây giờ DedicatedWorker thịnh hành hơn hơi nhiều so với SharedWorker & một trình săn sóc như Safari & Mạng internet Explorer không hỗ trợ SharedWorker trong bất kỳ phiên phiên bản nào tính đến thời khắc nội dung này.


Worker Detection

Trước khi áp dụng Worker vớ cả chúng ta cần kiểm soát xem trình duyệt giờ đây có bổ trợ Worker xuất xắc không. Bởi Worker constructor function được truy vấn thông qua window object, vớ cả bạn có thể kiểm rà như sau:

if

(

window

.

Worker

)

var

worker

=

new

Worker

(

"foo.js"

)

if

(

Modernizr

.

webworkers

)

var

worker

=

new

Worker

(

"bar.js"

)

Create New Worker

Việc tạo new một Dedicated Worker instance là khá dễ dàng, vớ cả bọn họ chỉ cần thực hiện Worker() constructor function với tham số đầu vào là URI cho script sẽ được thực thi bên phía trong worker thread:

if

(

window

.

Worker

)

var

worker

=

new

Worker

(

"./math/prime.js"

)

Exchange Messages

Trong phần trước lúc đề cập cho message-passing vào Worker, vớ cả họ đã đi ngang qua 1 chẳng hạn dễ dãi minh họa quá trình thỏa thuận tài liệu giữa Main Thread & Worker. Sau thời khắc đã gồm một instance của Worker, nhằm khởi cồn Worker kia tất cả bọn họ sẽ sử dụng postMessage function. Cảnh báo, vào trường hợp không tồn tại dữ liệu được truyền đi, vớ cả chúng ta cần pass một empty string như argument trước hết đến postMessage. Nguyên nhân là việc thiết lập function bên trên giữa các trình phê duyệt là không trọn vẹn giống nhau. Một vài trình chăm sóc như Firefox đang báo lỗi khi tất cả bọn họ không truyền tham số cho postMessage

worker.

postMessage

(

""

)

worker

.

Xem thêm: Hướng Dẫn Cách Tạo Bảng Ngọc Mới Trong Lol, Please Wait

postMessage

(

"Hello World!"

)

worker

.

postMessage

(

name

:

"Foo Bar"

,

age

:

100000

)

Sau thời gian đã kick off Worker, vớ cả họ sẽ áp dụng Sự kiện mã sản phẩm để thỏa thuận dữ liệu. Cách thường được sử dụng là lắng nghe message sự kiện nạm vì áp dụng onmessage property. Vớ cả bọn họ sẽ đi ngang sang một chẳng hạn nữa, ngoài ra thay vì thỏa thuận string tất cả họ sẽ sử dụng object mang đến dữ liệu.

Greeting

Stop Worker

if

(

window

.

Worker

)

var

worker

=

new

Worker

(

"worker.js"

)

worker

.

addEventListener

(

"message"

,

function

(

e

)

document

.

getElementById

(

"result"

)

.

textContent

=

e

.

data

,

false

)

function

greeting

(

)

worker

.

postMessage

(

"name"

:

"Anonymous"

,

"age"

:

25

)

function

stop

(

)

worker

.

terminate

(

)

self.

addEventListener

(

"message"

,

function

(

e

)

var

data

=

e

.

data

var

mesage

=

"Hello! I am "

+

data

.

name

+

"I am "

+

data

.

age

+

" years old"

self

.

postMessage

(

message

)

,

false

)

Trong ví dụ điển hình trên Main Thread đang gửi mang đến Worker một object chứa tin tức về một fan nào đó. Bửa phận của Worker sẽ là làm cho một câu trình làng về tín đồ đó là trả lại mang đến Main Thread. Main Thread đã lắng nghe message sự khiếu nại & in câu chào đó sử dụng output HTML tag. Để ngừng worker tất cả bọn họ sử dụng terminate function. Vớ cả chúng ta cũng thực hiện một giao diện tiện lợi với nhì button cho hai câu hỏi là hiển thị câu kính chào & ngừng worker.

Terminate Worker

Để dừng một worker vớ cả chúng ta có hai bí quyết sau (tất cả bạn cũng có thể ngắt connect từ Main Thread hoặc từ mặt Worker):

Sử dụng terminate function trên Worker instance.Sử dụng close bên trong Worker script.

worker.

terminate

(

)

self

.

close

(

)

Hande Errors

Trong những chẳng hạn trên tất cả bọn họ chưa nói tới việc giải quyết các error có thể xảy ra. Tương đương tiến trình nhận & giải quyết dữ liệu, tất cả họ sẽ lắng nghe error sự kiện & handle những error vào callback:

worker.

addEventListener

(

"error"

,

function

(

e

)

console

.

log

(

e

)

,

false

)

Sự kiện object trả về triển khai ErrorEvent interface, & phân phối cho tất cả họ hơi nhiều tin tức hữu dụng:

lineno: Địa điểm của cái code gây nên lỗi.filename: thương hiệu của file mà lại lỗi xảy ra.message: diễn tả cụ thể về lỗi sẽ xảy ra.Import Scripts

Bên vào một Worker, vớ cả chúng ta cũng có thể sử dụng this.importScripts(urls) để import các thư viện & dependency rất cần thiết cho worker script.

this

.

importScripts

(

"foo.js"

)

this

.

importScripts

(

"foo.js"

,

"bar.js"

,

"fizz.js"

)

Cảnh báo rằng vớ cả họ chẳng thể import một số thư viện như jQuery bên phía trong worker script bằng cách thức này. Vào phần đầu của ngôn từ tất cả bọn họ từng đề cập tới bài toán chẳng thể truy tìm cập tổng thể các API phía bên trong window object (do một vài vấn đề về bảo mật), nếu áp dụng this.importScripts("jquery.js") sẽ sở hữu lỗi xảy ra.


Subworkers

Một Worker bao gồm thể chứa được nhiều Worker con (Subworker) không giống nhau, được cho phép tất cả chúng ta chia nhỏ hơn nữa một task phía bên trong một Worker. Khi sử dụng Subworker tất cả bọn họ cần cảnh báo một số trong những vấn đề sau:

Subworkers đề xuất được lưu trữ cùng origin so với Worker gốc.URI vào Subworkers vẫn là con đường dẫn tương đối đối với vị trí của Worker gốc.

Đa phần những trình coi xét đều trưng bày một process riêng cho từng Worker. Trước lúc sử dụng thêm một Worker vớ cả chúng ta cần suy xét tài nguyên giờ đây của hệ thống. Lý do là dữ liệu truyền đi giữa cách Worker sẽ tiến hành copy chứ không chung một nguồn, sử dụng vô số Worker đang không đem về hiểu trái & làm tác động ảnh hưởng đến performance của áp dụng.

Worker là một trong dụng thế khá hữu dụng, trong khi nó cũng có một số giới hạn khẳng định, vào phần này tất cả họ sẽ nhắc đến một số vấn đề chạm mặt phải khi áp dụng Worker.

Same Origin

Toàn bộ các Worker script nên được served từ cùng một tên miền như script nhưng mà ở đó Worker được khởi tạo. Điều này cũng vận dụng cho cả loại protocol đã sử dụng.

Limited Access

Logic bên phía trong Worker đã là tách biết so với Main Thread, vì vậy Worker rất có thể sẽ không truy cập được đến một số DOM APIs (như đã kể tới trong phần đầu của nội dung). Một phương thức để triển khai những việc liên quan đến Main Thread là gửi message mang lại nó từ Worker trải qua postMessage.

Restricted Local Access

Worker đang không vận động nếu trang web page được vps trực tiếp trường đoản cú filesystem. Vớ cả chúng ta cần phải có một server nếu ước muốn sử dụng Worker.

Conclusion

Trong nội dung này mình có trình diễn một bí quyết khá cơ bản về web Worker (chăm chú chủ đạo vào Dedicated Workers): khái niệm, phương pháp hoạt động, bí quyết truyền download dữ liệu, cũng giống như những giới hạn là chú ý khi áp dụng Web Worker. ước ao rằng nội dung để giúp đỡ ích được 1 phần nào đó cho các bạn trong quá trình sau này.

Xem thêm: Cách Chặn Quảng Cáo Trên Internet Explorer 10, Cách Chặn Quảng Cáo Trên Internet Explorer

References


*

You can support me by buying me α coffee: https://www.buymeacoffee.com/donyd

Tree House (Tiếp thị links backlinks, no cost lớn you but helps me out α little):Try α không tính phí trial at treehouse for 30 days. One of the best ways lớn get into an IT career of your choice:https://treehouse.7eer.net/k1y13

Github: https://github.com/donyd/CanvasDemo

javascript modernizr seting

modernizr là gì? – viyouen

Author: hoidap.viyouen.comNhận xét: 4 ⭐ ( 3864 lượt thừa nhận xét )Khớp với công dụng tìm kiếm: modernizr là gì?

Tạo popup đăng nhập, đăng ký với HTML, CSS, & JS

Author: nguyenvanhieu.vnNhận xét: 3 ⭐ ( 6869 lượt thừa nhận xét )Khớp với kết quả tìm kiếm: câu hỏi tạo popup đăng nhập & đk giúp trang web của chúng ta trở lên rất đẹp & tuyệt đối hơn trong mắt fan tiêu dùng. Rộng cả, câu hỏi tạo form đăng nhập popup lên sẽ

Modernizr Là Gì? hướng Dẫn sử dụng Modernizr

Author: dembuon.vnNhận xét: 3 ⭐ ( 9792 lượt nhận xét )Khớp với hiệu quả tìm kiếm: Modernizr là 1 thư viện Javascript giúp auto phát hiện nay & hỗ trợ những trình chăm chú cũ áp dụng được HTML5 & CSS3 để chạy website không biến thành lỗi khi hiển…

Dịch Vụ kiến tạo Trang web Hollaweb

Author: hollaweb.comNhận xét: 3 ⭐ ( 3229 lượt nhận xét )Khớp với công dụng tìm kiếm: thương mại & dịch vụ kiến trúc website hollaweb.com, chuyên phong cách thiết kế website chi tiêu thấp, kiến trúc website trọn gói, website bán hàng, trang web công ty với đa dạng và phong phú mã đẹp, chuẩn SEO, chuẩn chỉnh Responsive tương thích hiển thị trên nhiều thiết bị

Modernizr là gì. Công dụng của nó so với bản vẽ xây dựng trang web.

Author: danghungk50.weebly.comNhận xét: 4 ⭐ ( 8004 lượt dấn xét )Khớp với công dụng tìm kiếm:

Author: help.bing.microsoft.comNhận xét: 5 ⭐ ( 5661 lượt dấn xét )Khớp với kết quả tìm kiếm: xem thêm các văn bản khác thuộc siêng đề: kỹ năng lập trình