Performance Tips
Optimize your SDK usage for better performance.
Batch Operations Wisely
# ✅ Good - Batch related operations
documents_to_create = [
"Requirements", "Design Spec", "Test Plan", "Deployment Guide"
]
created = []
for idx, title in enumerate(documents_to_create):
doc = client.create_document(
CreateDocumentRequest(
kind=Kind.Project,
kind_id=project_id,
title=title,
index=idx
)
).payload.document
created.append(doc)
# ❌ Bad - Making unnecessary API calls in loops
for task in tasks:
# Don't fetch profile in every iteration!
profile = client.get_profile()
# ... use profile
Minimize API Calls
# ✅ Good - Fetch once, use many times
projects = client.get_projects()
project_map = {p.id: p for p in projects.projects}
# Use cached data
for task in tasks:
project = project_map.get(task.project)
print(f"{task.name} - {project.name if project else 'Unknown'}")
# ❌ Bad - Fetching same data repeatedly
for task in tasks:
project = client.get_project(task.project) # Repeated API calls!
print(f"{task.name} - {project.project.name}")
Use Task Cache Effectively
from vaiz.models import GetTasksRequest
# Cache is automatic for identical requests
request = GetTasksRequest(project=project_id, completed=False)
# First call - hits API (slow)
tasks1 = client.get_tasks(request)
# Within 5 minutes - uses cache (fast)
tasks2 = client.get_tasks(request)
# Different request - hits API again
tasks3 = client.get_tasks(GetTasksRequest(project=project_id, completed=True))
Best Practices
Create Lookup Maps
Cache frequently accessed data in dictionaries:
# Fetch all reference data once
projects = client.get_projects()
boards = client.get_boards()
milestones = client.get_milestones()
# Create lookup maps
project_map = {p.id: p for p in projects.projects}
board_map = {b.id: b for b in boards.boards}
milestone_map = {m.id: m for m in milestones.milestones}
# Use in loops without additional API calls
for task in tasks:
project = project_map.get(task.project)
board = board_map.get(task.board)
print(f"{task.name} - {project.name} - {board.name}")
Batch File Operations
Upload multiple files efficiently:
from vaiz.models.enums import UploadFileType
files_to_upload = [
("screenshot1.png", UploadFileType.Image),
("screenshot2.png", UploadFileType.Image),
("report.pdf", UploadFileType.Pdf),
]
uploaded_files = []
for file_path, file_type in files_to_upload:
file = client.upload_file(file_path, file_type)
uploaded_files.append(file.file)
print(f"✅ Uploaded {len(uploaded_files)} files")
See Also
- Common Patterns - Essential SDK patterns