2012-05-25 32 views
9

Tôi đang tìm cách để làm cho việc phát triển Symfony 2 Assetic 1.0.2 dễ dàng hơn. Tôi sử dụng Assetic để bán phá giá/xuất bản nội dung của mình.Làm cho Symfony 2 Phát triển nội dung thoải mái

Hiện nay tôi tiếp tục chạy lệnh này trong nền:

php app/console assetic:dump --watch 

Nó giúp rất nhiều, mọi thay đổi tôi làm cho JS hoặc file CSS sẽ tự động được đổ vào các thư mục công cộng, nơi các nguồn lực được lấy từ bằng Trình duyệt.

Tuy nhiên, tôi có vấn đề với điều này:

  1. Nếu tôi thêm một file CSS/JS mới, vì một lý do nó không bị đổ. Tôi cần phải dừng đồng hồ, xóa bộ nhớ cache và khởi động lại đồng hồ.

  2. Đó là loại chậm, ăn 5% -20% thời gian CPU liên tục.

Có cách nào khác để phát triển với Assetic không? Tôi đã thử phương pháp phục vụ các tài nguyên thông qua một bộ điều khiển (use_controller: true cho Assetic), nhưng nó thậm chí còn chậm hơn (vì chúng ta hãy đối mặt với thực tế, PHP không phải để phục vụ dữ liệu tĩnh).

Trả lời

4

Đối với tôi, đây là cách nhanh nhất để phát triển với Assetic Tôi có thể tìm thấy. Tôi đã thử và tôi đã cố gắng tìm một quy trình làm việc tốt hơn để nâng cao tốc độ tạo nội dung nhưng không tìm thấy.

Có một số công việc trong ngành bậc thầy của Symfony2 trên một thành phần ResourceWatcher mà có thể có thể giúp về vấn đề này bằng cách:

  1. Đẩy nhanh quá trình ngắm bằng cách dựa vào quan sát tài nguyên bản địa như inotify
  2. Fixing vấn đề khi các tài nguyên được thêm vào/gỡ bỏ để chúng được đổ một cách chính xác.

Bạn có thể xem tiến trình trên thành phần trong số PR này.

Hy vọng một người nào đó sẽ cung cấp một số thủ thuật để tăng tốc độ phát triển với quy trình làm việc linh hoạt hoặc hoàn toàn khác.

Kính trọng,
Matt

1

trong sử dụng developpement này:

php app/console assets:install web --symlink 
+1

Tôi đã sử dụng nó, nhưng nó vẫn tìm nạp tệp nguồn chậm, tôi đoán tôi sẽ cần chỉ định đường dẫn đến '/ bundles/js/...' để nó hoạt động, điều này không lý tưởng cho sản xuất, tuy nhiên. – Tower

+7

tài sản: cài đặt và assetic: dump là hai điều hoàn toàn khác nhau hoàn toàn – calumbrodie

3

Đối với sự chậm chạp, bạn có thể chạy với --no-debug--forks=4. Cài đặt phụ thuộc Spork thông qua nhà soạn nhạc và chạy app/console assetic:dump --no-debug --forks=4.

Nếu bạn có nhiều lõi hơn, hãy thêm nhiều dĩa hơn. Nếu bạn muốn giữ (các) lõi miễn phí, hãy giảm số lượng. Không chắc tại sao nó không nhanh gấp 4 lần - không nghi ngờ nó không quá thông minh về việc gán các công việc khác nhau cho các lõi khác nhau - nhưng đó là một sự khởi đầu.

Một số điều tôi chỉ cố gắng một thời gian ngắn:

time app/console assetic:dump 

real 1m53.511s 
user 0m52.874s 
sys  0m4.989s 

time app/console assetic:dump --forks=4 

real 1m14.272s 
user 1m12.716s 
sys  0m5.752s 

time app/console assetic:dump --forks=4 --no-debug 

real 1m9.569s 
user 1m6.948s 
sys  0m5.844s 

Tôi không chắc rằng điều này sẽ giúp với --watch, như --watch tiêu thụ toàn bộ lõi trên riêng của nó, bởi vì while (true) trong PHP.

1
  1. Định cấu hình các bộ lọc khác nhau để phát triển và sản xuất. Trong quá trình sản xuất bạn muốn JS và CSS của bạn được rút gọn và làm xấu đi, nhưng đây là một sự lãng phí thời gian trong quá trình phát triển.

  2. Đảm bảo rằng assetic.debug là sai. Điều này sẽ đảm bảo rằng các tệp JS và CSS của bạn được ghép nối, sao cho tất cả JS và CSS có thể được tìm nạp trong một yêu cầu HTTP mỗi.

  3. Nếu bạn đang sử dụng bộ điều khiển (assetic.use_controller là đúng) và bạn có hộp công cụ nhà phát triển của trình duyệt mở, hãy chắc chắn để bỏ chọn “Vô hiệu hoá bộ nhớ cache” hộp kiểm (trong Chrome, hộp kiểm là trên cửa sổ Mạng; trong Firefox trong ngăn cài đặt). Điều này sẽ cho phép trình duyệt của bạn gửi yêu cầu If-Modified-Since - nếu các tệp không thay đổi trên máy chủ, máy chủ sẽ trả lại 304 Not modified mà không biên dịch lại nội dung của bạn và trình duyệt sẽ sử dụng phiên bản mới nhất từ ​​bộ nhớ cache của trình duyệt.

  4. Không sử dụng Assetic để tải tệp từ CDN. Tải tệp xuống máy chủ của bạn (theo cách thủ công, sử dụng Bower hoặc bất kỳ thứ gì) hoặc tải chúng từ CDN bằng cách thêm trực tiếp <script src=…> hoặc <link rel=stylesheet href=…> vào mẫu HTML của bạn.

+0

Lạ, Mặc dù máy chủ cho 304, nó sẽ gửi tải trọng anyway trong trường hợp của tôi. – hbogert

Các vấn đề liên quan