Tôi đã thực hiện một số đọc về hai khái niệm mới (tương đối) trong ngôn ngữ Javascript - Web Workers và Processing.js tuyệt vời của John Resig (tốt, không thực sự là một 'Javascript mới' khái niệm ', nhưng bạn có ý tưởng của tôi). Một số ví dụ tuyệt vời của cả hai đi lang thang internets, nhưng tôi vẫn chưa tìm thấy một trong đó sử dụng cả hai kỹ thuật hiệu quả. Nó trông khá thú vị và mạnh mẽ với tôi, vì vậy tôi nghĩ tốt hơn là nên thử.Kết hợp sức mạnh của Processing.js và Web Worker
Tuy nhiên, tôi thực sự không thể tìm ra thiết kế kịch bản tốt nhất để tích hợp cả hai ... Có vẻ như tôi thường sử dụng Processing.js, một số lớp được xác định trong vòng -ứng dụng'. Nó cho phép bạn sử dụng cú pháp giống như Java để thực hiện điều này. Tuy nhiên, các lớp này chỉ có thể truy cập trong ứng dụng Xử lý - điều hiển nhiên. Nhưng trong ví dụ this, một đối tượng hàm Javascript lần đầu tiên được định nghĩa trong một kịch bản riêng biệt, và nếu sử dụng Worker, kịch bản lệnh Worker-nhập khẩu nguyên mẫu của đối tượng và loại 'bu lông' chính nó vào nó.
Với tôi, cả hai không có vẻ 'có thể hoán đổi', trong đó bạn không thể truy cập vào lớp mà bạn đã xác định trong ứng dụng Xử lý, khi bạn đang ở trong kịch bản Công nhân của bạn. Có lẽ vì một lý do, vì các lớp xử lý giống như chắc chắn không giống như Javascript. Theo như tôi có thể thấy, tôi sẽ phải thực hiện một định nghĩa tương tự của lớp (dưới dạng một nguyên mẫu hàm mới) trong tập lệnh Worker của tôi - nó không phải là rất tốt để bảo trì, và có vẻ như thiết kế tồi tệ với tôi, mặc dù tôi vẫn là một newbie lớn về chủ đề này.
Tôi có thấy gì không? Tôi có muốn thứ gì đó không được cho là không? Hay tôi vừa hiểu lầm một số khái niệm cơ bản?
Cảm ơn sự giúp đỡ!
Edit:
tiếp tục cố gắng rối tung với nguyên mẫu của người lao động để 'hình dạng' nó như đối tượng đó là nghĩa vụ phải làm việc cho, nhưng nhận ra rất nhanh chóng, đây không phải là con đường để đi .
Hãy thử một phác thảo để làm việc với: Tôi có một lớp 'Bóng', mà khá nhiều không làm bất cứ điều gì ngoại trừ lưu trữ một vị trí hai chiều. Trên mỗi chu kỳ draw()
, Processing.js gọi phương thức update()
của nó, điều này làm cho Bóng chấp nhận một vị trí mới. Sau đó, phương thức display()
được gọi, trong đó có Bóng vẽ một vòng tròn nhỏ ở vị trí hiện tại của nó.
Không có gì phức tạp để bắt đầu. Bây giờ, giả định rằng việc xác định vị trí mới của quả bóng là một hoạt động khá tốn kém - ví dụ, nếu nó liên quan đến chuyển động của quả bóng thông qua một trường hấp dẫn 'phức tạp'. Nếu việc tính toán này phải được thực hiện từng lần trước khi vẽ, nó sẽ gây ra ít nhất một chút chậm trễ. Tuy nhiên, nếu bạn quản lý để làm công cụ này cùng một lúc, nó có thể có một chạy mượt mà hơn. Vì vậy, tôi đã tìm ra rằng tôi có thể cung cấp cho lớp Ball một mảng 'vị trí' phụ trong danh sách thuộc tính của nó, sẽ giữ tất cả các vị trí liên tiếp của nó. Khi Ball được khởi tạo, nó tạo ra một Worker mới sẽ bắt đầu tính toán các vị trí, và mỗi khi nó hoàn thành một vị trí, nó sẽ gửi lại một thông điệp tới Ball, chứa một vị trí hai chiều mới. Sau đó, Ball sẽ đẩy cái này lên mảng vị trí của nó, vì vậy mỗi lần nó phải cập nhật vị trí của nó, nó sẽ đi tới bản ghi tiếp theo trong mảng.
Tất cả trong tất cả - ý tưởng tốt hay xấu? Nếu tốt, bất kỳ đề xuất về cách thiết kế này?
Không, đây không phải là trường hợp - khi bản vẽ được khởi tạo, công nhân bắt đầu tính toán vị trí và mỗi lần tìm thấy một cái mới, nó sẽ được gửi đến luồng chính.Ở đó, nó được lưu trữ trong một loại 'caching'-array, vì vậy nó có thể được sử dụng sau này. Tuy nhiên, tính toán tiếp tục trong khi vẽ sẽ xảy ra, do đó, không có sự chậm trễ mỗi khung hình, và không có sự chậm trễ trước khi bắt đầu. – JorenB